1
0

SharedChemMaster.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  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 SharedChemMaster
  10. {
  11. public const uint PillTypes = 20;
  12. public const string BufferSolutionName = "buffer";
  13. public const string InputSlotName = "beakerSlot";
  14. public const string OutputSlotName = "outputSlot";
  15. public const string PillSolutionName = "food";
  16. public const string BottleSolutionName = "drink";
  17. public const uint LabelMaxLength = 50;
  18. }
  19. [Serializable, NetSerializable]
  20. public sealed class ChemMasterSetModeMessage : BoundUserInterfaceMessage
  21. {
  22. public readonly ChemMasterMode ChemMasterMode;
  23. public ChemMasterSetModeMessage(ChemMasterMode mode)
  24. {
  25. ChemMasterMode = mode;
  26. }
  27. }
  28. [Serializable, NetSerializable]
  29. public sealed class ChemMasterSetPillTypeMessage : BoundUserInterfaceMessage
  30. {
  31. public readonly uint PillType;
  32. public ChemMasterSetPillTypeMessage(uint pillType)
  33. {
  34. PillType = pillType;
  35. }
  36. }
  37. [Serializable, NetSerializable]
  38. public sealed class ChemMasterReagentAmountButtonMessage : BoundUserInterfaceMessage
  39. {
  40. public readonly ReagentId ReagentId;
  41. public readonly ChemMasterReagentAmount Amount;
  42. public readonly bool FromBuffer;
  43. public ChemMasterReagentAmountButtonMessage(ReagentId reagentId, ChemMasterReagentAmount amount, bool fromBuffer)
  44. {
  45. ReagentId = reagentId;
  46. Amount = amount;
  47. FromBuffer = fromBuffer;
  48. }
  49. }
  50. [Serializable, NetSerializable]
  51. public sealed class ChemMasterCreatePillsMessage : BoundUserInterfaceMessage
  52. {
  53. public readonly uint Dosage;
  54. public readonly uint Number;
  55. public readonly string Label;
  56. public ChemMasterCreatePillsMessage(uint dosage, uint number, string label)
  57. {
  58. Dosage = dosage;
  59. Number = number;
  60. Label = label;
  61. }
  62. }
  63. [Serializable, NetSerializable]
  64. public sealed class ChemMasterOutputToBottleMessage : BoundUserInterfaceMessage
  65. {
  66. public readonly uint Dosage;
  67. public readonly string Label;
  68. public ChemMasterOutputToBottleMessage(uint dosage, string label)
  69. {
  70. Dosage = dosage;
  71. Label = label;
  72. }
  73. }
  74. public enum ChemMasterMode
  75. {
  76. Transfer,
  77. Discard,
  78. }
  79. public enum ChemMasterSortingType : byte
  80. {
  81. None = 0,
  82. Alphabetical = 1,
  83. Quantity = 2,
  84. Latest = 3,
  85. }
  86. [Serializable, NetSerializable]
  87. public sealed class ChemMasterSortingTypeCycleMessage : BoundUserInterfaceMessage;
  88. public enum ChemMasterReagentAmount
  89. {
  90. U1 = 1,
  91. U5 = 5,
  92. U10 = 10,
  93. U25 = 25,
  94. U50 = 50,
  95. U100 = 100,
  96. All,
  97. }
  98. public static class ChemMasterReagentAmountToFixedPoint
  99. {
  100. public static FixedPoint2 GetFixedPoint(this ChemMasterReagentAmount amount)
  101. {
  102. if (amount == ChemMasterReagentAmount.All)
  103. return FixedPoint2.MaxValue;
  104. else
  105. return FixedPoint2.New((int)amount);
  106. }
  107. }
  108. /// <summary>
  109. /// Information about the capacity and contents of a container for display in the UI
  110. /// </summary>
  111. [Serializable, NetSerializable]
  112. public sealed class ContainerInfo
  113. {
  114. /// <summary>
  115. /// The container name to show to the player
  116. /// </summary>
  117. public readonly string DisplayName;
  118. /// <summary>
  119. /// The currently used volume of the container
  120. /// </summary>
  121. public readonly FixedPoint2 CurrentVolume;
  122. /// <summary>
  123. /// The maximum volume of the container
  124. /// </summary>
  125. public readonly FixedPoint2 MaxVolume;
  126. /// <summary>
  127. /// A list of the entities and their sizes within the container
  128. /// </summary>
  129. public List<(string Id, FixedPoint2 Quantity)>? Entities { get; init; }
  130. public List<ReagentQuantity>? Reagents { get; init; }
  131. public ContainerInfo(string displayName, FixedPoint2 currentVolume, FixedPoint2 maxVolume)
  132. {
  133. DisplayName = displayName;
  134. CurrentVolume = currentVolume;
  135. MaxVolume = maxVolume;
  136. }
  137. }
  138. [Serializable, NetSerializable]
  139. public sealed class ChemMasterBoundUserInterfaceState : BoundUserInterfaceState
  140. {
  141. public readonly ContainerInfo? InputContainerInfo;
  142. public readonly ContainerInfo? OutputContainerInfo;
  143. /// <summary>
  144. /// A list of the reagents and their amounts within the buffer, if applicable.
  145. /// </summary>
  146. public readonly IReadOnlyList<ReagentQuantity> BufferReagents;
  147. public readonly ChemMasterMode Mode;
  148. public readonly ChemMasterSortingType SortingType;
  149. public readonly FixedPoint2? BufferCurrentVolume;
  150. public readonly uint SelectedPillType;
  151. public readonly uint PillDosageLimit;
  152. public readonly bool UpdateLabel;
  153. public ChemMasterBoundUserInterfaceState(
  154. ChemMasterMode mode, ChemMasterSortingType sortingType, ContainerInfo? inputContainerInfo, ContainerInfo? outputContainerInfo,
  155. IReadOnlyList<ReagentQuantity> bufferReagents, FixedPoint2 bufferCurrentVolume,
  156. uint selectedPillType, uint pillDosageLimit, bool updateLabel)
  157. {
  158. InputContainerInfo = inputContainerInfo;
  159. OutputContainerInfo = outputContainerInfo;
  160. BufferReagents = bufferReagents;
  161. Mode = mode;
  162. SortingType = sortingType;
  163. BufferCurrentVolume = bufferCurrentVolume;
  164. SelectedPillType = selectedPillType;
  165. PillDosageLimit = pillDosageLimit;
  166. UpdateLabel = updateLabel;
  167. }
  168. }
  169. [Serializable, NetSerializable]
  170. public enum ChemMasterUiKey
  171. {
  172. Key
  173. }
  174. }