using Robust.Shared.GameStates; using Robust.Shared.Serialization; namespace Content.Shared.Power.Generator; /// /// This is used for generators that run off some kind of fuel. /// [RegisterComponent, NetworkedComponent, Access(typeof(SharedGeneratorSystem))] public sealed class FuelGeneratorComponent : Component { /// /// The amount of fuel left in the generator. /// [DataField("remainingFuel"), ViewVariables(VVAccess.ReadWrite)] public float RemainingFuel; /// /// The generator's target power. /// [DataField("targetPower"), ViewVariables(VVAccess.ReadWrite)] public float TargetPower = 15_000.0f; /// /// The maximum target power. /// [DataField("maxTargetPower"), ViewVariables(VVAccess.ReadWrite)] public float MaxTargetPower = 30_000.0f; /// /// The "optimal" power at which the generator is considered to be at 100% efficiency. /// [DataField("optimalPower"), ViewVariables(VVAccess.ReadWrite)] public float OptimalPower = 15_000.0f; /// /// The rate at which one unit of fuel should be consumed. /// [DataField("optimalBurnRate"), ViewVariables(VVAccess.ReadWrite)] public float OptimalBurnRate = 1 / 60.0f; // Once every 60 seconds. /// /// A constant used to calculate fuel efficiency in relation to target power output and optimal power output /// [DataField("fuelEfficiencyConstant")] public float FuelEfficiencyConstant = 1.3f; } /// /// Sent to the server to adjust the targeted power level. /// [Serializable, NetSerializable] public sealed class SetTargetPowerMessage : BoundUserInterfaceMessage { public int TargetPower; public SetTargetPowerMessage(int targetPower) { TargetPower = targetPower; } } /// /// Contains network state for FuelGeneratorComponent. /// [Serializable, NetSerializable] public sealed class SolidFuelGeneratorComponentBuiState : BoundUserInterfaceState { public float RemainingFuel; public float TargetPower; public float MaximumPower; public float OptimalPower; public SolidFuelGeneratorComponentBuiState(FuelGeneratorComponent component) { RemainingFuel = component.RemainingFuel; TargetPower = component.TargetPower; MaximumPower = component.MaxTargetPower; OptimalPower = component.OptimalPower; } } [Serializable, NetSerializable] public enum GeneratorComponentUiKey { Key }