feat(app+core): Phase 6.6+6.7 — wire UpdateMotion/UpdatePosition into GameWindow
Makes NPCs and other server-spawned entities actually move and transition animations based on the live server feed. Before this, Phase 6.6/6.7 only parsed the messages and fired events that nothing consumed, so NPCs stayed frozen at their CreateObject spawn point playing one idle cycle forever. Changes: - GameWindow now keeps a parallel _entitiesByServerGuid dictionary built at CreateObject hydration time so motion / position updates can find the target entity by its server guid. - WorldEntity.Position and Rotation become get/set (like MeshRefs did in Phase 6.4) so the position-update handler can reseat an existing entity in place without reallocating MeshRefs. - OnLiveMotionUpdated re-resolves the cycle via MotionResolver using the server's new (stance, forward-command) override and either swaps the AnimatedEntity's current cycle or removes it from the animated set if the new pose is static. - OnLivePositionUpdated translates the new landblock-local position into acdream world space (same math as CreateObject hydration) and writes it back onto the entity. Subscriptions are added alongside the existing EntitySpawned hook so the three handlers run synchronously on the UDP pump thread, matching the existing pattern. 194 tests green (98 Core + 96 Core.Net). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
333a7c197a
commit
7375f7ad32
2 changed files with 89 additions and 2 deletions
|
|
@ -6,8 +6,13 @@ public sealed class WorldEntity
|
|||
{
|
||||
public required uint Id { get; init; }
|
||||
public required uint SourceGfxObjOrSetupId { get; init; }
|
||||
public required Vector3 Position { get; init; }
|
||||
public required Quaternion Rotation { get; init; }
|
||||
/// <summary>
|
||||
/// World-space position. Settable so Phase 6.7 position-update events
|
||||
/// can reseat an existing entity without rebuilding its meshes.
|
||||
/// </summary>
|
||||
public required Vector3 Position { get; set; }
|
||||
/// <summary>Settable for the same reason as <see cref="Position"/>.</summary>
|
||||
public required Quaternion Rotation { get; set; }
|
||||
/// <summary>
|
||||
/// Per-part mesh references with their root-relative transforms.
|
||||
/// Mutable so the animation tick can replace it each frame for
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue