1
0

BluespaceLockerComponent.cs 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. namespace Content.Server.Storage.Components;
  2. [RegisterComponent]
  3. public sealed partial class BluespaceLockerComponent : Component
  4. {
  5. /// <summary>
  6. /// If length > 0, when something is added to the storage, it will instead be teleported to a random storage
  7. /// from the list and the other storage will be opened.
  8. /// </summary>
  9. [DataField("bluespaceLinks"), ViewVariables(VVAccess.ReadOnly)]
  10. public HashSet<EntityUid> BluespaceLinks = new();
  11. /// <summary>
  12. /// Each time the system attempts to get a link, it will link additional lockers to ensure the minimum amount
  13. /// are linked.
  14. /// </summary>
  15. [DataField("minBluespaceLinks"), ViewVariables(VVAccess.ReadWrite)]
  16. public uint MinBluespaceLinks;
  17. /// <summary>
  18. /// Determines if links automatically added are restricted to the same map
  19. /// </summary>
  20. [DataField("pickLinksFromSameMap"), ViewVariables(VVAccess.ReadWrite)]
  21. public bool PickLinksFromSameMap;
  22. /// <summary>
  23. /// Determines if links automatically added must have ResistLockerComponent
  24. /// </summary>
  25. [DataField("pickLinksFromResistLockers"), ViewVariables(VVAccess.ReadWrite)]
  26. public bool PickLinksFromResistLockers = true;
  27. /// <summary>
  28. /// Determines if links automatically added are restricted to being on a station
  29. /// </summary>
  30. [DataField("pickLinksFromStationGrids"), ViewVariables(VVAccess.ReadWrite)]
  31. public bool PickLinksFromStationGrids = true;
  32. /// <summary>
  33. /// Determines if links automatically added are restricted to having the same access
  34. /// </summary>
  35. [DataField("pickLinksFromSameAccess"), ViewVariables(VVAccess.ReadWrite)]
  36. public bool PickLinksFromSameAccess = true;
  37. /// <summary>
  38. /// Determines if links automatically added are restricted to existing bluespace lockers
  39. /// </summary>
  40. [DataField("pickLinksFromBluespaceLockers"), ViewVariables(VVAccess.ReadWrite)]
  41. public bool PickLinksFromBluespaceLockers;
  42. /// <summary>
  43. /// Determines if links automatically added are restricted to non-bluespace lockers
  44. /// </summary>
  45. [DataField("pickLinksFromNonBluespaceLockers"), ViewVariables(VVAccess.ReadWrite)]
  46. public bool PickLinksFromNonBluespaceLockers = true;
  47. /// <summary>
  48. /// Determines if links automatically added get the source locker set as a target
  49. /// </summary>
  50. [DataField("autoLinksBidirectional"), ViewVariables(VVAccess.ReadWrite)]
  51. public bool AutoLinksBidirectional;
  52. /// <summary>
  53. /// Determines if links automatically use <see cref="AutoLinkProperties"/>
  54. /// </summary>
  55. [DataField("autoLinksUseProperties"), ViewVariables(VVAccess.ReadWrite)]
  56. public bool AutoLinksUseProperties;
  57. [DataField("usesSinceLinkClear"), ViewVariables(VVAccess.ReadWrite)]
  58. public int UsesSinceLinkClear;
  59. [DataField("bluespaceEffectMinInterval"), ViewVariables(VVAccess.ReadOnly)]
  60. public uint BluespaceEffectNextTime { get; set; }
  61. /// <summary>
  62. /// Determines properties of automatically created links
  63. /// </summary>
  64. [DataField("autoLinkProperties"), ViewVariables(VVAccess.ReadOnly)]
  65. public BluespaceLockerBehaviorProperties AutoLinkProperties = new();
  66. /// <summary>
  67. /// Determines properties of this locker
  68. /// </summary>
  69. [DataField("behaviorProperties"), ViewVariables(VVAccess.ReadOnly)]
  70. public BluespaceLockerBehaviorProperties BehaviorProperties = new();
  71. }
  72. [DataDefinition]
  73. public partial record BluespaceLockerBehaviorProperties
  74. {
  75. /// <summary>
  76. /// Determines if gas will be transported.
  77. /// </summary>
  78. [DataField("transportGas"), ViewVariables(VVAccess.ReadWrite)]
  79. public bool TransportGas { get; set; } = true;
  80. /// <summary>
  81. /// Determines if entities will be transported.
  82. /// </summary>
  83. [DataField("transportEntities"), ViewVariables(VVAccess.ReadWrite)]
  84. public bool TransportEntities { get; set; } = true;
  85. /// <summary>
  86. /// Determines if entities with a Mind component will be transported.
  87. /// </summary>
  88. [DataField("transportSentient"), ViewVariables(VVAccess.ReadWrite)]
  89. public bool TransportSentient { get; set; } = true;
  90. /// <summary>
  91. /// Determines if the the locker will act on opens.
  92. /// </summary>
  93. [DataField("actOnOpen"), ViewVariables(VVAccess.ReadWrite)]
  94. public bool ActOnOpen { get; set; } = true;
  95. /// <summary>
  96. /// Determines if the the locker will act on closes.
  97. /// </summary>
  98. [DataField("actOnClose"), ViewVariables(VVAccess.ReadWrite)]
  99. public bool ActOnClose { get; set; } = true;
  100. /// <summary>
  101. /// Delay to wait after closing before transporting
  102. /// </summary>
  103. [DataField("delay"), ViewVariables(VVAccess.ReadWrite)]
  104. public float Delay { get; set; }
  105. /// <summary>
  106. /// Determines if bluespace effect is show on component init
  107. /// </summary>
  108. [DataField("bluespaceEffectOnInit"), ViewVariables(VVAccess.ReadWrite)]
  109. public bool BluespaceEffectOnInit;
  110. /// <summary>
  111. /// Defines prototype to spawn for bluespace effect
  112. /// </summary>
  113. [DataField("bluespaceEffectPrototype"), ViewVariables(VVAccess.ReadWrite)]
  114. public string BluespaceEffectPrototype { get; set; } = "EffectFlashBluespace";
  115. /// <summary>
  116. /// Determines if bluespace effect is show on teleport at the source
  117. /// </summary>
  118. [DataField("bluespaceEffectOnTeleportSource"), ViewVariables(VVAccess.ReadWrite)]
  119. public bool BluespaceEffectOnTeleportSource { get; set; }
  120. /// <summary>
  121. /// Determines if bluespace effect is show on teleport at the target
  122. /// </summary>
  123. [DataField("bluespaceEffectOnTeleportTarget"), ViewVariables(VVAccess.ReadWrite)]
  124. public bool BluespaceEffectOnTeleportTarget { get; set; }
  125. /// <summary>
  126. /// Determines the minimum interval between bluespace effects
  127. /// </summary>
  128. /// <seealso cref="BluespaceEffectPrototype"/>
  129. [DataField("bluespaceEffectMinInterval"), ViewVariables(VVAccess.ReadWrite)]
  130. public double BluespaceEffectMinInterval { get; set; } = 2;
  131. /// <summary>
  132. /// Uses left before the locker is destroyed. -1 indicates infinite
  133. /// </summary>
  134. [DataField("destroyAfterUses"), ViewVariables(VVAccess.ReadWrite)]
  135. public int DestroyAfterUses { get; set; } = -1;
  136. /// <summary>
  137. /// Minimum number of entities that must be transported to count a use for <see cref="DestroyAfterUses"/>
  138. /// </summary>
  139. [DataField("destroyAfterUsesMinItemsToCountUse"), ViewVariables(VVAccess.ReadWrite)]
  140. public int DestroyAfterUsesMinItemsToCountUse { get; set; }
  141. /// <summary>
  142. /// How to destroy the locker after it runs out of uses
  143. /// </summary>
  144. [DataField("destroyType"), ViewVariables(VVAccess.ReadWrite)]
  145. public BluespaceLockerDestroyType DestroyType { get; set; } = BluespaceLockerDestroyType.Delete;
  146. /// <summary>
  147. /// Uses left before the lockers links are cleared. -1 indicates infinite
  148. /// </summary>
  149. [DataField("clearLinksEvery"), ViewVariables(VVAccess.ReadWrite)]
  150. public int ClearLinksEvery { get; set; } = -1;
  151. /// <summary>
  152. /// Determines if cleared links have their component removed
  153. /// </summary>
  154. [DataField("clearLinksDebluespaces"), ViewVariables(VVAccess.ReadWrite)]
  155. public bool ClearLinksDebluespaces { get; set; }
  156. /// <summary>
  157. /// Links will not be valid if they're not bidirectional
  158. /// </summary>
  159. [DataField("invalidateOneWayLinks"), ViewVariables(VVAccess.ReadWrite)]
  160. public bool InvalidateOneWayLinks { get; set; }
  161. }
  162. [Flags]
  163. public enum BluespaceLockerDestroyType
  164. {
  165. Delete,
  166. DeleteComponent,
  167. Explode,
  168. }