* Added atmos sprites from CEV-Eris * Moved canister sprites to appropriate dir * Removed unnecessary sprites, edited canisters prototype * Created Gas Canister UI and release pressure buttons * Changed GasMixture's pressure calculation (convert liters to cube meters) * Added relabeling Canisters * Reverted changes on GasMixture * Changed my name in the credits * Added valve opening on canisters * Change canister visual state when connected to a port * Added nullable to SharedGasCanisterComponent * Replaced nullable contexts * Changed again nullable annotation context * Moved name in the credits to correct alphabetical order * Canisters: Fix the most blatant issues with this PR (the added project interdependencies for no reason whatsoever) * Canisters: Stop crashes when canisters leave atmosphere * Canisters: Gas released into no atmosphere gets transferred "into space" (deleted) * Atmos: Nullability annotations on TileAtmosphere, explaination of the states of TileAtmosphere.Air * Canisters: If in an airblocked tile, do NOT release gas * Scrubbers: Fix typo leading to them not connecting properly. * Revert manual changes to credits file (sorry!) (1/2) This reverts commit 94f3b0e5df8d9c2fa189866a17a231920f99bdaf. * Revert manual changes to credits file (sorry!) (2/2) This reverts commit 1986fb094dfaa44060f08d280f36b755258d17a6. * Canisters: Apply @Zumorica 's reviews * Canisters: Add missing localization as suggested by PJB Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Canisters: Pressure lights! * Canisters: Light is now unshaded. * Canisters: Now using IActivate * Gas canisters (& air canister), now with their numbers properly calibrated (hopefully) * Canisters: Refactor how their layers are added to be more like ApcVisualizer * Canisters: Clean up of the tile invalidation/air release logic * Canisters: Some gas canister window improvements * Canisters: Clean up release pressure change button label code Co-authored-by: Clement-O <topy72.mine@gmail.com> Co-authored-by: Clément <clement.orlandini@gmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
124 lines
3.5 KiB
C#
124 lines
3.5 KiB
C#
#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";
|
|
|
|
/// <summary>
|
|
/// Key representing which <see cref="BoundUserInterface"/> is currently open.
|
|
/// Useful when there are multiple UI for an object. Here it's future-proofing only.
|
|
/// </summary>
|
|
[Serializable, NetSerializable]
|
|
public enum GasCanisterUiKey
|
|
{
|
|
Key,
|
|
}
|
|
}
|
|
|
|
#region Enums
|
|
|
|
/// <summary>
|
|
/// Enum representing a UI button.
|
|
/// </summary>
|
|
[Serializable, NetSerializable]
|
|
public enum UiButton
|
|
{
|
|
ValveToggle
|
|
}
|
|
|
|
/// <summary>
|
|
/// Used in <see cref="GasCanisterVisualizer"/> to determine which visuals to update.
|
|
/// </summary>
|
|
[Serializable, NetSerializable]
|
|
public enum GasCanisterVisuals
|
|
{
|
|
ConnectedState,
|
|
PressureState
|
|
}
|
|
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// Represents a <see cref="GasCanisterComponent"/> state that can be sent to the client
|
|
/// </summary>
|
|
[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
|
|
|
|
/// <summary>
|
|
/// Message sent from the client to the server when a gas canister button is pressed
|
|
/// </summary>
|
|
[Serializable, NetSerializable]
|
|
public class UiButtonPressedMessage : BoundUserInterfaceMessage
|
|
{
|
|
public readonly UiButton Button;
|
|
|
|
public UiButtonPressedMessage(UiButton button)
|
|
{
|
|
Button = button;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Message sent when the release pressure is changed client side
|
|
/// </summary>
|
|
[Serializable, NetSerializable]
|
|
public class ReleasePressureButtonPressedMessage : BoundUserInterfaceMessage
|
|
{
|
|
public readonly float ReleasePressure;
|
|
|
|
public ReleasePressureButtonPressedMessage(float val) : base()
|
|
{
|
|
ReleasePressure = val;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Message sent when the canister label has been changed
|
|
/// </summary>
|
|
[Serializable, NetSerializable]
|
|
public class CanisterLabelChangedMessage : BoundUserInterfaceMessage
|
|
{
|
|
public readonly string NewLabel;
|
|
|
|
public CanisterLabelChangedMessage(string newLabel) : base()
|
|
{
|
|
NewLabel = newLabel;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|