/ GUNRPG.Core / VirtualPet / OperatorStatusView.cs
OperatorStatusView.cs
 1  namespace GUNRPG.Core.VirtualPet;
 2  
 3  /// <summary>
 4  /// Read-only presentation-layer projection of operator condition.
 5  /// This model exposes operator state in a form suitable for UI, debugging, and server-client transfer.
 6  /// It is derived from PetState and contains no behavior.
 7  /// </summary>
 8  /// <param name="Health">Physical health level. Expected range: 0-100.</param>
 9  /// <param name="Injury">Injury severity. Expected range: 0-100.</param>
10  /// <param name="Fatigue">Fatigue level. Expected range: 0-100.</param>
11  /// <param name="Stress">Mental stress level. Expected range: 0-100.</param>
12  /// <param name="Morale">Morale level. Expected range: 0-100.</param>
13  /// <param name="Hunger">Hunger level. Expected range: 0-100.</param>
14  /// <param name="Hydration">Hydration level. Expected range: 0-100.</param>
15  /// <param name="CombatReadiness">Optional derived metric for combat effectiveness. Null if not computed.</param>
16  public sealed record OperatorStatusView(
17      float Health,
18      float Injury,
19      float Fatigue,
20      float Stress,
21      float Morale,
22      float Hunger,
23      float Hydration,
24      float? CombatReadiness
25  )
26  {
27      /// <summary>
28      /// Creates an OperatorStatusView from a PetState.
29      /// This is a pure, deterministic function that performs a simple projection.
30      /// </summary>
31      /// <param name="state">The source PetState to project.</param>
32      /// <returns>A new OperatorStatusView containing the operator's condition.</returns>
33      public static OperatorStatusView From(PetState state)
34      {
35          return new OperatorStatusView(
36              Health: state.Health,
37              Injury: state.Injury,
38              Fatigue: state.Fatigue,
39              Stress: state.Stress,
40              Morale: state.Morale,
41              Hunger: state.Hunger,
42              Hydration: state.Hydration,
43              CombatReadiness: null  // No helper available; easily removable
44          );
45      }
46  }