// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #if WITH_STATETREE_TRACE_DEBUGGER #include "IStateTreeTraceProvider.h" #include "Model/PointTimeline.h" #include "StateTreeIndexTypes.h" namespace TraceServices { class IAnalysisSession; } class UStateTree; struct FStateTreeInstanceDebugId; namespace UE::StateTreeDebugger { struct FInstanceDescriptor; } class FStateTreeTraceProvider : public IStateTreeTraceProvider { public: STATETREEMODULE_API static FName ProviderName; explicit FStateTreeTraceProvider(TraceServices::IAnalysisSession& InSession); void AppendEvent(FStateTreeInstanceDebugId InInstanceId, double InTime, const FStateTreeTraceEventVariantType& InEvent); void AppendInstanceEvent( const FStateTreeIndex16 AssetDebugId, const FStateTreeInstanceDebugId InInstanceId, const TCHAR* InInstanceName, double InTime, double InWorldRecordingTime, EStateTreeTraceEventType InEventType); void AppendAssetDebugId(const UStateTree* InStateTree, const FStateTreeIndex16 AssetDebugId); bool GetAssetFromDebugId(const FStateTreeIndex16 AssetDebugId, TWeakObjectPtr& WeakStateTree) const; bool GetAssetFromInstanceId(const FStateTreeInstanceDebugId InstanceId, TWeakObjectPtr& WeakStateTree) const; protected: //~ IStateTreeDebuggerProvider interface virtual TSharedPtr GetInstanceDescriptor(const FStateTreeInstanceDebugId InstanceId) const override; virtual void GetInstances(TArray>& OutInstances) const override; virtual bool ReadTimelines(const FStateTreeInstanceDebugId InstanceId, TFunctionRef Callback) const override; virtual bool ReadTimelines(const UStateTree& StateTree, TFunctionRef Callback) const override; private: TraceServices::IAnalysisSession& Session; TMap InstanceIdToDebuggerEntryTimelines; TArray> Descriptors; TArray>> EventsTimelines; struct FStateTreeDebugIdPair { FStateTreeDebugIdPair(const TWeakObjectPtr& WeakStateTree, const FStateTreeIndex16 Id) : WeakStateTree(WeakStateTree) , Id(Id) { } TWeakObjectPtr WeakStateTree; FStateTreeIndex16 Id; }; TArray StateTreeAssets; }; #endif // WITH_STATETREE_TRACE_DEBUGGER