// Copyright 2025 https://yuewu.dev/en All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "MoverTypes.h" #include "GMS_MoverStructLibrary.generated.h" /** * Data block containing extended movement actions inputs used by Generic Movement System. * 包含GMS所用到的运动行为输入定义的数据块。 */ USTRUCT(BlueprintType) struct GENERICMOVEMENTSYSTEM_API FGMS_MoverActionInputs : public FMoverDataStructBase { GENERATED_USTRUCT_BODY() UPROPERTY(BlueprintReadWrite, Category = Mover) bool bIsDashJustPressed = false; UPROPERTY(BlueprintReadWrite, Category = Mover) bool bIsAimPressed = false; UPROPERTY(BlueprintReadWrite, Category = Mover) bool bIsVaultJustPressed = false; UPROPERTY(BlueprintReadWrite, Category = Mover) bool bWantsToStartZiplining = false; UPROPERTY(BlueprintReadWrite, Category = Mover) bool bWantsToBeCrouched = false; // @return newly allocated copy of this FGMS_MoverActionInputs. Must be overridden by child classes virtual FMoverDataStructBase* Clone() const override { // TODO: ensure that this memory allocation jives with deletion method FGMS_MoverActionInputs* CopyPtr = new FGMS_MoverActionInputs(*this); return CopyPtr; } virtual bool NetSerialize(FArchive& Ar, UPackageMap* Map, bool& bOutSuccess) override { Super::NetSerialize(Ar, Map, bOutSuccess); Ar.SerializeBits(&bIsDashJustPressed, 1); Ar.SerializeBits(&bIsAimPressed, 1); Ar.SerializeBits(&bIsVaultJustPressed, 1); Ar.SerializeBits(&bWantsToStartZiplining, 1); Ar.SerializeBits(&bWantsToBeCrouched, 1); bOutSuccess = true; return true; } virtual UScriptStruct* GetScriptStruct() const override { return StaticStruct(); } virtual void ToString(FAnsiStringBuilderBase& Out) const override { Super::ToString(Out); Out.Appendf("bIsDashJustPressed: %i\n", bIsDashJustPressed); Out.Appendf("bIsAimPressed: %i\n", bIsAimPressed); Out.Appendf("bIsVaultJustPressed: %i\n", bIsVaultJustPressed); Out.Appendf("bWantsToStartZiplining: %i\n", bWantsToStartZiplining); Out.Appendf("bWantsToBeCrouched: %i\n", bWantsToBeCrouched); } virtual void AddReferencedObjects(FReferenceCollector& Collector) override { Super::AddReferencedObjects(Collector); } }; USTRUCT(BlueprintType) struct GENERICMOVEMENTSYSTEM_API FGMS_MoverTagInputs : public FMoverDataStructBase { GENERATED_USTRUCT_BODY() /** * A container which you can query tag to indicate a input is requested. */ UPROPERTY(BlueprintReadWrite, Category = Mover) FGameplayTagContainer Tags; // @return newly allocated copy of this FGMS_MoverActionInputs. Must be overridden by child classes virtual FMoverDataStructBase* Clone() const override { // TODO: ensure that this memory allocation jives with deletion method FGMS_MoverTagInputs* CopyPtr = new FGMS_MoverTagInputs(*this); return CopyPtr; } virtual bool NetSerialize(FArchive& Ar, UPackageMap* Map, bool& bOutSuccess) override { bool bSuccess = Super::NetSerialize(Ar, Map, bOutSuccess); Tags.NetSerialize(Ar, Map, bSuccess); return bSuccess; } virtual UScriptStruct* GetScriptStruct() const override { return StaticStruct(); } virtual void ToString(FAnsiStringBuilderBase& Out) const override { Super::ToString(Out); Out.Appendf("MoverTagInputs Tags[%s] \n", *Tags.ToString()); } virtual void AddReferencedObjects(FReferenceCollector& Collector) override { Super::AddReferencedObjects(Collector); } }; USTRUCT(BlueprintType) struct GENERICMOVEMENTSYSTEM_API FGMS_MoverMovementControlInputs : public FMoverDataStructBase { GENERATED_USTRUCT_BODY() /** * 当前是什么运动集?影响角色动画表现方式。 */ UPROPERTY(BlueprintReadWrite, Category = Mover) FGameplayTag DesiredMovementSet; /** * 想以什么状态移动?影响角色移动参数 */ UPROPERTY(BlueprintReadWrite, Category = Mover) FGameplayTag DesiredMovementState; /** * 想以什么方式旋转?影响角色的朝向方式。 */ UPROPERTY(BlueprintReadWrite, Category = Mover) FGameplayTag DesiredRotationMode; // @return newly allocated copy of this FGMS_MoverActionInputs. Must be overridden by child classes virtual FMoverDataStructBase* Clone() const override { // TODO: ensure that this memory allocation jives with deletion method FGMS_MoverMovementControlInputs* CopyPtr = new FGMS_MoverMovementControlInputs(*this); return CopyPtr; } virtual bool NetSerialize(FArchive& Ar, UPackageMap* Map, bool& bOutSuccess) override { bool bSuccess = Super::NetSerialize(Ar, Map, bOutSuccess); DesiredMovementSet.NetSerialize(Ar, Map, bSuccess); DesiredMovementState.NetSerialize(Ar, Map, bSuccess); DesiredRotationMode.NetSerialize(Ar, Map, bSuccess); return bSuccess; } virtual UScriptStruct* GetScriptStruct() const override { return StaticStruct(); } virtual void ToString(FAnsiStringBuilderBase& Out) const override { Super::ToString(Out); Out.Appendf("DesiredMovementSet [%s] \n", *DesiredMovementSet.ToString()); Out.Appendf("DesiredMovementState [%s] \n", *DesiredMovementState.ToString()); Out.Appendf("DesiredRotationMode [%s] \n", *DesiredRotationMode.ToString()); } virtual void AddReferencedObjects(FReferenceCollector& Collector) override { Super::AddReferencedObjects(Collector); } };