Files
crystall-punk-14/Content.Shared/GameObjects/Components/Atmos/SharedGasCanisterComponent.cs

124 lines
3.5 KiB
C#
Raw Normal View History

Canisters [ Continuation of clement-or #2544 ] (#2628) * 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>
2020-12-08 19:45:24 +00:00
#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
}