第一次提交

This commit is contained in:
不明不惑
2026-03-03 01:23:02 +08:00
commit 3e434877e8
1053 changed files with 102411 additions and 0 deletions

View File

@@ -0,0 +1,160 @@
// Copyright 2025 https://yuewu.dev/en All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "GMS_LocomotionStructLibrary.h"
#include "Engine/DataAsset.h"
#include "Animation/AnimInstance.h"
#include "GMS_AnimLayer.generated.h"
class UGMS_MovementDefinition;
class UGMS_AnimLayer;
class UGMS_MovementSystemComponent;
class UGMS_MainAnimInstance;
class APawn;
/**
* Base class for animation layer settings.
* 动画层设置的基类。
*/
UCLASS(Abstract, BlueprintType, EditInlineNew, Const, CollapseCategories)
class GENERICMOVEMENTSYSTEM_API UGMS_AnimLayerSetting : public UDataAsset
{
GENERATED_BODY()
public:
/**
* Gets the override animation layer class.
* 获取覆盖的动画层类。
* @param OutLayerClass The output animation layer class. 输出的动画层类。
* @return True if an override class is provided. 如果提供了覆盖类则返回true。
*/
UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category="GMS|AnimationLayer")
bool GetOverrideAnimLayerClass(TSubclassOf<UGMS_AnimLayer>& OutLayerClass) const;
/**
* Validates the data for this animation layer setting.
* 验证此动画层设置的数据。
* @param ErrorText The error message if validation fails. 如果验证失败的错误信息。
* @return True if data is valid. 如果数据有效则返回true。
*/
UFUNCTION(BlueprintNativeEvent, Category="GMS|AnimationLayer", meta=(DisplayName="Is Data Valid"))
bool K2_IsDataValid(FText& ErrorText) const;
#if WITH_EDITOR
public:
/**
* Validates data in the editor.
* 在编辑器中验证数据。
* @param Context The validation context. 验证上下文。
* @return The validation result. 验证结果。
*/
virtual EDataValidationResult IsDataValid(class FDataValidationContext& Context) const override;
#endif
};
/**
* Base class for all animation layers.
* 所有动画层的基类。
* @note Classes inheriting from this must only be linked to GMS_MainAnimInstance (the main animation instance). 从该类继承的类只能链接到GMS_MainAnimInstance主动画实例
*/
UCLASS(BlueprintType, Abstract)
class GENERICMOVEMENTSYSTEM_API UGMS_AnimLayer : public UAnimInstance
{
GENERATED_BODY()
protected:
/**
* The owning pawn of this animation layer.
* 此动画层的拥有Pawn。
*/
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="State", Transient)
TObjectPtr<APawn> PawnOwner;
/**
* Reference to the movement system component.
* 运动系统组件的引用。
*/
UPROPERTY(Transient)
TObjectPtr<UGMS_MovementSystemComponent> MovementSystem;
private:
/**
* Weak reference to the parent main animation instance.
* 对父主动画实例的弱引用。
*/
UPROPERTY(VisibleAnywhere, Category="State", Transient)
TWeakObjectPtr<UGMS_MainAnimInstance> Parent;
public:
/**
* Constructor.
* 构造函数。
*/
UGMS_AnimLayer();
/**
* Gets the parent main animation instance.
* 获取父主动画实例。
* @return The parent main animation instance. 父主动画实例。
*/
UFUNCTION(BlueprintCallable, BlueprintPure, Category="GMS|AnimationLayer", Meta = (BlueprintThreadSafe, ReturnDisplayName = "Parent"))
UGMS_MainAnimInstance* GetParent() const;
/**
* Called when the animation layer is linked to the main animation instance.
* 当动画层链接到主动画实例时调用。
* @note Suitable for initialization tasks similar to BeginPlay. 适合执行类似BeginPlay的初始化任务。
*/
UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category="GMS|AnimationLayer")
void OnLinked();
virtual void OnLinked_Implementation();
/**
* Called when the animation layer is unlinked from the main animation instance.
* 当动画层从主动画实例取消链接时调用。
* @note Suitable for cleanup tasks similar to EndPlay. 适合执行类似EndPlay的清理任务。
*/
UFUNCTION(BlueprintNativeEvent, Category="GMS|AnimationLayer")
void OnUnlinked();
virtual void OnUnlinked_Implementation();
/**
* Applies settings to the animation layer.
* 向动画层应用设置。
* @param Setting The setting object to apply, cast to the desired type. 要应用的设置对象,可转换为所需类型。
*/
UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category="GMS|AnimationLayer")
void ApplySetting(const UGMS_AnimLayerSetting* Setting);
virtual void ApplySetting_Implementation(const UGMS_AnimLayerSetting* Setting);
/**
* Resets the settings of the animation layer.
* 重置动画层的设置。
*/
UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category="GMS|AnimationLayer")
void ResetSetting();
virtual void ResetSetting_Implementation();
/**
* Initializes the animation.
* 初始化动画。
*/
virtual void NativeInitializeAnimation() override;
/**
* Called when the game starts.
* 游戏开始时调用。
*/
virtual void NativeBeginPlay() override;
/**
* Maps animation state names to gameplay tags for checking node relevance.
* 将动画状态名称映射到游戏标签以检查节点相关性。
* @note Used to determine if an animation state node is active via NodeRelevantTags in the main animation instance. 用于通过主动画实例中的NodeRelevantTags确定动画状态节点是否活跃。
*/
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Settings", meta=(TitleProperty="Tag"))
TArray<FGMS_AnimStateNameToTag> AnimStateNameToTagMapping;
};