StaminaComponent.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. /// <summary>
  23. /// How much time after receiving damage until stamina starts decreasing.
  24. /// </summary>
  25. [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
  26. public float Cooldown = 3f;
  27. /// <summary>
  28. /// How much stamina damage this entity has taken.
  29. /// </summary>
  30. [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
  31. public float StaminaDamage;
  32. /// <summary>
  33. /// How much stamina damage is required to entire stam crit.
  34. /// </summary>
  35. [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
  36. public float CritThreshold = 100f;
  37. /// <summary>
  38. /// How long will this mob be stunned for?
  39. /// </summary>
  40. [ViewVariables(VVAccess.ReadWrite), DataField]
  41. public TimeSpan StunTime = TimeSpan.FromSeconds(6);
  42. /// <summary>
  43. /// To avoid continuously updating our data we track the last time we updated so we can extrapolate our current stamina.
  44. /// </summary>
  45. [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoNetworkedField]
  46. [AutoPausedField]
  47. public TimeSpan NextUpdate = TimeSpan.Zero;
  48. [DataField]
  49. public ProtoId<AlertPrototype> StaminaAlert = "Stamina";
  50. }