* removes unused method * Code uncluttering (Also removed the netcode, color code, and visuals, need to rewrite) * SolutionContainerVisualState * Removes caching of SolutionContainer Color * ChemicalsAdded() and ChemicalsRemoved() for updating appearance and handling reaction checks * SolutionContainerComponentState * Netcode * ChemMasterComponent no longer creates a SolutionContainerComponent with new(), uses a Solution instead * Enable nullable in SolutionContainer implementations * Some review fixes * uses IReadOnlyLists in ChemMaster * Comments * review fixes 3 * ReagentUnit documentation * Review fixes * spelling fix * spelling 2 * typo Co-authored-by: py01 <pyronetics01@gmail.com>
119 lines
4.4 KiB
C#
119 lines
4.4 KiB
C#
#nullable enable
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using Content.Shared.Chemistry;
|
|
using Content.Shared.GameObjects.Components.Medical;
|
|
using Content.Shared.GameObjects.Components.Observer;
|
|
using Robust.Shared.GameObjects;
|
|
using Robust.Shared.GameObjects.Components.UserInterface;
|
|
using Robust.Shared.Serialization;
|
|
|
|
namespace Content.Shared.GameObjects.Components.Chemistry.ChemMaster
|
|
{
|
|
|
|
/// <summary>
|
|
/// Shared class for <c>ChemMasterComponent</c>. Provides a way for entities to split reagents from a beaker and produce pills and bottles via a user interface.
|
|
/// </summary>
|
|
public class SharedChemMasterComponent : Component
|
|
{
|
|
public override string Name => "ChemMaster";
|
|
|
|
[Serializable, NetSerializable]
|
|
public class ChemMasterBoundUserInterfaceState : BoundUserInterfaceState
|
|
{
|
|
public readonly bool HasPower;
|
|
public readonly bool HasBeaker;
|
|
public readonly ReagentUnit BeakerCurrentVolume;
|
|
public readonly ReagentUnit BeakerMaxVolume;
|
|
public readonly string ContainerName;
|
|
|
|
/// <summary>
|
|
/// A list of the reagents and their amounts within the beaker/reagent container, if applicable.
|
|
/// </summary>
|
|
public readonly IReadOnlyList<Solution.ReagentQuantity> ContainerReagents;
|
|
/// <summary>
|
|
/// A list of the reagents and their amounts within the buffer, if applicable.
|
|
/// </summary>
|
|
public readonly IReadOnlyList<Solution.ReagentQuantity> BufferReagents;
|
|
public readonly string DispenserName;
|
|
|
|
public readonly bool BufferModeTransfer;
|
|
|
|
public readonly ReagentUnit BufferCurrentVolume;
|
|
|
|
public ChemMasterBoundUserInterfaceState(bool hasPower, bool hasBeaker, ReagentUnit beakerCurrentVolume, ReagentUnit beakerMaxVolume, string containerName,
|
|
string dispenserName, IReadOnlyList<Solution.ReagentQuantity> containerReagents, IReadOnlyList<Solution.ReagentQuantity> bufferReagents, bool bufferModeTransfer, ReagentUnit bufferCurrentVolume)
|
|
{
|
|
HasPower = hasPower;
|
|
HasBeaker = hasBeaker;
|
|
BeakerCurrentVolume = beakerCurrentVolume;
|
|
BeakerMaxVolume = beakerMaxVolume;
|
|
ContainerName = containerName;
|
|
DispenserName = dispenserName;
|
|
ContainerReagents = containerReagents;
|
|
BufferReagents = bufferReagents;
|
|
BufferModeTransfer = bufferModeTransfer;
|
|
BufferCurrentVolume = bufferCurrentVolume;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Message data sent from client to server when a ChemMaster ui button is pressed.
|
|
/// </summary>
|
|
[Serializable, NetSerializable]
|
|
public class UiActionMessage : BoundUserInterfaceMessage
|
|
{
|
|
public readonly UiAction action;
|
|
public readonly ReagentUnit amount;
|
|
public readonly string id = "";
|
|
public readonly bool isBuffer;
|
|
public readonly int pillAmount;
|
|
public readonly int bottleAmount;
|
|
|
|
public UiActionMessage(UiAction _action, ReagentUnit? _amount, string? _id, bool? _isBuffer, int? _pillAmount, int? _bottleAmount)
|
|
{
|
|
action = _action;
|
|
if (action == UiAction.ChemButton)
|
|
{
|
|
amount = _amount.GetValueOrDefault();
|
|
if (_id == null)
|
|
{
|
|
id = "null";
|
|
}
|
|
else
|
|
{
|
|
id = _id;
|
|
}
|
|
|
|
isBuffer = _isBuffer.GetValueOrDefault();
|
|
}
|
|
else
|
|
{
|
|
pillAmount = _pillAmount.GetValueOrDefault();
|
|
bottleAmount = _bottleAmount.GetValueOrDefault();
|
|
}
|
|
}
|
|
}
|
|
|
|
[Serializable, NetSerializable]
|
|
public enum ChemMasterUiKey
|
|
{
|
|
Key
|
|
}
|
|
|
|
/// <summary>
|
|
/// Used in <see cref="AcceptCloningChoiceMessage"/> to specify which button was pressed.
|
|
/// </summary>
|
|
public enum UiAction
|
|
{
|
|
Eject,
|
|
Transfer,
|
|
Discard,
|
|
ChemButton,
|
|
CreatePills,
|
|
CreateBottles
|
|
}
|
|
|
|
}
|
|
}
|