// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved. #include "CollisionAnalyzerPCH.h" #include "CollisionDebugDrawingPublic.h" ////////////////////////////////////////////////////////////////////////// void FCollisionAnalyzer::CaptureQuery( const FVector& Start, const FVector& End, const FQuat& Rot, ECAQueryType::Type QueryType, ECAQueryShape::Type QueryShape, const FVector& Dims, ECollisionChannel TraceChannel, const struct FCollisionQueryParams& Params, const FCollisionResponseParams& ResponseParams, const FCollisionObjectQueryParams& ObjectParams, const TArray& Results, const TArray& TouchAllResults, double CPUTime) { if(bIsRecording) { int32 NewQueryId = Queries.AddZeroed(); FCAQuery& NewQuery = Queries[NewQueryId]; NewQuery.Start = Start; NewQuery.End = End; NewQuery.Rot = Rot; NewQuery.Type = QueryType; NewQuery.Shape = QueryShape; NewQuery.Dims = Dims; NewQuery.Channel = TraceChannel; NewQuery.Params = Params; NewQuery.ResponseParams = ResponseParams; NewQuery.ObjectParams = ObjectParams; NewQuery.Results = Results; NewQuery.TouchAllResults = TouchAllResults; NewQuery.FrameNum = CurrentFrameNum; NewQuery.CPUTime = CPUTime * 1000.f; NewQuery.ID = NewQueryId; QueryAddedEvent.Broadcast(); } } TSharedPtr FCollisionAnalyzer::SummonUI() { TSharedPtr ReturnWidget; UE_LOG(LogCollisionAnalyzer, Log, TEXT("Opening CollisionAnalyzer...")); if( IsInGameThread() ) { // Make a window ReturnWidget = SNew(SCollisionAnalyzer, this); } else { UE_LOG(LogCollisionAnalyzer, Warning, TEXT("FCollisionAnalyzer::DisplayUI: Not in game thread.")); } return ReturnWidget; } bool FCollisionAnalyzer::IsRecording() { return bIsRecording; } void FCollisionAnalyzer::TickAnalyzer(UWorld* World) { if(bIsRecording) { // Increment frame number CurrentFrameNum++; } // Draw any queries requested for(int32 DrawIdx=0; DrawIdx