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; }
}