| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- using Content.Server.Body.Systems;
- using Content.Shared.Chat.Prototypes;
- using Content.Shared.Damage;
- using Robust.Shared.Prototypes;
- using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
- namespace Content.Server.Body.Components
- {
- [RegisterComponent, Access(typeof(RespiratorSystem))]
- public sealed partial class RespiratorComponent : Component
- {
- /// <summary>
- /// The next time that this body will inhale or exhale.
- /// </summary>
- [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
- public TimeSpan NextUpdate;
- /// <summary>
- /// The interval between updates. Each update is either inhale or exhale,
- /// so a full cycle takes twice as long.
- /// </summary>
- [DataField]
- public TimeSpan UpdateInterval = TimeSpan.FromSeconds(2);
- /// <summary>
- /// Saturation level. Reduced by UpdateInterval each tick.
- /// Can be thought of as 'how many seconds you have until you start suffocating' in this configuration.
- /// </summary>
- [DataField]
- public float Saturation = 5.0f;
- /// <summary>
- /// At what level of saturation will you begin to suffocate?
- /// </summary>
- [DataField]
- public float SuffocationThreshold;
- [DataField]
- public float MaxSaturation = 5.0f;
- [DataField]
- public float MinSaturation = -2.0f;
- // TODO HYPEROXIA?
- [DataField(required: true)]
- [ViewVariables(VVAccess.ReadWrite)]
- public DamageSpecifier Damage = default!;
- [DataField(required: true)]
- [ViewVariables(VVAccess.ReadWrite)]
- public DamageSpecifier DamageRecovery = default!;
- [DataField]
- public TimeSpan GaspEmoteCooldown = TimeSpan.FromSeconds(8);
- [ViewVariables]
- public TimeSpan LastGaspEmoteTime;
- /// <summary>
- /// The emote when gasps
- /// </summary>
- [DataField]
- public ProtoId<EmotePrototype> GaspEmote = "Gasp";
- /// <summary>
- /// How many cycles in a row has the mob been under-saturated?
- /// </summary>
- [ViewVariables]
- public int SuffocationCycles = 0;
- /// <summary>
- /// How many cycles in a row does it take for the suffocation alert to pop up?
- /// </summary>
- [ViewVariables]
- public int SuffocationCycleThreshold = 3;
- [ViewVariables]
- public RespiratorStatus Status = RespiratorStatus.Inhaling;
- }
- }
- public enum RespiratorStatus
- {
- Inhaling,
- Exhaling
- }
|