using System.Text.Json.Serialization; using NeonSprawl.Server.Game.PositionState; namespace NeonSprawl.Server.Game.Interaction; /// JSON body for GET /game/world/interactables (NEO-25). public sealed class InteractablesListResponse { public const int CurrentSchemaVersion = 1; [JsonPropertyName("schemaVersion")] public int SchemaVersion { get; init; } = CurrentSchemaVersion; /// Stable ascending interactableId order (ordinal). [JsonPropertyName("interactables")] public required IReadOnlyList Interactables { get; init; } } /// One row in the prototype interactable projection. public sealed class InteractableDescriptorJson { [JsonPropertyName("interactableId")] public required string InteractableId { get; init; } /// Stable machine string for branching (e.g. terminal, resource_node). [JsonPropertyName("kind")] public required string Kind { get; init; } [JsonPropertyName("anchor")] public required PositionVector Anchor { get; init; } /// Horizontal reach on X/Z; inclusive boundary (same as NEO-9). [JsonPropertyName("interactionRadius")] public double InteractionRadius { get; init; } }