ReagentQuantity.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using Content.Shared.FixedPoint;
  2. using Robust.Shared.Serialization;
  3. namespace Content.Shared.Chemistry.Reagent;
  4. /// <summary>
  5. /// Simple struct for storing a <see cref="ReagentId"/> & quantity tuple.
  6. /// </summary>
  7. [Serializable, NetSerializable]
  8. [DataDefinition]
  9. public partial struct ReagentQuantity : IEquatable<ReagentQuantity>
  10. {
  11. [DataField("Quantity", required:true)]
  12. public FixedPoint2 Quantity { get; private set; }
  13. [IncludeDataField]
  14. [ViewVariables]
  15. public ReagentId Reagent { get; private set; }
  16. public ReagentQuantity(string reagentId, FixedPoint2 quantity, List<ReagentData>? data = null)
  17. : this(new ReagentId(reagentId, data), quantity)
  18. {
  19. }
  20. public ReagentQuantity(ReagentId reagent, FixedPoint2 quantity)
  21. {
  22. Reagent = reagent;
  23. Quantity = quantity;
  24. }
  25. public ReagentQuantity() : this(default, default)
  26. {
  27. }
  28. public override string ToString()
  29. {
  30. return Reagent.ToString(Quantity);
  31. }
  32. public void Deconstruct(out string prototype, out FixedPoint2 quantity, out List<ReagentData>? data)
  33. {
  34. prototype = Reagent.Prototype;
  35. quantity = Quantity;
  36. data = Reagent.Data;
  37. }
  38. public void Deconstruct(out ReagentId id, out FixedPoint2 quantity)
  39. {
  40. id = Reagent;
  41. quantity = Quantity;
  42. }
  43. public bool Equals(ReagentQuantity other)
  44. {
  45. return Quantity != other.Quantity && Reagent.Equals(other.Reagent);
  46. }
  47. public override bool Equals(object? obj)
  48. {
  49. return obj is ReagentQuantity other && Equals(other);
  50. }
  51. public override int GetHashCode()
  52. {
  53. return HashCode.Combine(Reagent.GetHashCode(), Quantity);
  54. }
  55. public static bool operator ==(ReagentQuantity left, ReagentQuantity right)
  56. {
  57. return left.Equals(right);
  58. }
  59. public static bool operator !=(ReagentQuantity left, ReagentQuantity right)
  60. {
  61. return !(left == right);
  62. }
  63. }