void FGameplayDebuggerCategory_AI::DrawData(APlayerController* OwnerPC, FGameplayDebuggerCanvasContext& CanvasContext) { const bool bReducedMode = IsSimulateInEditor(); bShowCategoryName = !bReducedMode; UWorld* MyWorld = OwnerPC->GetWorld(); AActor* SelectedActor = FindLocalDebugActor(); DrawPawnIcons(MyWorld, SelectedActor, OwnerPC ? OwnerPC->GetPawn() : nullptr, CanvasContext); if (bReducedMode) { if (DataPack.bHasController) { DrawPath(MyWorld); } } else { if (SelectedActor) { DrawOverheadInfo(*SelectedActor, CanvasContext); } DrawPath(MyWorld); } const bool bShowClassNames = !bReducedMode || DataPack.bHasController; if (bShowClassNames) { CanvasContext.Printf(TEXT("Controller Name: {yellow}%s"), *DataPack.ControllerName); CanvasContext.Printf(TEXT("Pawn Name: {yellow}%s"), *DataPack.PawnName); } if (DataPack.bIsUsingCharacter) { CanvasContext.Printf(TEXT("Movement Mode: {yellow}%s{white}, Base: {yellow}%s"), *DataPack.MovementModeInfo, *DataPack.MovementBaseInfo); CanvasContext.Printf(TEXT("NavData: {yellow}%s{white}, Path following: {yellow}%s"), *DataPack.NavDataInfo, *DataPack.PathFollowingInfo); } if (DataPack.bIsUsingBehaviorTree) { CanvasContext.Printf(TEXT("Behavior: {yellow}%s{white}, Tree: {yellow}%s"), *DataPack.CurrentAIState, *DataPack.CurrentAIAssets); CanvasContext.Printf(TEXT("Active task: {yellow}%s"), *DataPack.CurrentAITask); } if (DataPack.bIsUsingGameplayTasks) { if (DataPack.NumTickingTasks > 0) { CanvasContext.Printf(TEXT("Ticking tasks: {yellow}%d%s"), DataPack.NumTickingTasks, *DataPack.TickingTaskInfo); } CanvasContext.Printf(TEXT("Gameplay tasks: {yellow}%d%s"), DataPack.NumTasksInQueue, *DataPack.TaskQueueInfo); } if (DataPack.bIsUsingCharacter) { CanvasContext.Printf(TEXT("Montage: {yellow}%s"), *DataPack.MontageInfo); } }