fix(motion): apply VectorUpdate.Omega to remote body (L.3.1 Task 6)

VectorUpdate.Omega was parsed by WorldSession but never written to
the remote body's Omega field, leaving remote jumping/turning arcs
flat. Apply it alongside the existing Velocity assignment.

Mirrors retail SmartBox::DoVectorUpdate (acclient @ 0x004521C0)
which calls both CPhysicsObj::set_velocity AND CPhysicsObj::set_omega.

Same 4 pre-existing test failures, no regression.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-05-02 19:34:19 +02:00
parent ae79e34a6d
commit e08accf7c2

View file

@ -3081,6 +3081,12 @@ public sealed class GameWindow : IDisposable
// remote update will integrate Position += Velocity × dt + 0.5 × Accel × dt². // remote update will integrate Position += Velocity × dt + 0.5 × Accel × dt².
rm.Body.Velocity = update.Velocity; rm.Body.Velocity = update.Velocity;
// L.3.1 Task 6: apply Omega too. Was parsed but ignored, leaving
// remote jumping/turning arcs flat. Mirrors retail SmartBox::
// DoVectorUpdate (acclient @ 0x004521C0) which calls both
// CPhysicsObj::set_velocity AND CPhysicsObj::set_omega.
rm.Body.Omega = update.Omega;
// Mark airborne when the launch has meaningful +Z. Threshold // Mark airborne when the launch has meaningful +Z. Threshold
// 0.5 m/s rejects noise / horizontal-only updates (server might // 0.5 m/s rejects noise / horizontal-only updates (server might
// also use VectorUpdate for non-jump events). The per-tick // also use VectorUpdate for non-jump events). The per-tick