using Content.Shared.Emag.Systems; using Content.Shared.Tag; using Robust.Shared.GameStates; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using Robust.Shared.Serialization; namespace Content.Shared.Emag.Components; [Access(typeof(EmagSystem))] [RegisterComponent, NetworkedComponent] public sealed class EmagComponent : Component { /// /// The maximum number of charges the emag can have /// [DataField("maxCharges"), ViewVariables(VVAccess.ReadWrite)] public int MaxCharges = 3; /// /// The current number of charges on the emag /// [DataField("charges"), ViewVariables(VVAccess.ReadWrite)] public int Charges = 3; /// /// Whether or not the emag automatically recharges over time. /// [DataField("autoRecharge"), ViewVariables(VVAccess.ReadWrite)] public bool AutoRecharge = true; /// /// The time it takes to regain a single charge /// [DataField("rechargeDuration"), ViewVariables(VVAccess.ReadWrite)] public TimeSpan RechargeDuration = TimeSpan.FromSeconds(90); /// /// The time when the next charge will be added /// [DataField("nextChargeTime", customTypeSerializer: typeof(TimeOffsetSerializer)), ViewVariables(VVAccess.ReadWrite)] public TimeSpan NextChargeTime = TimeSpan.MaxValue; /// /// The tag that marks an entity as immune to emags /// [DataField("emagImmuneTag", customTypeSerializer: typeof(PrototypeIdSerializer)), ViewVariables(VVAccess.ReadWrite)] public string EmagImmuneTag = "EmagImmune"; } [Serializable, NetSerializable] public sealed class EmagComponentState : ComponentState { public int MaxCharges; public int Charges; public bool AutoRecharge; public TimeSpan RechargeTime; public TimeSpan NextChargeTime; public string EmagImmuneTag; public EmagComponentState(int maxCharges, int charges, TimeSpan rechargeTime, TimeSpan nextChargeTime, string emagImmuneTag, bool autoRecharge) { MaxCharges = maxCharges; Charges = charges; RechargeTime = rechargeTime; NextChargeTime = nextChargeTime; EmagImmuneTag = emagImmuneTag; AutoRecharge = autoRecharge; } }