StaminaComponent.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using Content.Shared.Alert;
  2. using Robust.Shared.GameStates;
  3. using Robust.Shared.Prototypes;
  4. using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
  5. namespace Content.Shared.Damage.Components;
  6. /// <summary>
  7. /// Add to an entity to paralyze it whenever it reaches critical amounts of Stamina DamageType.
  8. /// </summary>
  9. [RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true), AutoGenerateComponentPause]
  10. public sealed partial class StaminaComponent : Component
  11. {
  12. /// <summary>
  13. /// Have we reached peak stamina damage and been paralyzed?
  14. /// </summary>
  15. [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
  16. public bool Critical;
  17. /// <summary>
  18. /// How much stamina reduces per second.
  19. /// </summary>
  20. [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
  21. public float Decay = 3f;
  22. [DataField, AutoNetworkedField]
  23. public float DecayModifier = 1f; // stalker-changes
  24. /// <summary>
  25. /// How much time after receiving damage until stamina starts decreasing.
  26. /// </summary>
  27. [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
  28. public float Cooldown = 3f;
  29. /// <summary>
  30. /// How much stamina damage this entity has taken.
  31. /// </summary>
  32. [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
  33. public float StaminaDamage;
  34. /// <summary>
  35. /// How much stamina damage is required to entire stam crit.
  36. /// </summary>
  37. [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
  38. public float CritThreshold = 100f;
  39. [DataField, AutoNetworkedField]
  40. public float CritThresholdModifier = 1f; // stalker-changes
  41. /// <summary>
  42. /// How long will this mob be stunned for?
  43. /// </summary>
  44. [ViewVariables(VVAccess.ReadWrite), DataField]
  45. public TimeSpan StunTime = TimeSpan.FromSeconds(6);
  46. /// <summary>
  47. /// To avoid continuously updating our data we track the last time we updated so we can extrapolate our current stamina.
  48. /// </summary>
  49. [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoNetworkedField]
  50. [AutoPausedField]
  51. public TimeSpan NextUpdate = TimeSpan.Zero;
  52. [DataField]
  53. public ProtoId<AlertPrototype> StaminaAlert = "Stamina";
  54. // stalker-changes-start
  55. /// <summary>
  56. /// How much stamina damage is required to entire stam crit.
  57. /// </summary>
  58. [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
  59. public float SlowdownThreshold = 50f; // CritThreshold / 2
  60. // stalker-changes-end
  61. }