namespace Content.Server.Storage.Components; [RegisterComponent] public sealed partial class BluespaceLockerComponent : Component { /// /// If length > 0, when something is added to the storage, it will instead be teleported to a random storage /// from the list and the other storage will be opened. /// [DataField("bluespaceLinks"), ViewVariables(VVAccess.ReadOnly)] public HashSet BluespaceLinks = new(); /// /// Each time the system attempts to get a link, it will link additional lockers to ensure the minimum amount /// are linked. /// [DataField("minBluespaceLinks"), ViewVariables(VVAccess.ReadWrite)] public uint MinBluespaceLinks; /// /// Determines if links automatically added are restricted to the same map /// [DataField("pickLinksFromSameMap"), ViewVariables(VVAccess.ReadWrite)] public bool PickLinksFromSameMap; /// /// Determines if links automatically added must have ResistLockerComponent /// [DataField("pickLinksFromResistLockers"), ViewVariables(VVAccess.ReadWrite)] public bool PickLinksFromResistLockers = true; /// /// Determines if links automatically added are restricted to being on a station /// [DataField("pickLinksFromStationGrids"), ViewVariables(VVAccess.ReadWrite)] public bool PickLinksFromStationGrids = true; /// /// Determines if links automatically added are restricted to having the same access /// [DataField("pickLinksFromSameAccess"), ViewVariables(VVAccess.ReadWrite)] public bool PickLinksFromSameAccess = true; /// /// Determines if links automatically added are restricted to existing bluespace lockers /// [DataField("pickLinksFromBluespaceLockers"), ViewVariables(VVAccess.ReadWrite)] public bool PickLinksFromBluespaceLockers; /// /// Determines if links automatically added are restricted to non-bluespace lockers /// [DataField("pickLinksFromNonBluespaceLockers"), ViewVariables(VVAccess.ReadWrite)] public bool PickLinksFromNonBluespaceLockers = true; /// /// Determines if links automatically added get the source locker set as a target /// [DataField("autoLinksBidirectional"), ViewVariables(VVAccess.ReadWrite)] public bool AutoLinksBidirectional; /// /// Determines if links automatically use /// [DataField("autoLinksUseProperties"), ViewVariables(VVAccess.ReadWrite)] public bool AutoLinksUseProperties; [DataField("usesSinceLinkClear"), ViewVariables(VVAccess.ReadWrite)] public int UsesSinceLinkClear; [DataField("bluespaceEffectMinInterval"), ViewVariables(VVAccess.ReadOnly)] public uint BluespaceEffectNextTime { get; set; } /// /// Determines properties of automatically created links /// [DataField("autoLinkProperties"), ViewVariables(VVAccess.ReadOnly)] public BluespaceLockerBehaviorProperties AutoLinkProperties = new(); /// /// Determines properties of this locker /// [DataField("behaviorProperties"), ViewVariables(VVAccess.ReadOnly)] public BluespaceLockerBehaviorProperties BehaviorProperties = new(); } [DataDefinition] public partial record BluespaceLockerBehaviorProperties { /// /// Determines if gas will be transported. /// [DataField("transportGas"), ViewVariables(VVAccess.ReadWrite)] public bool TransportGas { get; set; } = true; /// /// Determines if entities will be transported. /// [DataField("transportEntities"), ViewVariables(VVAccess.ReadWrite)] public bool TransportEntities { get; set; } = true; /// /// Determines if entities with a Mind component will be transported. /// [DataField("transportSentient"), ViewVariables(VVAccess.ReadWrite)] public bool TransportSentient { get; set; } = true; /// /// Determines if the the locker will act on opens. /// [DataField("actOnOpen"), ViewVariables(VVAccess.ReadWrite)] public bool ActOnOpen { get; set; } = true; /// /// Determines if the the locker will act on closes. /// [DataField("actOnClose"), ViewVariables(VVAccess.ReadWrite)] public bool ActOnClose { get; set; } = true; /// /// Delay to wait after closing before transporting /// [DataField("delay"), ViewVariables(VVAccess.ReadWrite)] public float Delay { get; set; } /// /// Determines if bluespace effect is show on component init /// [DataField("bluespaceEffectOnInit"), ViewVariables(VVAccess.ReadWrite)] public bool BluespaceEffectOnInit; /// /// Defines prototype to spawn for bluespace effect /// [DataField("bluespaceEffectPrototype"), ViewVariables(VVAccess.ReadWrite)] public string BluespaceEffectPrototype { get; set; } = "EffectFlashBluespace"; /// /// Determines if bluespace effect is show on teleport at the source /// [DataField("bluespaceEffectOnTeleportSource"), ViewVariables(VVAccess.ReadWrite)] public bool BluespaceEffectOnTeleportSource { get; set; } /// /// Determines if bluespace effect is show on teleport at the target /// [DataField("bluespaceEffectOnTeleportTarget"), ViewVariables(VVAccess.ReadWrite)] public bool BluespaceEffectOnTeleportTarget { get; set; } /// /// Determines the minimum interval between bluespace effects /// /// [DataField("bluespaceEffectMinInterval"), ViewVariables(VVAccess.ReadWrite)] public double BluespaceEffectMinInterval { get; set; } = 2; /// /// Uses left before the locker is destroyed. -1 indicates infinite /// [DataField("destroyAfterUses"), ViewVariables(VVAccess.ReadWrite)] public int DestroyAfterUses { get; set; } = -1; /// /// Minimum number of entities that must be transported to count a use for /// [DataField("destroyAfterUsesMinItemsToCountUse"), ViewVariables(VVAccess.ReadWrite)] public int DestroyAfterUsesMinItemsToCountUse { get; set; } /// /// How to destroy the locker after it runs out of uses /// [DataField("destroyType"), ViewVariables(VVAccess.ReadWrite)] public BluespaceLockerDestroyType DestroyType { get; set; } = BluespaceLockerDestroyType.Delete; /// /// Uses left before the lockers links are cleared. -1 indicates infinite /// [DataField("clearLinksEvery"), ViewVariables(VVAccess.ReadWrite)] public int ClearLinksEvery { get; set; } = -1; /// /// Determines if cleared links have their component removed /// [DataField("clearLinksDebluespaces"), ViewVariables(VVAccess.ReadWrite)] public bool ClearLinksDebluespaces { get; set; } /// /// Links will not be valid if they're not bidirectional /// [DataField("invalidateOneWayLinks"), ViewVariables(VVAccess.ReadWrite)] public bool InvalidateOneWayLinks { get; set; } } [Flags] public enum BluespaceLockerDestroyType { Delete, DeleteComponent, Explode, }