Files
tbd-station-14/Content.Shared/Power/Generator/SharedPortableGeneratorComponent.cs
Pieter-Jan Briers f855cb2b00 Make PACMANs a little better (#24604)
* PACMAN generators show network load/supply.

This gives more feedback to players that their PACMAN is properly connected and what the network status is (i.e. you don't have enough generators).

* Buff JRPACMAN to 8 kW.

Shifted all power values up by +3 kW.

They're frequently too weak to power even single rooms so they deserve a buff.

* Change unit format helpers number format.

Always displays one digit of precision. This avoids jumping around when a value is changing live.
2024-01-26 21:53:43 -05:00

150 lines
4.2 KiB
C#

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