SharedReagentDispenser.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using Content.Shared.Chemistry.Reagent;
  2. using Content.Shared.FixedPoint;
  3. using Robust.Shared.Serialization;
  4. namespace Content.Shared.Chemistry
  5. {
  6. /// <summary>
  7. /// This class holds constants that are shared between client and server.
  8. /// </summary>
  9. public sealed class SharedReagentDispenser
  10. {
  11. public const string OutputSlotName = "beakerSlot";
  12. }
  13. [Serializable, NetSerializable]
  14. public sealed class ReagentDispenserSetDispenseAmountMessage : BoundUserInterfaceMessage
  15. {
  16. public readonly ReagentDispenserDispenseAmount ReagentDispenserDispenseAmount;
  17. public ReagentDispenserSetDispenseAmountMessage(ReagentDispenserDispenseAmount amount)
  18. {
  19. ReagentDispenserDispenseAmount = amount;
  20. }
  21. /// <summary>
  22. /// Create a new instance from interpreting a String as an integer,
  23. /// throwing an exception if it is unable to parse.
  24. /// </summary>
  25. public ReagentDispenserSetDispenseAmountMessage(String s)
  26. {
  27. switch (s)
  28. {
  29. case "1":
  30. ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U1;
  31. break;
  32. case "5":
  33. ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U5;
  34. break;
  35. case "10":
  36. ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U10;
  37. break;
  38. case "15":
  39. ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U15;
  40. break;
  41. case "20":
  42. ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U20;
  43. break;
  44. case "25":
  45. ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U25;
  46. break;
  47. case "30":
  48. ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U30;
  49. break;
  50. case "50":
  51. ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U50;
  52. break;
  53. case "100":
  54. ReagentDispenserDispenseAmount = ReagentDispenserDispenseAmount.U100;
  55. break;
  56. default:
  57. throw new Exception($"Cannot convert the string `{s}` into a valid ReagentDispenser DispenseAmount");
  58. }
  59. }
  60. }
  61. [Serializable, NetSerializable]
  62. public sealed class ReagentDispenserDispenseReagentMessage : BoundUserInterfaceMessage
  63. {
  64. public readonly string SlotId;
  65. public ReagentDispenserDispenseReagentMessage(string slotId)
  66. {
  67. SlotId = slotId;
  68. }
  69. }
  70. [Serializable, NetSerializable]
  71. public sealed class ReagentDispenserClearContainerSolutionMessage : BoundUserInterfaceMessage
  72. {
  73. }
  74. public enum ReagentDispenserDispenseAmount
  75. {
  76. U1 = 1,
  77. U5 = 5,
  78. U10 = 10,
  79. U15 = 15,
  80. U20 = 20,
  81. U25 = 25,
  82. U30 = 30,
  83. U50 = 50,
  84. U100 = 100,
  85. }
  86. [Serializable, NetSerializable]
  87. public sealed class ReagentInventoryItem(string storageSlotId, string reagentLabel, FixedPoint2 quantity, Color reagentColor)
  88. {
  89. public string StorageSlotId = storageSlotId;
  90. public string ReagentLabel = reagentLabel;
  91. public FixedPoint2 Quantity = quantity;
  92. public Color ReagentColor = reagentColor;
  93. }
  94. [Serializable, NetSerializable]
  95. public sealed class ReagentDispenserBoundUserInterfaceState : BoundUserInterfaceState
  96. {
  97. public readonly ContainerInfo? OutputContainer;
  98. public readonly NetEntity? OutputContainerEntity;
  99. /// <summary>
  100. /// A list of the reagents which this dispenser can dispense.
  101. /// </summary>
  102. public readonly List<ReagentInventoryItem> Inventory;
  103. public readonly ReagentDispenserDispenseAmount SelectedDispenseAmount;
  104. public ReagentDispenserBoundUserInterfaceState(ContainerInfo? outputContainer, NetEntity? outputContainerEntity, List<ReagentInventoryItem> inventory, ReagentDispenserDispenseAmount selectedDispenseAmount)
  105. {
  106. OutputContainer = outputContainer;
  107. OutputContainerEntity = outputContainerEntity;
  108. Inventory = inventory;
  109. SelectedDispenseAmount = selectedDispenseAmount;
  110. }
  111. }
  112. [Serializable, NetSerializable]
  113. public enum ReagentDispenserUiKey
  114. {
  115. Key
  116. }
  117. }