refactor(update): cut over the frame orchestrator
Reduce GameWindow.OnUpdate to one typed orchestration call and remove transitive window callbacks from teardown, liveness, teleport placement, live presentation, auto-entry, and entity packet routing. Preserve the frozen retail object/network order while making the production owner graph explicit and testable.
This commit is contained in:
parent
947c61d2d7
commit
e91f310279
18 changed files with 864 additions and 348 deletions
|
|
@ -1,3 +1,5 @@
|
|||
using System.Numerics;
|
||||
|
||||
namespace AcDream.App.World;
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -40,6 +42,23 @@ internal sealed class LiveWorldOriginState
|
|||
CenterY = centerY;
|
||||
}
|
||||
|
||||
public (int X, int Y) GetCenter() => (CenterX, CenterY);
|
||||
|
||||
/// <summary>
|
||||
/// Converts the streamed render frame back into retail's landblock-local
|
||||
/// physics frame at the one placement seed boundary.
|
||||
/// </summary>
|
||||
public Vector3 CellLocalForSeed(Vector3 worldPosition, uint cellId)
|
||||
{
|
||||
int landblockX = (int)((cellId >> 24) & 0xFFu);
|
||||
int landblockY = (int)((cellId >> 16) & 0xFFu);
|
||||
var origin = new Vector3(
|
||||
(landblockX - CenterX) * 192f,
|
||||
(landblockY - CenterY) * 192f,
|
||||
0f);
|
||||
return worldPosition - origin;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ends the accepted-origin lifetime while retaining the last coordinates
|
||||
/// as the next placeholder. Consumers must gate them on
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue