// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Engine/HitResult.h" #include "Widgets/DeclarativeSyntaxSupport.h" #include "Widgets/SCompoundWidget.h" #include "Widgets/Views/STableViewBase.h" #include "Widgets/Views/STableRow.h" #include "CollisionAnalyzer.h" class SCollisionAnalyzer; /** Info about a hit */ class FCAHitInfo { public: FHitResult Result; bool bMiss; /** Static function for creating a new item, but ensures that you can only have a TSharedRef to one */ static TSharedRef Make(FHitResult& Result, bool bMiss) { TSharedRef NewItem = MakeShareable(new FCAHitInfo(Result, bMiss)); return NewItem; } private: FCAHitInfo(FHitResult& InResult, bool bInMiss) : Result(InResult) , bMiss(bInMiss) {} }; /** Widget to display details about a single query */ class SCAQueryDetails : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SCAQueryDetails) {} SLATE_END_ARGS() public: void Construct(const FArguments& InArgs, TSharedPtr OwningAnalyzerWidget); /** Set the current query to display */ void SetCurrentQuery(const FCAQuery& NewQuery); /** Show no query */ void ClearCurrentQuery(); /** Get current query */ FCAQuery* GetCurrentQuery(); // Get delegates FText GetStartText() const; FText GetEndText() const; ECheckBoxState GetShowMissesState() const; // List delegates TSharedRef ResultListGenerateRow(TSharedPtr Info, const TSharedRef& OwnerTable); void ResultListSelectionChanged(TSharedPtr SelectedInfos, ESelectInfo::Type SelectInfo); // Handler delegates void OnToggleShowMisses(ECheckBoxState InCheckboxState); private: /** Update ResultList from CurrentQuery */ void UpdateResultList(); /** Update the box we are drawing */ void UpdateDisplayedBox(); // MEMBERS /** Owning SCollisionAnalyzer */ TWeakPtr OwningAnalyzerWidgetPtr; /** Are we currently displaying a query */ bool bDisplayQuery; /** Current query we are displaying */ FCAQuery CurrentQuery; /** Array used by list widget, just a copy of that in CurrentQuery */ TArray< TSharedPtr > ResultList; /** */ bool bShowMisses; // WIDGETS TSharedPtr< SListView< TSharedPtr > > ResultListWidget; };