Dynamic navigation toggle (per scenario):
- New PS_Editor_NavUtils helpers wrap UNavigationSystemV1 / RecastNavMesh
protected APIs (RuntimeGeneration field + bEnableDrawing) via the C++
using-trick so we can switch the level's nav mode and toggle visualization
without engine modifications.
- FPS_Editor_SceneData gets bUseDynamicNavigation persisted in JSON.
- SpawnManager carries the live state plus a session-only bShowNavMesh
preference (never saved).
- SceneSerializer reads/writes the flag and applies it on load (editor mode).
- SceneLoader applies it on the gameplay path before spawning actors so
scenarios that need runtime nav rebuild get it both in editor and at
runtime via the project's GameMode + SceneLoader::LoadScene flow.
UI:
- New "Settings" toolbar button in both Legacy and UMG widgets opens a popup
with two checkboxes:
* Use Dynamic Navigation - saved per scenario, live toggle
* Show NavMesh (P) - session only, mimics editor's P key (green nav
visualization)
- Pawn binds P to IA_ToggleNavMesh -> SpawnManager.bShowNavMesh, in sync
with the popup checkbox.
Timeline restore correctness:
- AddOrUpdateKeyAtCurrentTime, RemoveKey, SetKeyTime, SetKeyInterpolate now
invalidate LastAppliedValues[TrackIndex] so a key edit isn't masked by a
stale per-track cache entry from a previous apply.
- RestoreBaseline now prefers a key at t=0 (within epsilon) over the
captured pre-animation baseline. Updating a t=0 key + Stop now restores
the new value instead of snapping back to the original. Tracks without a
t=0 key still fall back to the pre-animation baseline.
Restart simulation rewind:
- Restart() used to call Stop() + Play() but Play immediately cancelled the
pending RequestStopSimulation timer set by Stop, so transforms were never
restored - characters stayed where they were.
- RequestStopSimulation now takes bImmediate; when true, OnEditorBeforeSimulateStop
still fires (so BP behaviour-reset hooks run) but StopSimulation runs
synchronously, restoring transforms before Play() recaptures them.
- Restart inlines the reset (RestoreBaseline + immediate stop + Play) so
rewinding actually rewinds.
Build:
- Re-add NavigationSystem to PS_Editor.Build.cs (needed for ARecastNavMesh
+ ANavigationData access in NavUtils).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>