* reagent dispenser: fancy window * reagent dispenser: dispense button grid * reagent dispenser: rearrange containers & info * reagent dispenser: remove `reagent-dispenser-window-container-label` * reagent dispenser: add `Scrollcontainer` on right side * reagent dispenser: get rid of pointless actions * reagent dispenser: cleanup actions and `inventory` field on bound ui state * reagent dispenser: cool reagent cards & finishing touches * reagent dispenser: final cleanup and formatting * reagent dispenser: `ButtonGrid` and `ReagentDispenserSetDispenseAmountMessage` refactor * reagent dispenser: cleanup code & address minor concerns * reagent dispenser: text in reagent cards no longer clips * reagent dispenser: oh wait i forgot to change this and thats why the builds keep failing probably * reagent dispenser mayybe this * reagent dispenser: remove `using FastAccessors;` * delete unused classes * disable reagent button when container is empty * Make things a bit bigger * remove obsolete text color override
134 lines
4.5 KiB
C#
134 lines
4.5 KiB
C#
using Content.Shared.Chemistry.Reagent;
|
|
using Content.Shared.FixedPoint;
|
|
using Robust.Shared.Serialization;
|
|
|
|
namespace Content.Shared.Chemistry
|
|
{
|
|
/// <summary>
|
|
/// This class holds constants that are shared between client and server.
|
|
/// </summary>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Create a new instance from interpreting a String as an integer,
|
|
/// throwing an exception if it is unable to parse.
|
|
/// </summary>
|
|
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 string SlotId;
|
|
|
|
public ReagentDispenserDispenseReagentMessage(string slotId)
|
|
{
|
|
SlotId = slotId;
|
|
}
|
|
}
|
|
|
|
[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(string storageSlotId, string reagentLabel, FixedPoint2 quantity, Color reagentColor)
|
|
{
|
|
public string StorageSlotId = storageSlotId;
|
|
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;
|
|
|
|
/// <summary>
|
|
/// A list of the reagents which this dispenser can dispense.
|
|
/// </summary>
|
|
public readonly List<ReagentInventoryItem> Inventory;
|
|
|
|
public readonly ReagentDispenserDispenseAmount SelectedDispenseAmount;
|
|
|
|
public ReagentDispenserBoundUserInterfaceState(ContainerInfo? outputContainer, NetEntity? outputContainerEntity, List<ReagentInventoryItem> inventory, ReagentDispenserDispenseAmount selectedDispenseAmount)
|
|
{
|
|
OutputContainer = outputContainer;
|
|
OutputContainerEntity = outputContainerEntity;
|
|
Inventory = inventory;
|
|
SelectedDispenseAmount = selectedDispenseAmount;
|
|
}
|
|
}
|
|
|
|
[Serializable, NetSerializable]
|
|
public enum ReagentDispenserUiKey
|
|
{
|
|
Key
|
|
}
|
|
}
|