using System.Numerics; namespace Nexus.Core; public class GameState { public long TickNumber { get; set; } public float DeltaTime { get; set; } public long TimestampMs { get; set; } public PlayerState Player { get; set; } = new(); public IReadOnlyList Entities { get; set; } = []; public IReadOnlyList HostileMonsters { get; set; } = []; public IReadOnlyList NearbyLoot { get; set; } = []; public WalkabilitySnapshot? Terrain { get; set; } public uint AreaHash { get; set; } public int AreaLevel { get; set; } public string? CurrentAreaName { get; set; } public bool IsLoading { get; set; } public bool IsEscapeOpen { get; set; } public DangerLevel Danger { get; set; } public Matrix4x4? CameraMatrix { get; set; } public IReadOnlyList ActiveQuests { get; set; } = []; /// Active quests as shown in the game UI (title + objectives). public IReadOnlyList UiQuests { get; set; } = []; /// In-progress quests from the quest linked list with target areas and paths. public IReadOnlyList Quests { get; set; } = []; public IReadOnlyList EnemyProjectiles { get; set; } = []; // Derived (computed once per tick by GameStateEnricher / ThreatSystem) public ThreatMap Threats { get; set; } = new(); public ThreatAssessment ThreatAssessment { get; set; } = new(); public IReadOnlyList NearestEnemies { get; set; } = []; public IReadOnlyList GroundEffects { get; set; } = []; }