using Content.Shared.Power.Components; using Content.Shared.Power.EntitySystems; using Content.Shared.PowerCell.Components; namespace Content.Shared.Power; /// /// Raised when a battery's charge, charge rate or capacity was updated (capacity affects relative charge percentage). /// If a battery uses to (dis)charge this is NOT raised every single tick, but only when the charge rate is updated. /// For instantaneous charge changes using , or similar this DOES get raised, but /// you should avoid doing so in update loops if the component has net sync enabled. /// [ByRefEvent] public readonly record struct ChargeChangedEvent(float CurrentCharge, float Delta, float CurrentChargeRate, float MaxCharge) { /// /// The new charge of the battery. /// public readonly float CurrentCharge = CurrentCharge; /// /// The amount the charge was changed by. /// This might be 0 if only the charge rate was modified. /// public readonly float Delta = Delta; /// /// The new charge rate of the battery. /// public readonly float CurrentChargeRate = CurrentChargeRate; /// /// The maximum charge of the battery. /// public readonly float MaxCharge = MaxCharge; } /// /// Raised when a battery changes its state between full, empty, or neither. /// Useful to detect when a battery is empty or fully charged (since ChargeChangedEvent does not get raised every tick for batteries with a constant charge rate). /// [ByRefEvent] public record struct BatteryStateChangedEvent(BatteryState OldState, BatteryState NewState); /// /// Raised to calculate a predicted battery's recharge rate. /// Subscribe to this to offset its current charge rate. /// [ByRefEvent] public record struct RefreshChargeRateEvent(float MaxCharge) { public readonly float MaxCharge = MaxCharge; public float NewChargeRate; } /// /// Event that supports multiple battery types. /// Raised when it is necessary to get information about battery charges. /// Works with either or . /// If there are multiple batteries then the results will be summed up. /// [ByRefEvent] public record struct GetChargeEvent { public float CurrentCharge; public float MaxCharge; } /// /// Method event that supports multiple battery types. /// Raised when it is necessary to change the current battery charge by some value. /// Works with either or . /// If there are multiple batteries then they will be changed in order of subscription until the total value was reached. /// [ByRefEvent] public record struct ChangeChargeEvent(float Amount) { /// /// The total amount of charge to change the battery's storage by (in joule). /// A positive value adds charge, a negative value removes charge. /// public readonly float Amount = Amount; /// /// The amount of charge that still has to be removed. /// For cases where there are multiple batteries. /// public float ResidualValue = Amount; }