using Content.Shared.Chemistry.Reagent; using Content.Shared.FixedPoint; using Content.Shared.Storage; using Robust.Shared.Serialization; namespace Content.Shared.Chemistry { /// /// This class holds constants that are shared between client and server. /// public sealed class SharedReagentDispenser { public const string OutputSlotName = "beakerSlot"; } [Serializable, NetSerializable] public sealed class ReagentDispenserSetDispenseAmountMessage : BoundUserInterfaceMessage { public readonly ReagentDispenserDispenseAmount ReagentDispenserDispenseAmount; public ReagentDispenserSetDispenseAmountMessage(ReagentDispenserDispenseAmount amount) { ReagentDispenserDispenseAmount = amount; } /// /// Create a new instance from interpreting a String as an integer, /// throwing an exception if it is unable to parse. /// public ReagentDispenserSetDispenseAmountMessage(String s) { switch (s) { case "1": ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U1; break; case "5": ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U5; break; case "10": ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U10; break; case "15": ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U15; break; case "20": ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U20; break; case "25": ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U25; break; case "30": ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U30; break; case "50": ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U50; break; case "100": ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U100; break; default: throw new Exception($"Cannot convert the string `{s}` into a valid ReagentDispenser DispenseAmount"); } } } [Serializable, NetSerializable] public sealed class ReagentDispenserDispenseReagentMessage : BoundUserInterfaceMessage { public readonly ItemStorageLocation StorageLocation; public ReagentDispenserDispenseReagentMessage(ItemStorageLocation storageLocation) { StorageLocation = storageLocation; } } /// /// Message sent by the user interface to ask the reagent dispenser to eject a container /// [Serializable, NetSerializable] public sealed class ReagentDispenserEjectContainerMessage : BoundUserInterfaceMessage { public readonly ItemStorageLocation StorageLocation; public ReagentDispenserEjectContainerMessage(ItemStorageLocation storageLocation) { StorageLocation = storageLocation; } } [Serializable, NetSerializable] public sealed class ReagentDispenserClearContainerSolutionMessage : BoundUserInterfaceMessage { } public enum ReagentDispenserDispenseAmount { U1 = 1, U5 = 5, U10 = 10, U15 = 15, U20 = 20, U25 = 25, U30 = 30, U50 = 50, U100 = 100, } [Serializable, NetSerializable] public sealed class ReagentInventoryItem(ItemStorageLocation storageLocation, string reagentLabel, FixedPoint2 quantity, Color reagentColor) { public ItemStorageLocation StorageLocation = storageLocation; public string ReagentLabel = reagentLabel; public FixedPoint2 Quantity = quantity; public Color ReagentColor = reagentColor; } [Serializable, NetSerializable] public sealed class ReagentDispenserBoundUserInterfaceState : BoundUserInterfaceState { public readonly ContainerInfo? OutputContainer; public readonly NetEntity? OutputContainerEntity; /// /// A list of the reagents which this dispenser can dispense. /// public readonly List Inventory; public readonly ReagentDispenserDispenseAmount SelectedDispenseAmount; public ReagentDispenserBoundUserInterfaceState(ContainerInfo? outputContainer, NetEntity? outputContainerEntity, List inventory, ReagentDispenserDispenseAmount selectedDispenseAmount) { OutputContainer = outputContainer; OutputContainerEntity = outputContainerEntity; Inventory = inventory; SelectedDispenseAmount = selectedDispenseAmount; } } [Serializable, NetSerializable] public enum ReagentDispenserUiKey { Key } }