ThirstComponent.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using Content.Shared.Alert;
  2. using Content.Shared.Nutrition.EntitySystems;
  3. using Robust.Shared.GameStates;
  4. using Robust.Shared.Prototypes;
  5. using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
  6. namespace Content.Shared.Nutrition.Components;
  7. [RegisterComponent, NetworkedComponent, Access(typeof(ThirstSystem))]
  8. [AutoGenerateComponentState(fieldDeltas: true), AutoGenerateComponentPause]
  9. public sealed partial class ThirstComponent : Component
  10. {
  11. // Base stuff
  12. [ViewVariables(VVAccess.ReadWrite)]
  13. [DataField("baseDecayRate")]
  14. [AutoNetworkedField]
  15. public float BaseDecayRate = 0.1f;
  16. [ViewVariables(VVAccess.ReadWrite)]
  17. [AutoNetworkedField]
  18. public float ActualDecayRate;
  19. [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)]
  20. public ThirstThreshold CurrentThirstThreshold;
  21. [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)]
  22. public ThirstThreshold LastThirstThreshold;
  23. [ViewVariables(VVAccess.ReadWrite)]
  24. [DataField("startingThirst")]
  25. [AutoNetworkedField]
  26. public float CurrentThirst = -1f;
  27. /// <summary>
  28. /// The time when the hunger will update next.
  29. /// </summary>
  30. [DataField("nextUpdateTime", customTypeSerializer: typeof(TimeOffsetSerializer)), ViewVariables(VVAccess.ReadWrite)]
  31. [AutoNetworkedField]
  32. [AutoPausedField]
  33. public TimeSpan NextUpdateTime;
  34. /// <summary>
  35. /// The time between each update.
  36. /// </summary>
  37. [ViewVariables(VVAccess.ReadWrite)]
  38. [DataField, AutoNetworkedField]
  39. public TimeSpan UpdateRate = TimeSpan.FromSeconds(1);
  40. [DataField("thresholds")]
  41. [AutoNetworkedField]
  42. public Dictionary<ThirstThreshold, float> ThirstThresholds = new()
  43. {
  44. {ThirstThreshold.OverHydrated, 600.0f},
  45. {ThirstThreshold.Okay, 450.0f},
  46. {ThirstThreshold.Thirsty, 300.0f},
  47. {ThirstThreshold.Parched, 150.0f},
  48. {ThirstThreshold.Dead, 0.0f},
  49. };
  50. [DataField]
  51. public ProtoId<AlertCategoryPrototype> ThirstyCategory = "Thirst";
  52. public static readonly Dictionary<ThirstThreshold, ProtoId<AlertPrototype>> ThirstThresholdAlertTypes = new()
  53. {
  54. {ThirstThreshold.Thirsty, "Thirsty"},
  55. {ThirstThreshold.Parched, "Parched"},
  56. {ThirstThreshold.Dead, "Parched"},
  57. };
  58. }
  59. [Flags]
  60. public enum ThirstThreshold : byte
  61. {
  62. // Hydrohomies
  63. Dead = 0,
  64. Parched = 1 << 0,
  65. Thirsty = 1 << 1,
  66. Okay = 1 << 2,
  67. OverHydrated = 1 << 3,
  68. }