Conversation
f1acf6f to
c9b6157
Compare
c9b6157 to
6f5adf3
Compare
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
Included review availability: Your plan provides up to 10 included reviews per hour; 7 remain after this review. WalkthroughScripted camera rotation, zoom, and pitch now advance according to elapsed logic time. Their progress uses real-valued frame units, and tracking rotation sets the target angle after progress exceeds its configured duration. ChangesScripted camera movement
Priority: ➖ Normal Estimated code review effort: 2 (Simple) | ~10 minutes Change: Bug fix · Severity of issue fixed: Medium Merge Risk: ⚪ Minimal · up to Scripted camera movement now follows the configured logic-time rate at high render FPS. No outstanding issue identified here prevents merging after normal checks. 🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Advanced
Run ID: 6c9b4a1c-59ee-47ad-a976-729e8ca3b2f4
📒 Files selected for processing (2)
Core/GameEngineDevice/Include/W3DDevice/GameClient/W3DView.hCore/GameEngineDevice/Source/W3DDevice/GameClient/W3DView.cpp
Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review.
Fixes #3142.
Scripted rotation, zoom and pitch advance once per render frame, so they run too fast when rendering outpaces game logic. This is reachable in network games, where the logic rate is set by the network while rendering follows the player's limit.
Now they use the same logic-time step as waypoint camera movement from #1451, keeping fractional progress in W3D-frame units. Rotation also applies its final time multiplier before any tracking hold begins. This covers both games through Core. It fixes the high-FPS speedup; low-FPS timing and duration rounding are unchanged.
To reproduce:
Measurements from the original timing change, with logic pinned at 30 FPS:
The
MD_CHI02intro mixes a waypoint pan with rotation, zoom and pitch. With logic pinned at 30 and the render limit overridden to 125, measured frame progress was:The rotation took 1.23s before and 4.98s after. This used an overridden cap: the sampled campaign intros set their own caps below 30 and do not normally show the high-FPS speedup.
The endpoint follow-up was checked separately with an isolated C++98 harness using the camera update functions and easing implementation. It covers fractional steps, tracking holds, easing, disabled movement, and zoom/pitch endpoints. The in-game timings above were not rerun for that follow-up.
Related: #2909, an earlier closed approach using whole-frame accumulators.
Note
Use elapsed logic time for scripted camera rotation, pitch, and zoom
W3DViewto advance by elapsed logic-time milliseconds instead of one integer frame per call.TRotateCameraInfo,TPitchCameraInfo, andTZoomCameraInfo(W3DView.h) are now real-valued, so movement can progress by fractional frames.W3DView::updateCameraMovementsreads the ignored-frozen-time logic timestep once and passes it to all scripted movement helpers, including waypoint-path movement.rotateCameraOneFrame,zoomCameraOneFrame, andpitchCameraOneFramein W3DView.cpp if any scripted camera moves look faster or slower.Macroscope summarized dd63380.