// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "StateTreeTaskBase.h" #include "StateTreeDelayTask.generated.h" USTRUCT() struct STATETREEMODULE_API FStateTreeDelayTaskInstanceData { GENERATED_BODY() /** Delay before the task ends. Default (0 or any negative) will run indefinitely so it requires a transition in the state tree to stop it. */ UPROPERTY(EditAnywhere, Category = Parameter) float Duration = 0.f; /** Accumulated time used to stop task if duration is set */ UPROPERTY() float Time = 0.f; }; /** * Simple task to wait indefinitely or for a given time (in seconds) before succeeding. */ USTRUCT(meta = (DisplayName = "Delay Task")) struct STATETREEMODULE_API FStateTreeDelayTask : public FStateTreeTaskCommonBase { GENERATED_BODY() typedef FStateTreeDelayTaskInstanceData InstanceDataType; FStateTreeDelayTask() = default; virtual const UStruct* GetInstanceDataType() const override { return InstanceDataType::StaticStruct(); } virtual bool Link(FStateTreeLinker& Linker) override; virtual EStateTreeRunStatus EnterState(FStateTreeExecutionContext& Context, const EStateTreeStateChangeType ChangeType, const FStateTreeTransitionResult& Transition) const override; virtual EStateTreeRunStatus Tick(FStateTreeExecutionContext& Context, const float DeltaTime) const override;; TStateTreeInstanceDataPropertyHandle DurationHandle; TStateTreeInstanceDataPropertyHandle TimeHandle; };