160 lines
5.2 KiB
C
160 lines
5.2 KiB
C
// 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); }
|
|
};
|