using Robust.Shared.Audio; using Robust.Shared.Serialization; namespace Content.Shared.Power.Generator; /// /// Responsible for power output switching & UI logic on portable generators. /// /// /// A portable generator is expected to have the following components: SolidFuelGeneratorAdapterComponent . /// /// [RegisterComponent] [Access(typeof(SharedPortableGeneratorSystem))] public sealed partial class PortableGeneratorComponent : Component { /// /// Chance that this generator will start. If it fails, the user has to try again. /// [DataField("startChance")] [ViewVariables(VVAccess.ReadWrite)] public float StartChance { get; set; } = 1f; /// /// Amount of time it takes to attempt to start the generator. /// [DataField("startTime")] [ViewVariables(VVAccess.ReadWrite)] public TimeSpan StartTime { get; set; } = TimeSpan.FromSeconds(2); /// /// Sound that plays when attempting to start this generator. /// [DataField("startSound")] [ViewVariables(VVAccess.ReadWrite)] public SoundSpecifier? StartSound { get; set; } /// /// Sound that plays when attempting to start this generator. /// Plays instead of if the generator has no fuel (dumbass). /// [DataField("startSoundEmpty")] [ViewVariables(VVAccess.ReadWrite)] public SoundSpecifier? StartSoundEmpty { get; set; } } /// /// Sent to the server to adjust the targeted power level of a portable generator. /// [Serializable, NetSerializable] public sealed class PortableGeneratorSetTargetPowerMessage : BoundUserInterfaceMessage { public int TargetPower; public PortableGeneratorSetTargetPowerMessage(int targetPower) { TargetPower = targetPower; } } /// /// Sent to the server to try to start a portable generator. /// [Serializable, NetSerializable] public sealed class PortableGeneratorStartMessage : BoundUserInterfaceMessage { } /// /// Sent to the server to try to stop a portable generator. /// [Serializable, NetSerializable] public sealed class PortableGeneratorStopMessage : BoundUserInterfaceMessage { } /// /// Sent to the server to try to change the power output of a power-switchable portable generator. /// [Serializable, NetSerializable] public sealed class PortableGeneratorSwitchOutputMessage : BoundUserInterfaceMessage { } /// /// Sent to the server to try to eject all fuel stored in a portable generator. /// [Serializable, NetSerializable] public sealed class PortableGeneratorEjectFuelMessage : BoundUserInterfaceMessage { } /// /// Contains network state for the portable generator. /// [Serializable, NetSerializable] public sealed class PortableGeneratorComponentBuiState : BoundUserInterfaceState { public float RemainingFuel; public bool Clogged; public (float Load, float Supply)? NetworkStats; public float TargetPower; public float MaximumPower; public float OptimalPower; public bool On; public PortableGeneratorComponentBuiState( FuelGeneratorComponent component, float remainingFuel, bool clogged, (float Demand, float Supply)? networkStats) { RemainingFuel = remainingFuel; Clogged = clogged; TargetPower = component.TargetPower; MaximumPower = component.MaxTargetPower; OptimalPower = component.OptimalPower; On = component.On; NetworkStats = networkStats; } } [Serializable, NetSerializable] public enum GeneratorComponentUiKey { Key } /// /// Sprite layers for generator prototypes. /// [Serializable, NetSerializable] public enum GeneratorVisualLayers : byte { Body, Unlit } /// /// Appearance keys for generators. /// [Serializable, NetSerializable] public enum GeneratorVisuals : byte { /// /// Boolean: is the generator running? /// Running, }