2021-09-28 13:33:17 -04:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "AITypes.h"
|
|
|
|
|
#include "StateTreeConditionBase.h"
|
|
|
|
|
#include "StateTreeAnyEnum.h"
|
2022-08-23 13:04:52 -04:00
|
|
|
#include "StateTreeCommonConditions.generated.h"
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2023-01-25 02:42:36 -05:00
|
|
|
struct FStateTreeDataView;
|
|
|
|
|
|
2021-11-12 05:48:11 -05:00
|
|
|
USTRUCT()
|
2022-08-23 13:04:52 -04:00
|
|
|
struct STATETREEMODULE_API FStateTreeCompareIntConditionInstanceData
|
2021-11-12 05:48:11 -05:00
|
|
|
{
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Input")
|
2021-11-12 05:48:11 -05:00
|
|
|
int32 Left = 0;
|
|
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Parameter")
|
2021-11-12 05:48:11 -05:00
|
|
|
int32 Right = 0;
|
|
|
|
|
};
|
2022-08-23 13:04:52 -04:00
|
|
|
STATETREE_POD_INSTANCEDATA(FStateTreeCompareIntConditionInstanceData);
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
/**
|
|
|
|
|
* Condition comparing two integers.
|
|
|
|
|
*/
|
|
|
|
|
USTRUCT(DisplayName = "Integer Compare")
|
2022-08-23 13:04:52 -04:00
|
|
|
struct STATETREEMODULE_API FStateTreeCompareIntCondition : public FStateTreeConditionCommonBase
|
2021-09-28 13:33:17 -04:00
|
|
|
{
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
2022-09-29 20:26:53 -04:00
|
|
|
using FInstanceDataType = FStateTreeCompareIntConditionInstanceData;
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2022-08-23 13:04:52 -04:00
|
|
|
FStateTreeCompareIntCondition() = default;
|
|
|
|
|
explicit FStateTreeCompareIntCondition(const EGenericAICheck InOperator, const EStateTreeCompare InInverts = EStateTreeCompare::Default)
|
2021-11-12 05:48:11 -05:00
|
|
|
: bInvert(InInverts == EStateTreeCompare::Invert)
|
2021-09-28 13:33:17 -04:00
|
|
|
, Operator(InOperator)
|
|
|
|
|
{}
|
|
|
|
|
|
2022-09-29 20:26:53 -04:00
|
|
|
virtual const UStruct* GetInstanceDataType() const override { return FInstanceDataType::StaticStruct(); }
|
2021-11-12 05:48:11 -05:00
|
|
|
virtual bool TestCondition(FStateTreeExecutionContext& Context) const override;
|
2024-04-05 04:18:10 -04:00
|
|
|
#if WITH_EDITOR
|
|
|
|
|
virtual FText GetDescription(const FGuid& ID, FStateTreeDataView InstanceDataView, const IStateTreeBindingLookup& BindingLookup, EStateTreeNodeFormatting Formatting = EStateTreeNodeFormatting::Text) const override;
|
|
|
|
|
#endif
|
|
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Parameter")
|
2021-09-28 13:33:17 -04:00
|
|
|
bool bInvert = false;
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2024-03-14 15:33:27 -04:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Parameter", meta = (InvalidEnumValues = "IsTrue"))
|
2021-11-12 05:48:11 -05:00
|
|
|
EGenericAICheck Operator = EGenericAICheck::Equal;
|
2021-09-28 13:33:17 -04:00
|
|
|
};
|
|
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
|
2021-11-12 05:48:11 -05:00
|
|
|
USTRUCT()
|
2022-08-23 13:04:52 -04:00
|
|
|
struct STATETREEMODULE_API FStateTreeCompareFloatConditionInstanceData
|
2021-11-12 05:48:11 -05:00
|
|
|
{
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Input")
|
2022-09-09 07:14:47 -04:00
|
|
|
double Left = 0.0;
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Parameter")
|
2022-09-09 07:14:47 -04:00
|
|
|
double Right = 0.0;
|
2021-11-12 05:48:11 -05:00
|
|
|
};
|
2022-08-23 13:04:52 -04:00
|
|
|
STATETREE_POD_INSTANCEDATA(FStateTreeCompareFloatConditionInstanceData);
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
/**
|
|
|
|
|
* Condition comparing two floats.
|
|
|
|
|
*/
|
2021-09-28 13:33:17 -04:00
|
|
|
USTRUCT(DisplayName = "Float Compare")
|
2022-08-23 13:04:52 -04:00
|
|
|
struct STATETREEMODULE_API FStateTreeCompareFloatCondition : public FStateTreeConditionCommonBase
|
2021-09-28 13:33:17 -04:00
|
|
|
{
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
2022-09-29 20:26:53 -04:00
|
|
|
using FInstanceDataType = FStateTreeCompareFloatConditionInstanceData;
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2022-08-23 13:04:52 -04:00
|
|
|
FStateTreeCompareFloatCondition() = default;
|
|
|
|
|
explicit FStateTreeCompareFloatCondition(const EGenericAICheck InOperator, const EStateTreeCompare InInverts = EStateTreeCompare::Default)
|
2021-11-12 05:48:11 -05:00
|
|
|
: bInvert(InInverts == EStateTreeCompare::Invert)
|
|
|
|
|
, Operator(InOperator)
|
2021-09-28 13:33:17 -04:00
|
|
|
{}
|
|
|
|
|
|
2022-09-29 20:26:53 -04:00
|
|
|
virtual const UStruct* GetInstanceDataType() const override { return FInstanceDataType::StaticStruct(); }
|
2021-11-12 05:48:11 -05:00
|
|
|
virtual bool TestCondition(FStateTreeExecutionContext& Context) const override;
|
2024-04-05 04:18:10 -04:00
|
|
|
#if WITH_EDITOR
|
|
|
|
|
virtual FText GetDescription(const FGuid& ID, FStateTreeDataView InstanceDataView, const IStateTreeBindingLookup& BindingLookup, EStateTreeNodeFormatting Formatting = EStateTreeNodeFormatting::Text) const override;
|
|
|
|
|
#endif
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Parameter")
|
2021-09-28 13:33:17 -04:00
|
|
|
bool bInvert = false;
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2024-03-14 15:33:27 -04:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Parameter", meta = (InvalidEnumValues = "IsTrue"))
|
2021-11-12 05:48:11 -05:00
|
|
|
EGenericAICheck Operator = EGenericAICheck::Equal;
|
2021-09-28 13:33:17 -04:00
|
|
|
};
|
|
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
|
2021-11-12 05:48:11 -05:00
|
|
|
USTRUCT()
|
2022-08-23 13:04:52 -04:00
|
|
|
struct STATETREEMODULE_API FStateTreeCompareBoolConditionInstanceData
|
2021-11-12 05:48:11 -05:00
|
|
|
{
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Input")
|
2021-11-12 05:48:11 -05:00
|
|
|
bool bLeft = false;
|
|
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Parameter")
|
2021-11-12 05:48:11 -05:00
|
|
|
bool bRight = false;
|
|
|
|
|
};
|
2022-08-23 13:04:52 -04:00
|
|
|
STATETREE_POD_INSTANCEDATA(FStateTreeCompareBoolConditionInstanceData);
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
/**
|
|
|
|
|
* Condition comparing two booleans.
|
|
|
|
|
*/
|
2021-09-28 13:33:17 -04:00
|
|
|
USTRUCT(DisplayName = "Bool Compare")
|
2022-08-23 13:04:52 -04:00
|
|
|
struct STATETREEMODULE_API FStateTreeCompareBoolCondition : public FStateTreeConditionCommonBase
|
2021-09-28 13:33:17 -04:00
|
|
|
{
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
2022-09-29 20:26:53 -04:00
|
|
|
using FInstanceDataType = FStateTreeCompareBoolConditionInstanceData;
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2022-08-23 13:04:52 -04:00
|
|
|
FStateTreeCompareBoolCondition() = default;
|
|
|
|
|
explicit FStateTreeCompareBoolCondition(const EStateTreeCompare InInverts)
|
2021-11-12 05:48:11 -05:00
|
|
|
: bInvert(InInverts == EStateTreeCompare::Invert)
|
2021-09-28 13:33:17 -04:00
|
|
|
{}
|
|
|
|
|
|
2022-08-23 13:04:52 -04:00
|
|
|
FStateTreeCompareBoolCondition(const bool bInInverts)
|
2021-11-12 05:48:11 -05:00
|
|
|
: bInvert(bInInverts)
|
|
|
|
|
{}
|
|
|
|
|
|
2022-09-29 20:26:53 -04:00
|
|
|
virtual const UStruct* GetInstanceDataType() const override { return FInstanceDataType::StaticStruct(); }
|
2021-11-12 05:48:11 -05:00
|
|
|
virtual bool TestCondition(FStateTreeExecutionContext& Context) const override;
|
2024-04-05 04:18:10 -04:00
|
|
|
#if WITH_EDITOR
|
|
|
|
|
virtual FText GetDescription(const FGuid& ID, FStateTreeDataView InstanceDataView, const IStateTreeBindingLookup& BindingLookup, EStateTreeNodeFormatting Formatting = EStateTreeNodeFormatting::Text) const override;
|
|
|
|
|
#endif
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Parameter")
|
2021-09-28 13:33:17 -04:00
|
|
|
bool bInvert = false;
|
|
|
|
|
};
|
|
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
|
2021-11-12 05:48:11 -05:00
|
|
|
USTRUCT()
|
2022-08-23 13:04:52 -04:00
|
|
|
struct STATETREEMODULE_API FStateTreeCompareEnumConditionInstanceData
|
2021-11-12 05:48:11 -05:00
|
|
|
{
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Input", meta=(AllowAnyBinding))
|
2021-11-12 05:48:11 -05:00
|
|
|
FStateTreeAnyEnum Left;
|
|
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Parameter")
|
2021-11-12 05:48:11 -05:00
|
|
|
FStateTreeAnyEnum Right;
|
|
|
|
|
};
|
2022-08-23 13:04:52 -04:00
|
|
|
STATETREE_POD_INSTANCEDATA(FStateTreeCompareEnumConditionInstanceData);
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
/**
|
|
|
|
|
* Condition comparing two enums.
|
|
|
|
|
*/
|
2021-09-28 13:33:17 -04:00
|
|
|
USTRUCT(DisplayName = "Enum Compare")
|
2022-08-23 13:04:52 -04:00
|
|
|
struct STATETREEMODULE_API FStateTreeCompareEnumCondition : public FStateTreeConditionCommonBase
|
2021-09-28 13:33:17 -04:00
|
|
|
{
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
2022-09-29 20:26:53 -04:00
|
|
|
using FInstanceDataType = FStateTreeCompareEnumConditionInstanceData;
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2022-08-23 13:04:52 -04:00
|
|
|
FStateTreeCompareEnumCondition() = default;
|
|
|
|
|
explicit FStateTreeCompareEnumCondition(const EStateTreeCompare InInverts)
|
2021-11-12 05:48:11 -05:00
|
|
|
: bInvert(InInverts == EStateTreeCompare::Invert)
|
2021-09-28 13:33:17 -04:00
|
|
|
{}
|
|
|
|
|
|
2022-08-23 13:04:52 -04:00
|
|
|
FStateTreeCompareEnumCondition(const bool bInInverts)
|
2021-11-12 05:48:11 -05:00
|
|
|
: bInvert(bInInverts)
|
|
|
|
|
{}
|
|
|
|
|
|
2022-09-29 20:26:53 -04:00
|
|
|
virtual const UStruct* GetInstanceDataType() const override { return FInstanceDataType::StaticStruct(); }
|
2021-11-12 05:48:11 -05:00
|
|
|
virtual bool TestCondition(FStateTreeExecutionContext& Context) const override;
|
2021-09-28 13:33:17 -04:00
|
|
|
#if WITH_EDITOR
|
2024-04-05 04:18:10 -04:00
|
|
|
virtual FText GetDescription(const FGuid& ID, FStateTreeDataView InstanceDataView, const IStateTreeBindingLookup& BindingLookup, EStateTreeNodeFormatting Formatting = EStateTreeNodeFormatting::Text) const override;
|
2023-02-10 07:22:48 -05:00
|
|
|
virtual void OnBindingChanged(const FGuid& ID, FStateTreeDataView InstanceData, const FStateTreePropertyPath& SourcePath, const FStateTreePropertyPath& TargetPath, const IStateTreeBindingLookup& BindingLookup) override;
|
2021-09-28 13:33:17 -04:00
|
|
|
#endif
|
|
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Parameter")
|
2021-09-28 13:33:17 -04:00
|
|
|
bool bInvert = false;
|
|
|
|
|
};
|
|
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
|
2021-11-12 05:48:11 -05:00
|
|
|
USTRUCT()
|
2022-08-23 13:04:52 -04:00
|
|
|
struct STATETREEMODULE_API FStateTreeCompareDistanceConditionInstanceData
|
2021-11-12 05:48:11 -05:00
|
|
|
{
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Input")
|
2021-11-12 05:48:11 -05:00
|
|
|
FVector Source = FVector(EForceInit::ForceInitToZero);
|
|
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Parameter")
|
2021-11-12 05:48:11 -05:00
|
|
|
FVector Target = FVector(EForceInit::ForceInitToZero);
|
|
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Parameter")
|
2022-09-09 07:14:47 -04:00
|
|
|
double Distance = 0.0;
|
2021-11-12 05:48:11 -05:00
|
|
|
};
|
2022-08-23 13:04:52 -04:00
|
|
|
STATETREE_POD_INSTANCEDATA(FStateTreeCompareDistanceConditionInstanceData);
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
/**
|
|
|
|
|
* Condition comparing distance between two vectors.
|
|
|
|
|
*/
|
2021-09-28 13:33:17 -04:00
|
|
|
USTRUCT(DisplayName = "Distance Compare")
|
2022-08-23 13:04:52 -04:00
|
|
|
struct STATETREEMODULE_API FStateTreeCompareDistanceCondition : public FStateTreeConditionCommonBase
|
2021-09-28 13:33:17 -04:00
|
|
|
{
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
2022-09-29 20:26:53 -04:00
|
|
|
using FInstanceDataType = FStateTreeCompareDistanceConditionInstanceData;
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2022-08-23 13:04:52 -04:00
|
|
|
FStateTreeCompareDistanceCondition() = default;
|
|
|
|
|
explicit FStateTreeCompareDistanceCondition(const EGenericAICheck InOperator, const EStateTreeCompare InInverts = EStateTreeCompare::Default)
|
2021-11-12 05:48:11 -05:00
|
|
|
: bInvert(InInverts == EStateTreeCompare::Invert)
|
|
|
|
|
, Operator(InOperator)
|
2021-09-28 13:33:17 -04:00
|
|
|
{}
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2022-09-29 20:26:53 -04:00
|
|
|
virtual const UStruct* GetInstanceDataType() const override { return FInstanceDataType::StaticStruct(); }
|
2021-11-12 05:48:11 -05:00
|
|
|
virtual bool TestCondition(FStateTreeExecutionContext& Context) const override;
|
2024-04-05 04:18:10 -04:00
|
|
|
#if WITH_EDITOR
|
|
|
|
|
virtual FText GetDescription(const FGuid& ID, FStateTreeDataView InstanceDataView, const IStateTreeBindingLookup& BindingLookup, EStateTreeNodeFormatting Formatting = EStateTreeNodeFormatting::Text) const override;
|
|
|
|
|
#endif
|
2021-09-28 13:33:17 -04:00
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Condition")
|
2021-11-12 05:48:11 -05:00
|
|
|
bool bInvert = false;
|
2021-09-28 13:33:17 -04:00
|
|
|
|
2024-03-14 15:33:27 -04:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Condition", meta = (InvalidEnumValues = "IsTrue"))
|
2021-09-28 13:33:17 -04:00
|
|
|
EGenericAICheck Operator = EGenericAICheck::Equal;
|
2021-11-12 05:48:11 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
USTRUCT()
|
2022-08-23 13:04:52 -04:00
|
|
|
struct STATETREEMODULE_API FStateTreeRandomConditionInstanceData
|
2021-11-12 05:48:11 -05:00
|
|
|
{
|
|
|
|
|
GENERATED_BODY()
|
2023-01-11 05:08:00 -05:00
|
|
|
UPROPERTY(EditAnywhere, Category = "Parameter", meta = (ClampMin = "0.0", ClampMax = "1.0", UIMin = "0.0", UIMax = "1.0"))
|
2021-11-12 05:48:11 -05:00
|
|
|
float Threshold = 0.5f;
|
|
|
|
|
};
|
2022-08-23 13:04:52 -04:00
|
|
|
STATETREE_POD_INSTANCEDATA(FStateTreeRandomConditionInstanceData);
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2023-01-11 05:08:00 -05:00
|
|
|
/**
|
|
|
|
|
* Random condition
|
|
|
|
|
*/
|
2021-11-12 05:48:11 -05:00
|
|
|
USTRUCT(DisplayName = "Random")
|
2022-09-20 10:25:50 -04:00
|
|
|
struct STATETREEMODULE_API FStateTreeRandomCondition : public FStateTreeConditionCommonBase
|
2021-11-12 05:48:11 -05:00
|
|
|
{
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
2022-09-29 20:26:53 -04:00
|
|
|
using FInstanceDataType = FStateTreeRandomConditionInstanceData;
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2022-08-23 13:04:52 -04:00
|
|
|
FStateTreeRandomCondition() = default;
|
2021-11-12 05:48:11 -05:00
|
|
|
|
2022-09-29 20:26:53 -04:00
|
|
|
virtual const UStruct* GetInstanceDataType() const override { return FInstanceDataType::StaticStruct(); }
|
2021-11-12 05:48:11 -05:00
|
|
|
virtual bool TestCondition(FStateTreeExecutionContext& Context) const override;
|
2024-04-05 04:18:10 -04:00
|
|
|
#if WITH_EDITOR
|
|
|
|
|
virtual FText GetDescription(const FGuid& ID, FStateTreeDataView InstanceDataView, const IStateTreeBindingLookup& BindingLookup, EStateTreeNodeFormatting Formatting = EStateTreeNodeFormatting::Text) const override;
|
|
|
|
|
#endif
|
2021-09-28 13:33:17 -04:00
|
|
|
};
|