namespace NeonSprawl.Server.Game.PositionState; /// /// HTTP JSON body for GET /game/players/{{id}}/position and successful POST /game/players/{{id}}/move. /// Consumers should read before interpreting other fields. /// /// /// Example v1 payload (initial seed; increases after each successful move, NS-16): /// /// {"schemaVersion":1,"playerId":"dev-local-1","position":{"x":-5,"y":0.9,"z":-5},"sequence":0} /// /// public sealed class PositionStateResponse { /// Schema version the server currently emits for this contract; increment when the shape or semantics change. public const int CurrentSchemaVersion = 1; /// Contract version; should match when produced by this API. public int SchemaVersion { get; init; } = CurrentSchemaVersion; /// Player id (echo of the route for sanity). public required string PlayerId { get; init; } /// Authoritative world position. public required PositionVector Position { get; init; } /// Increments by one on each successful move apply (NS-16); 0 for the seeded dev player until the first move. public ulong Sequence { get; init; } }