Files
UnrealEngine/Engine/Plugins/AI/MassAI/Source/MassAIBehavior/Public/MassStateTreeExecutionContext.h
2025-05-18 13:04:45 +08:00

78 lines
2.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6
#include "MassEntityTypes.h"
#endif // UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6
#include "MassEntityHandle.h"
#include "MassExecutionContext.h"
#include "StateTreeExecutionContext.h"
#include "MassStateTreeExecutionContext.generated.h"
struct FMassExecutionContext;
struct FMassEntityManager;
class UMassSignalSubsystem;
struct FMassCommandBuffer;
USTRUCT()
struct FMassExecutionExtension : public FStateTreeExecutionExtension
{
GENERATED_BODY()
public:
virtual FString GetInstanceDescription(const FContextParameters& Context) const override;
virtual void OnLinkedStateTreeOverridesSet(const FContextParameters& Context, const FStateTreeReferenceOverrides& Overrides) override;
FMassEntityHandle Entity;
uint32 LinkedStateTreeOverridesHash = 0;
};
/**
* Extends FStateTreeExecutionContext to provide additional data to Evaluators and Tasks related to MassSimulation
*/
struct FMassStateTreeExecutionContext : public FStateTreeExecutionContext
{
MASSAIBEHAVIOR_API FMassStateTreeExecutionContext(UObject& InOwner
, const UStateTree& InStateTree
, FStateTreeInstanceData& InInstanceData
, FMassExecutionContext& InContext);
UE_DEPRECATED(5.6, "Use the other constructor that doesn't require MassEntityManager and MassSignalSubSystem")
FMassStateTreeExecutionContext(UObject& InOwner
, const UStateTree& InStateTree
, FStateTreeInstanceData& InInstanceData
, FMassEntityManager& InEntityManager
, UMassSignalSubsystem& InSignalSubsystem
, FMassExecutionContext& InContext)
: FMassStateTreeExecutionContext(InOwner, InStateTree, InInstanceData, InContext)
{
}
/** Start executing. */
MASSAIBEHAVIOR_API EStateTreeRunStatus Start();
MASSAIBEHAVIOR_API EStateTreeRunStatus Start(const FInstancedPropertyBag* InitialParameters, int32 RandomSeed = -1);
FMassEntityManager& GetEntityManager() const
{
return GetMassEntityExecutionContext().GetEntityManagerChecked();
}
FMassExecutionContext& GetMassEntityExecutionContext() const
{
return *MassEntityExecutionContext;
}
FMassEntityHandle GetEntity() const
{
return Entity;
}
MASSAIBEHAVIOR_API void SetEntity(const FMassEntityHandle InEntity);
protected:
MASSAIBEHAVIOR_API virtual void BeginDelayedTransition(const FStateTreeTransitionDelayedState& DelayedState) override;
FMassExecutionContext* MassEntityExecutionContext = nullptr;
FMassEntityHandle Entity;
};