void AGameplayDebuggerReplicator::OnDebugAIDelegate(class UCanvas* Canvas, class APlayerController* PC) { #if WITH_EDITOR && ENABLED_GAMEPLAY_DEBUGGER if (!GIsEditor) { return; } if (!LocalPlayerOwner) { return; } UEditorEngine* EEngine = Cast<UEditorEngine>(GEngine); if (!EEngine || !EEngine->bIsSimulatingInEditor) { return; } if (!Canvas || !Canvas->SceneView || Canvas->SceneView->bIsGameView == false) { return; } 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(); if (World && Role == ROLE_Authority) { if (IsActorTickEnabled() == false) { SetActorTickEnabled(true); } // looks like Simulate in UE4 Editor - let's find selected Pawn to debug AActor* SelectedActor = nullptr; for (FSelectionIterator It = EEngine->GetSelectedActorIterator(); It; ++It) { SelectedActor = Cast<APawn>(*It); //we only work with pawns for now if (SelectedActor) { break; } } if (LastSelectedActorToDebug != SelectedActor) { MarkComponentsRenderStateDirty(); } ServerSetActorToDebug(SelectedActor); DrawDebugData(Canvas, PC, true); } #endif }
void AGameplayDebuggerReplicator::ClientActivateGameplayDebugger_Implementation(bool bActivate) { #if ENABLED_GAMEPLAY_DEBUGGER SetActorTickEnabled(bActivate); MarkComponentsRenderStateDirty(); #endif }
void ANavigationData::SetNavRenderingEnabled(bool bEnable) { if (bEnableDrawing != bEnable) { bEnableDrawing = bEnable; MarkComponentsRenderStateDirty(); } }
void AGameplayDebuggerReplicator::ToggleCategory(int32 CategoryIndex) { #if ENABLED_GAMEPLAY_DEBUGGER const int32 FinalIndex = CurrentMenuLine * 10 + CategoryIndex; if (Categories.IsValidIndex(FinalIndex)) { ServerToggleCategory(Categories[FinalIndex].CategoryName); } MarkComponentsRenderStateDirty(); #endif }
void AGameplayDebuggingReplicator::ServerReplicateMessage_Implementation(class AActor* Actor, uint32 InMessage, uint32 DataView) { #if !(UE_BUILD_SHIPPING || UE_BUILD_TEST) if ((EDebugComponentMessage::Type)InMessage == EDebugComponentMessage::DeactivateReplilcation) { ServerSetActorToDebug(NULL); MarkComponentsRenderStateDirty(); } if (GetDebugComponent()) { GetDebugComponent()->ServerReplicateData((EDebugComponentMessage::Type)InMessage, (EAIDebugDrawDataView::Type)DataView); } #endif //!(UE_BUILD_SHIPPING || UE_BUILD_TEST) }
void ANavigationObjectBase::PostEditMove( bool bFinished ) { if( bFinished ) { if ( GetWorld()->IsNavigationRebuilt() ) { UE_LOG(LogNavigationPoint, Log, TEXT("PostEditMove Clear paths rebuilt")); } // Validate collision Validate(); } MarkComponentsRenderStateDirty(); Super::PostEditMove( bFinished ); }
void ANavigationObjectBase::Validate() { if ( ShouldBeBased() && (GoodSprite || BadSprite) ) { FVector OrigLocation = GetActorLocation(); const float Radius = CapsuleComponent->GetScaledCapsuleRadius(); FVector const Slice(Radius, Radius, 1.f); bool bResult = true; // Check for adjustment FHitResult Hit(ForceInit); const FVector TraceStart = GetActorLocation(); const FVector TraceEnd = GetActorLocation() - FVector(0.f,0.f, 4.f * CapsuleComponent->GetScaledCapsuleHalfHeight()); GetWorld()->SweepSingleByChannel(Hit, TraceStart, TraceEnd, FQuat::Identity, ECC_Pawn, FCollisionShape::MakeBox(Slice), FCollisionQueryParams(NAME_None, false, this)); if( Hit.bBlockingHit ) { const FVector HitLocation = TraceStart + (TraceEnd - TraceStart) * Hit.Time; FVector Dest = HitLocation + FVector(0.f,0.f,CapsuleComponent->GetScaledCapsuleHalfHeight()-2.f); // Move actor (TEST ONLY) to see if navigation point moves TeleportTo( Dest, GetActorRotation(), false, true ); // If only adjustment was down towards the floor, then it is a valid placement FVector NewLocation = GetActorLocation(); bResult = ( NewLocation.X == OrigLocation.X && NewLocation.Y == OrigLocation.Y && NewLocation.Z <= OrigLocation.Z ); // Move actor back to original position TeleportTo( OrigLocation, GetActorRotation(), false, true ); } // Update sprites by result if( GoodSprite ) { GoodSprite->SetVisibility(bResult); } if( BadSprite ) { BadSprite->SetVisibility(!bResult); } } // Force update of icon MarkComponentsRenderStateDirty(); }
void AActor::SetIsTemporarilyHiddenInEditor( bool bIsHidden ) { bHiddenEdTemporary = bIsHidden; MarkComponentsRenderStateDirty(); }
void AGameplayDebuggerReplicator::TickActor(float DeltaTime, enum ELevelTick TickType, FActorTickFunction& ThisTickFunction) { Super::TickActor(DeltaTime, TickType, ThisTickFunction); #if ENABLED_GAMEPLAY_DEBUGGER UWorld* World = GetWorld(); const ENetMode NetMode = GetNetMode(); if (!World) { // return without world return; } UGameInstance* GameInstance = World->GetGameInstance(); if (!GameInstance || !World->IsGameWorld()) { return; } if (NetMode != NM_DedicatedServer) { if (bActivationKeyPressed) { ActivationKeyTime += DeltaTime; if (ActivationKeyTime >= GameplayDebuggerHelpers::ActivationKeyTimePch) { GEngine->bEnableOnScreenDebugMessages = false; if (AHUD* const GameHUD = LocalPlayerOwner ? LocalPlayerOwner->GetHUD() : nullptr) { GameHUD->bShowHUD = false; } BindKeyboardInput(InputComponent); ServerActivateGameplayDebugger(true); ClientActivateGameplayDebugger(true); bActivationKeyPressed = false; } } if (bEnabledTargetSelection) { if (GetLocalPlayerOwner()) { SelectTargetToDebug(); } } bool bMarkComponentsAsRenderStateDirty = false; for (UGameplayDebuggerBaseObject* Obj : ReplicatedObjects) { if (Obj && Obj->IsRenderStateDirty()) { if (!bMarkComponentsAsRenderStateDirty) { MarkComponentsRenderStateDirty(); } bMarkComponentsAsRenderStateDirty = true; Obj->CleanRenderStateDirtyFlag(); } } } if (NetMode < NM_Client && LocalPlayerOwner) { TMap<FString, TArray<UGameplayDebuggerBaseObject*> > CategoryToClasses; for (UGameplayDebuggerBaseObject* Obj : ReplicatedObjects) { if (Obj) { FString Category = Obj->GetCategoryName(); if (IsCategoryEnabled(Category)) { CategoryToClasses.FindOrAdd(Category).Add(Obj); } } } for (auto It(CategoryToClasses.CreateIterator()); It; ++It) { TArray<UGameplayDebuggerBaseObject*>& CurrentObjects = It.Value(); for (UGameplayDebuggerBaseObject* Obj : CurrentObjects) { Obj->CollectDataToReplicateOnServer(LocalPlayerOwner, LastSelectedActorToDebug); } } } #endif }
void AGameplayDebuggerReplicator::OnRep_ReplicatedCategories() { #if ENABLED_GAMEPLAY_DEBUGGER MarkComponentsRenderStateDirty(); #endif }