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 }