/ GUNRPG.ClientModels / MissionModels.cs
MissionModels.cs
1 namespace GUNRPG.ClientModels; 2 3 /// <summary> 4 /// Combat session state returned from GET /sessions/{id}/state. 5 /// Phase comes from SessionPhase.ToString(): "Created", "Planning", "Resolving", "Completed". 6 /// </summary> 7 public sealed class CombatSession 8 { 9 public Guid Id { get; init; } 10 public Guid OperatorId { get; init; } 11 public string Phase { get; init; } = string.Empty; 12 public long CurrentTimeMs { get; init; } 13 public PlayerState Player { get; init; } = new(); 14 public PlayerState Enemy { get; init; } = new(); 15 public PetState Pet { get; init; } = new(); 16 public int EnemyLevel { get; init; } 17 public int TurnNumber { get; init; } 18 public List<BattleLogEntry> BattleLog { get; init; } = new(); 19 20 /// <summary>True when the server is waiting for player intents (SessionPhase.Planning).</summary> 21 public bool IsAwaitingIntents => Phase == "Planning"; 22 23 /// <summary>True when the combat session has fully resolved (SessionPhase.Completed).</summary> 24 public bool IsConcluded => Phase == "Completed"; 25 26 /// <summary>Victory is determined from state once the session has concluded.</summary> 27 public bool IsVictory => IsConcluded && Player.IsAlive && !Enemy.IsAlive; 28 } 29 30 /// <summary> 31 /// Player or enemy state within a combat session. 32 /// </summary> 33 public sealed class PlayerState 34 { 35 public Guid Id { get; init; } 36 public string Name { get; init; } = string.Empty; 37 public float Health { get; init; } 38 public float MaxHealth { get; init; } 39 public float Stamina { get; init; } 40 public float Fatigue { get; init; } 41 public float SuppressionLevel { get; init; } 42 public bool IsSuppressed { get; init; } 43 public float DistanceToOpponent { get; init; } 44 public int CurrentAmmo { get; init; } 45 public int? MagazineSize { get; init; } 46 public string AimState { get; init; } = string.Empty; 47 public string MovementState { get; init; } = string.Empty; 48 public string CurrentMovement { get; init; } = string.Empty; 49 public string CurrentDirection { get; init; } = string.Empty; 50 public string CurrentCover { get; init; } = string.Empty; 51 public bool IsMoving { get; init; } 52 public bool IsAlive { get; init; } 53 } 54 55 /// <summary> 56 /// Pet state, used both within combat sessions and operator state. 57 /// </summary> 58 public sealed class PetState 59 { 60 public float Health { get; init; } 61 public float Fatigue { get; init; } 62 public float Injury { get; init; } 63 public float Stress { get; init; } 64 public float Morale { get; init; } 65 public float Hunger { get; init; } 66 public float Hydration { get; init; } 67 public DateTimeOffset LastUpdated { get; init; } 68 } 69 70 /// <summary> 71 /// A single battle log entry within a combat session. 72 /// </summary> 73 public sealed class BattleLogEntry 74 { 75 public string EventType { get; init; } = string.Empty; 76 public long TimeMs { get; init; } 77 public string Message { get; init; } = string.Empty; 78 public string? ActorName { get; init; } 79 }