#nullable enable annotations
using System;
using Robust.Shared.GameObjects;
using Robust.Shared.GameObjects.Components.UserInterface;
using Robust.Shared.Serialization;
using Robust.Shared.ViewVariables;
namespace Content.Shared.GameObjects.Components.Atmos
{
public class SharedGasCanisterComponent : Component
{
public override string Name => "GasCanister";
///
/// Key representing which is currently open.
/// Useful when there are multiple UI for an object. Here it's future-proofing only.
///
[Serializable, NetSerializable]
public enum GasCanisterUiKey
{
Key,
}
}
#region Enums
///
/// Enum representing a UI button.
///
[Serializable, NetSerializable]
public enum UiButton
{
ValveToggle
}
///
/// Used in to determine which visuals to update.
///
[Serializable, NetSerializable]
public enum GasCanisterVisuals
{
ConnectedState,
PressureState
}
#endregion
///
/// Represents a state that can be sent to the client
///
[Serializable, NetSerializable]
public class GasCanisterBoundUserInterfaceState : BoundUserInterfaceState
{
public readonly string Label;
public readonly float Volume;
public readonly float ReleasePressure;
public readonly bool ValveOpened;
public GasCanisterBoundUserInterfaceState(string newLabel, float volume, float releasePressure, bool valveOpened)
{
Label = newLabel;
Volume = volume;
ReleasePressure = releasePressure;
ValveOpened = valveOpened;
}
public bool Equals(GasCanisterBoundUserInterfaceState? other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return Label == other.Label &&
Volume.Equals(other.Volume) &&
ReleasePressure.Equals(other.ReleasePressure) &&
ValveOpened == other.ValveOpened;
}
}
#region NetMessages
///
/// Message sent from the client to the server when a gas canister button is pressed
///
[Serializable, NetSerializable]
public class UiButtonPressedMessage : BoundUserInterfaceMessage
{
public readonly UiButton Button;
public UiButtonPressedMessage(UiButton button)
{
Button = button;
}
}
///
/// Message sent when the release pressure is changed client side
///
[Serializable, NetSerializable]
public class ReleasePressureButtonPressedMessage : BoundUserInterfaceMessage
{
public readonly float ReleasePressure;
public ReleasePressureButtonPressedMessage(float val) : base()
{
ReleasePressure = val;
}
}
///
/// Message sent when the canister label has been changed
///
[Serializable, NetSerializable]
public class CanisterLabelChangedMessage : BoundUserInterfaceMessage
{
public readonly string NewLabel;
public CanisterLabelChangedMessage(string newLabel) : base()
{
NewLabel = newLabel;
}
}
#endregion
}