void UGameplayDebuggingControllerComponent::UpdateNavMeshTimer() { const APawn* PlayerPawn = PlayerOwner.IsValid() ? PlayerOwner->GetPawn() : NULL; UGameplayDebuggingComponent* DebuggingComponent = GetDebuggingReplicator() ? GetDebuggingReplicator()->GetDebugComponent() : NULL; if (DebuggingComponent) { const AActor* SelectedActor = DebuggingComponent->GetSelectedActor(); const APawn* SelectedActorAsPawn = Cast<APawn>(SelectedActor); const FVector AdditionalTargetLoc = SelectedActorAsPawn ? SelectedActorAsPawn->GetNavAgentLocation() : SelectedActor ? SelectedActor->GetActorLocation() : PlayerPawn ? PlayerPawn->GetNavAgentLocation() : FVector::ZeroVector; if (AdditionalTargetLoc != FVector::ZeroVector) { DebuggingComponent->ServerCollectNavmeshData(AdditionalTargetLoc); } } }
void UGameplayDebuggingControllerComponent::UpdateNavMeshTimer() { #if !(UE_BUILD_SHIPPING || UE_BUILD_TEST) const APawn* PlayerPawn = PlayerOwner.IsValid() ? PlayerOwner->GetPawnOrSpectator() : nullptr; UGameplayDebuggingComponent* DebuggingComponent = GetDebuggingReplicator() ? GetDebuggingReplicator()->GetDebugComponent() : nullptr; if (DebuggingComponent) { const AActor* SelectedActor = DebuggingComponent->GetSelectedActor(); const APawn* SelectedActorAsPawn = Cast<APawn>(SelectedActor); const FVector AdditionalTargetLoc = SelectedActorAsPawn ? SelectedActorAsPawn->GetNavAgentLocation() : SelectedActor ? SelectedActor->GetActorLocation() : PlayerPawn ? PlayerPawn->GetNavAgentLocation() : FVector::ZeroVector; if (AdditionalTargetLoc != FVector::ZeroVector) { DebuggingComponent->ServerCollectNavmeshData(AdditionalTargetLoc); } } #endif //!(UE_BUILD_SHIPPING || UE_BUILD_TEST) }
void AGameplayDebuggingReplicator::OnDebugAIDelegate(class UCanvas* Canvas, class APlayerController* PC) { #if WITH_EDITOR && !(UE_BUILD_SHIPPING || UE_BUILD_TEST) if (!GIsEditor) { return; } if (!LocalPlayerOwner || IsGlobalInWorld()) { return; } UEditorEngine* EEngine = Cast<UEditorEngine>(GEngine); if (GFrameNumber == LastDrawAtFrame || !EEngine || !EEngine->bIsSimulatingInEditor) { return; } if (!Canvas || !Canvas->SceneView || Canvas->SceneView->bIsGameView == false) { return; } LastDrawAtFrame = GFrameNumber; FEngineShowFlags EngineShowFlags = Canvas && Canvas->SceneView && Canvas->SceneView->Family ? Canvas->SceneView->Family->EngineShowFlags : FEngineShowFlags(GIsEditor ? EShowFlagInitMode::ESFIM_Editor : EShowFlagInitMode::ESFIM_Game); if (!EngineShowFlags.DebugAI) { return; } EnableDraw(true); UWorld* World = GetWorld(); UGameplayDebuggingComponent* DebuggingComponent = GetDebugComponent(); if (World && DebuggingComponent && DebuggingComponent->GetOwnerRole() == ROLE_Authority) { UGameplayDebuggingControllerComponent* GDC = FindComponentByClass<UGameplayDebuggingControllerComponent>(); TArray<int32> OryginalReplicateViewDataCounters; OryginalReplicateViewDataCounters = DebuggingComponent->ReplicateViewDataCounters; for (uint32 Index = 0; Index < EAIDebugDrawDataView::MAX; ++Index) { DebuggingComponent->ReplicateViewDataCounters[Index] = GameplayDebuggerSettings(this).CheckFlag((EAIDebugDrawDataView::Type)Index) ? 1 : 0; } // looks like Simulate in UE4 Editor - let's find selected Pawn to debug AActor* FullSelectedTarget = NULL; for (FConstPawnIterator Iterator = World->GetPawnIterator(); Iterator; ++Iterator) { AActor* NewTarget = Cast<AActor>(*Iterator); if (NewTarget->IsSelected() && !FullSelectedTarget) { FullSelectedTarget = NewTarget; continue; } //We needs to collect data manually in Simulate DebuggingComponent->SetActorToDebug(NewTarget); DebuggingComponent->CollectDataToReplicate(NewTarget->IsSelected()); DrawDebugData(Canvas, PC); } const AActor* OldActor = LastSelectedActorToDebug; ServerSetActorToDebug(FullSelectedTarget); if (FullSelectedTarget) { DebuggingComponent->CollectDataToReplicate(true); DebuggingComponent->SetEQSIndex(ActiveEQSIndex); DrawDebugData(Canvas, PC); } if (GetSelectedActorToDebug() != OldActor) { DebuggingComponent->MarkRenderStateDirty(); } DebuggingComponent->ReplicateViewDataCounters = OryginalReplicateViewDataCounters; } #endif }