diff --git a/Content.Benchmarks/ComponentManagerGetAllComponents.cs b/Content.Benchmarks/ComponentManagerGetAllComponents.cs index 3b1c3e1c6d..db49d0974e 100644 --- a/Content.Benchmarks/ComponentManagerGetAllComponents.cs +++ b/Content.Benchmarks/ComponentManagerGetAllComponents.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using BenchmarkDotNet.Attributes; using Moq; using Robust.Shared.Exceptions; diff --git a/Content.Client/Atmos/GasTileOverlay.cs b/Content.Client/Atmos/GasTileOverlay.cs index ec0cb330fa..8f852d0ed1 100644 --- a/Content.Client/Atmos/GasTileOverlay.cs +++ b/Content.Client/Atmos/GasTileOverlay.cs @@ -1,25 +1,13 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Content.Client.GameObjects.EntitySystems; -using Content.Client.Utility; -using JetBrains.Annotations; -using Robust.Client.Graphics; +using Content.Client.GameObjects.EntitySystems; using Robust.Client.Graphics.ClientEye; using Robust.Client.Graphics.Drawing; using Robust.Client.Graphics.Overlays; using Robust.Client.Interfaces.Graphics; using Robust.Client.Interfaces.Graphics.ClientEye; -using Robust.Client.Interfaces.ResourceManagement; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.Map; -using Robust.Shared.Interfaces.Resources; using Robust.Shared.IoC; -using Robust.Shared.Log; -using Robust.Shared.Map; using Robust.Shared.Maths; -using Robust.Shared.Timing; -using Robust.Shared.Utility; namespace Content.Client.Atmos { diff --git a/Content.Client/Chat/ChatBox.cs b/Content.Client/Chat/ChatBox.cs index 7f3e1aa3ec..eb37c86703 100644 --- a/Content.Client/Chat/ChatBox.cs +++ b/Content.Client/Chat/ChatBox.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using Content.Shared.Chat; +using Content.Shared.Chat; using Robust.Client.Console; using Robust.Client.Graphics.Drawing; using Robust.Client.UserInterface; diff --git a/Content.Client/Chat/SpeechBubble.cs b/Content.Client/Chat/SpeechBubble.cs index 147c3a8d5a..715715d9a1 100644 --- a/Content.Client/Chat/SpeechBubble.cs +++ b/Content.Client/Chat/SpeechBubble.cs @@ -122,7 +122,7 @@ namespace Content.Client.Chat var screenPos = lowerCenter - (Width / 2, ContentHeight + _verticalOffsetAchieved); LayoutContainer.SetPosition(this, screenPos); - var height = (lowerCenter.Y - screenPos.Y).Clamp(0, ContentHeight); + var height = FloatMath.Clamp(lowerCenter.Y - screenPos.Y, 0, ContentHeight); LayoutContainer.SetSize(this, (Size.X, height)); } diff --git a/Content.Client/ClientContentIoC.cs b/Content.Client/ClientContentIoC.cs index 96c9e5a7c6..9fe86a4b73 100644 --- a/Content.Client/ClientContentIoC.cs +++ b/Content.Client/ClientContentIoC.cs @@ -8,9 +8,7 @@ using Content.Client.Sandbox; using Content.Client.UserInterface; using Content.Client.UserInterface.Stylesheets; using Content.Client.Utility; -using Content.Shared.Chemistry; using Content.Shared.Interfaces; -using Content.Shared.Interfaces.Chemistry; using Robust.Shared.IoC; namespace Content.Client diff --git a/Content.Client/Command/CommunicationsConsoleMenu.cs b/Content.Client/Command/CommunicationsConsoleMenu.cs index 0a6804264c..a04bb56edb 100644 --- a/Content.Client/Command/CommunicationsConsoleMenu.cs +++ b/Content.Client/Command/CommunicationsConsoleMenu.cs @@ -5,7 +5,6 @@ using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.IoC; using Robust.Shared.Localization; -using Robust.Shared.Log; using Robust.Shared.Maths; using Timer = Robust.Shared.Timers.Timer; diff --git a/Content.Client/Commands/DebugAiCommand.cs b/Content.Client/Commands/DebugAiCommand.cs index f5c3088215..065da01bab 100644 --- a/Content.Client/Commands/DebugAiCommand.cs +++ b/Content.Client/Commands/DebugAiCommand.cs @@ -1,10 +1,7 @@ using Content.Client.GameObjects.EntitySystems.AI; using JetBrains.Annotations; using Robust.Client.Interfaces.Console; -using Robust.Client.Player; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; namespace Content.Client.Commands { diff --git a/Content.Client/Commands/DebugCommands.cs b/Content.Client/Commands/DebugCommands.cs index 510e1e25a8..8ba7a3a975 100644 --- a/Content.Client/Commands/DebugCommands.cs +++ b/Content.Client/Commands/DebugCommands.cs @@ -1,15 +1,12 @@ using Content.Client.GameObjects.Components; using Content.Client.GameObjects.EntitySystems; using Content.Client.Interfaces; -using Content.Shared.GameObjects.Components.Markers; -using Robust.Client.Console.Commands; +using Content.Shared.GameObjects; using Robust.Client.Interfaces.Console; using Robust.Client.Interfaces.GameObjects.Components; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; -using DrawDepth = Content.Shared.GameObjects.DrawDepth; namespace Content.Client.Commands { diff --git a/Content.Client/Commands/DebugPathfindingCommand.cs b/Content.Client/Commands/DebugPathfindingCommand.cs index f181823141..9c79bec8e7 100644 --- a/Content.Client/Commands/DebugPathfindingCommand.cs +++ b/Content.Client/Commands/DebugPathfindingCommand.cs @@ -2,8 +2,6 @@ using Content.Client.GameObjects.EntitySystems.AI; using JetBrains.Annotations; using Robust.Client.Interfaces.Console; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; namespace Content.Client.Commands { diff --git a/Content.Client/EntryPoint.cs b/Content.Client/EntryPoint.cs index 837e79a79d..9a3065d77c 100644 --- a/Content.Client/EntryPoint.cs +++ b/Content.Client/EntryPoint.cs @@ -12,6 +12,8 @@ using Content.Client.UserInterface.Stylesheets; using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.Components.Cargo; using Content.Shared.GameObjects.Components.Chemistry; +using Content.Shared.GameObjects.Components.Chemistry.ChemMaster; +using Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser; using Content.Shared.GameObjects.Components.Gravity; using Content.Shared.GameObjects.Components.Markers; using Content.Shared.GameObjects.Components.Research; diff --git a/Content.Client/GameObjects/Components/Actor/CharacterInterface.cs b/Content.Client/GameObjects/Components/Actor/CharacterInterface.cs index e248993a75..c2b66a9b07 100644 --- a/Content.Client/GameObjects/Components/Actor/CharacterInterface.cs +++ b/Content.Client/GameObjects/Components/Actor/CharacterInterface.cs @@ -9,7 +9,6 @@ using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Network; using Robust.Shared.IoC; namespace Content.Client.GameObjects.Components.Actor diff --git a/Content.Client/GameObjects/Components/Atmos/GasAnalyzerBoundUserInterface.cs b/Content.Client/GameObjects/Components/Atmos/GasAnalyzerBoundUserInterface.cs index c4907bc31d..810d57182e 100644 --- a/Content.Client/GameObjects/Components/Atmos/GasAnalyzerBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Atmos/GasAnalyzerBoundUserInterface.cs @@ -1,8 +1,5 @@ using Robust.Client.GameObjects.Components.UserInterface; using Robust.Shared.GameObjects.Components.UserInterface; -using System; -using System.Collections.Generic; -using System.Text; using static Content.Shared.GameObjects.Components.SharedGasAnalyzerComponent; namespace Content.Client.GameObjects.Components.Atmos diff --git a/Content.Client/GameObjects/Components/Atmos/GasAnalyzerComponent.cs b/Content.Client/GameObjects/Components/Atmos/GasAnalyzerComponent.cs index e8b9a29700..c39e425fe7 100644 --- a/Content.Client/GameObjects/Components/Atmos/GasAnalyzerComponent.cs +++ b/Content.Client/GameObjects/Components/Atmos/GasAnalyzerComponent.cs @@ -1,6 +1,6 @@ -using Content.Client.UserInterface.Stylesheets; +using System; +using Content.Client.UserInterface.Stylesheets; using Content.Client.Utility; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; @@ -8,9 +8,6 @@ using Robust.Shared.GameObjects; using Robust.Shared.Localization; using Robust.Shared.Timing; using Robust.Shared.ViewVariables; -using System; -using System.Collections.Generic; -using System.Text; namespace Content.Client.GameObjects.Components.Atmos { diff --git a/Content.Client/GameObjects/Components/Atmos/GasAnalyzerMenu.cs b/Content.Client/GameObjects/Components/Atmos/GasAnalyzerMenu.cs index 1e06c0a9fe..b7f7bbb39e 100644 --- a/Content.Client/GameObjects/Components/Atmos/GasAnalyzerMenu.cs +++ b/Content.Client/GameObjects/Components/Atmos/GasAnalyzerMenu.cs @@ -1,19 +1,11 @@ -using System; -using Content.Client.Animations; -using Content.Client.GameObjects.EntitySystems; -using Content.Client.UserInterface.Stylesheets; +using Content.Client.UserInterface.Stylesheets; using Content.Client.Utility; -using Content.Shared.GameObjects.Components; using Content.Shared.Utility; -using Robust.Client.Animations; -using Robust.Client.Graphics; using Robust.Client.Graphics.Drawing; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; -using Robust.Shared.Animations; -using Robust.Shared.Input; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; diff --git a/Content.Client/GameObjects/Components/Cargo/CargoOrderDatabaseComponent.cs b/Content.Client/GameObjects/Components/Cargo/CargoOrderDatabaseComponent.cs index 18b729b8ca..c29e62464b 100644 --- a/Content.Client/GameObjects/Components/Cargo/CargoOrderDatabaseComponent.cs +++ b/Content.Client/GameObjects/Components/Cargo/CargoOrderDatabaseComponent.cs @@ -1,8 +1,8 @@ -using Content.Shared.GameObjects.Components.Cargo; +using System; +using System.Collections.Generic; +using Content.Shared.GameObjects.Components.Cargo; using Content.Shared.Prototypes.Cargo; using Robust.Shared.GameObjects; -using System; -using System.Collections.Generic; namespace Content.Client.GameObjects.Components.Cargo { diff --git a/Content.Client/GameObjects/Components/Cargo/GalacticMarketComponent.cs b/Content.Client/GameObjects/Components/Cargo/GalacticMarketComponent.cs index bb29dfd1d4..1311900514 100644 --- a/Content.Client/GameObjects/Components/Cargo/GalacticMarketComponent.cs +++ b/Content.Client/GameObjects/Components/Cargo/GalacticMarketComponent.cs @@ -1,9 +1,9 @@ -using Content.Shared.GameObjects.Components.Cargo; +using System; +using Content.Shared.GameObjects.Components.Cargo; using Content.Shared.Prototypes.Cargo; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Prototypes; -using System; namespace Content.Client.GameObjects.Components.Cargo { diff --git a/Content.Client/GameObjects/Components/Chemistry/ChemMaster/ChemMasterBoundUserInterface.cs b/Content.Client/GameObjects/Components/Chemistry/ChemMaster/ChemMasterBoundUserInterface.cs index 27ab3de256..1af6a39bb5 100644 --- a/Content.Client/GameObjects/Components/Chemistry/ChemMaster/ChemMasterBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Chemistry/ChemMaster/ChemMasterBoundUserInterface.cs @@ -1,13 +1,12 @@ #nullable enable -using Content.Client.GameObjects.Components.Chemistry.ChemMaster; -using Content.Shared.GameObjects.Components.Chemistry; +using Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser; using JetBrains.Annotations; using Robust.Client.GameObjects.Components.UserInterface; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.Localization; -using static Content.Shared.GameObjects.Components.Chemistry.SharedChemMasterComponent; +using static Content.Shared.GameObjects.Components.Chemistry.ChemMaster.SharedChemMasterComponent; -namespace Content.Client.GameObjects.Components.Chemistry +namespace Content.Client.GameObjects.Components.Chemistry.ChemMaster { /// /// Initializes a and updates it when new server messages are received. diff --git a/Content.Client/GameObjects/Components/Chemistry/ChemMaster/ChemMasterWindow.cs b/Content.Client/GameObjects/Components/Chemistry/ChemMaster/ChemMasterWindow.cs index 3a2dece8e9..08ec838c88 100644 --- a/Content.Client/GameObjects/Components/Chemistry/ChemMaster/ChemMasterWindow.cs +++ b/Content.Client/GameObjects/Components/Chemistry/ChemMaster/ChemMasterWindow.cs @@ -1,10 +1,8 @@ using System; -using System.Collections.Generic; using System.Linq; -using Content.Client.UserInterface; using Content.Client.UserInterface.Stylesheets; using Content.Shared.Chemistry; -using Content.Shared.GameObjects.Components.Chemistry; +using Content.Shared.GameObjects.Components.Chemistry.ChemMaster; using Robust.Client.Graphics.Drawing; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; @@ -12,10 +10,9 @@ using Robust.Client.UserInterface.CustomControls; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.IoC; using Robust.Shared.Localization; -using Robust.Shared.Log; using Robust.Shared.Maths; using Robust.Shared.Prototypes; -using static Content.Shared.GameObjects.Components.Chemistry.SharedChemMasterComponent; +using static Content.Shared.GameObjects.Components.Chemistry.ChemMaster.SharedChemMasterComponent; namespace Content.Client.GameObjects.Components.Chemistry.ChemMaster { diff --git a/Content.Client/GameObjects/Components/Chemistry/InjectorComponent.cs b/Content.Client/GameObjects/Components/Chemistry/InjectorComponent.cs index 6556989340..fe1e71bbe5 100644 --- a/Content.Client/GameObjects/Components/Chemistry/InjectorComponent.cs +++ b/Content.Client/GameObjects/Components/Chemistry/InjectorComponent.cs @@ -1,14 +1,13 @@ -using Content.Client.UserInterface; -using Content.Client.UserInterface.Stylesheets; +using Content.Client.UserInterface.Stylesheets; using Content.Client.Utility; -using Robust.Shared.Timing; +using Content.Shared.Chemistry; using Content.Shared.GameObjects.Components.Chemistry; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Shared.GameObjects; using Robust.Shared.Localization; +using Robust.Shared.Timing; using Robust.Shared.ViewVariables; -using Content.Shared.Chemistry; namespace Content.Client.GameObjects.Components.Chemistry { diff --git a/Content.Client/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserBoundUserInterface.cs b/Content.Client/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserBoundUserInterface.cs index 1aabef19dc..ccf3a0f3b9 100644 --- a/Content.Client/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserBoundUserInterface.cs @@ -1,15 +1,15 @@ using System.Collections.Generic; using System.Linq; -using Content.Shared.GameObjects.Components.Chemistry; +using Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser; using JetBrains.Annotations; using Robust.Client.GameObjects.Components.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.IoC; using Robust.Shared.Localization; -using static Content.Shared.GameObjects.Components.Chemistry.SharedReagentDispenserComponent; +using static Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser.SharedReagentDispenserComponent; -namespace Content.Client.GameObjects.Components.Chemistry +namespace Content.Client.GameObjects.Components.Chemistry.ReagentDispenser { /// /// Initializes a and updates it when new server messages are received. diff --git a/Content.Client/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserWindow.cs b/Content.Client/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserWindow.cs index 66b5fd693f..0389b9aa35 100644 --- a/Content.Client/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserWindow.cs +++ b/Content.Client/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserWindow.cs @@ -1,8 +1,7 @@ using System.Collections.Generic; -using Content.Client.UserInterface; using Content.Client.UserInterface.Stylesheets; using Content.Shared.Chemistry; -using Content.Shared.GameObjects.Components.Chemistry; +using Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser; using Robust.Client.Graphics.Drawing; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; @@ -12,9 +11,9 @@ using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; using Robust.Shared.Prototypes; -using static Content.Shared.GameObjects.Components.Chemistry.SharedReagentDispenserComponent; +using static Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser.SharedReagentDispenserComponent; -namespace Content.Client.GameObjects.Components.Chemistry +namespace Content.Client.GameObjects.Components.Chemistry.ReagentDispenser { /// /// Client-side UI used to control a diff --git a/Content.Client/GameObjects/Components/DamageableComponent.cs b/Content.Client/GameObjects/Components/DamageableComponent.cs index e19de318d3..2e42501894 100644 --- a/Content.Client/GameObjects/Components/DamageableComponent.cs +++ b/Content.Client/GameObjects/Components/DamageableComponent.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Robust.Shared.GameObjects; -namespace Content.Client.GameObjects +namespace Content.Client.GameObjects.Components { /// /// Fuck I really hate doing this diff --git a/Content.Client/GameObjects/Components/Disposal/DisposalUnitBoundUserInterface.cs b/Content.Client/GameObjects/Components/Disposal/DisposalUnitBoundUserInterface.cs index bb46144185..b2e9ab7fb9 100644 --- a/Content.Client/GameObjects/Components/Disposal/DisposalUnitBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Disposal/DisposalUnitBoundUserInterface.cs @@ -2,7 +2,6 @@ using JetBrains.Annotations; using Robust.Client.GameObjects.Components.UserInterface; using Robust.Shared.GameObjects.Components.UserInterface; -using Robust.Shared.Localization; using static Content.Shared.GameObjects.Components.Disposal.SharedDisposalUnitComponent; namespace Content.Client.GameObjects.Components.Disposal diff --git a/Content.Client/GameObjects/Components/Disposal/DisposalUnitWindow.cs b/Content.Client/GameObjects/Components/Disposal/DisposalUnitWindow.cs index 2aa013469d..62e6bd1a24 100644 --- a/Content.Client/GameObjects/Components/Disposal/DisposalUnitWindow.cs +++ b/Content.Client/GameObjects/Components/Disposal/DisposalUnitWindow.cs @@ -1,5 +1,4 @@ -using System.Runtime.CompilerServices; -using Content.Shared.GameObjects.Components.Disposal; +using Content.Shared.GameObjects.Components.Disposal; using Robust.Client.Graphics.Drawing; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; diff --git a/Content.Client/GameObjects/Components/DoAfterComponent.cs b/Content.Client/GameObjects/Components/DoAfterComponent.cs index 1b665d2a31..e751f5a996 100644 --- a/Content.Client/GameObjects/Components/DoAfterComponent.cs +++ b/Content.Client/GameObjects/Components/DoAfterComponent.cs @@ -3,8 +3,10 @@ using System; using System.Collections.Generic; using Content.Client.GameObjects.EntitySystems.DoAfter; using Content.Shared.GameObjects.Components; +using Robust.Client.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; @@ -38,6 +40,18 @@ namespace Content.Client.GameObjects.Components } } + public override void HandleMessage(ComponentMessage message, IComponent? component) + { + base.HandleMessage(message, component); + switch (message) + { + case PlayerDetachedMsg _: + _doAfters.Clear(); + CancelledDoAfters.Clear(); + break; + } + } + /// /// Remove a DoAfter without showing a cancellation graphic. /// diff --git a/Content.Client/GameObjects/Components/GUI/StrippableComponent.cs b/Content.Client/GameObjects/Components/GUI/StrippableComponent.cs new file mode 100644 index 0000000000..6fa50ded40 --- /dev/null +++ b/Content.Client/GameObjects/Components/GUI/StrippableComponent.cs @@ -0,0 +1,22 @@ +using Content.Client.GameObjects.Components.Items; +using Content.Client.Interfaces.GameObjects.Components.Interaction; +using Content.Shared.GameObjects.Components.GUI; +using Robust.Shared.GameObjects; + +namespace Content.Client.GameObjects.Components.GUI +{ + [RegisterComponent] + public class StrippableComponent : SharedStrippableComponent, IClientDraggable + { + public bool ClientCanDropOn(CanDropEventArgs eventArgs) + { + return eventArgs.Target.HasComponent() + && eventArgs.Target != eventArgs.Dragged && eventArgs.Target == eventArgs.User; + } + + public bool ClientCanDrag(CanDragEventArgs eventArgs) + { + return true; + } + } +} diff --git a/Content.Client/GameObjects/Components/Gravity/GravityGeneratorBoundUserInterface.cs b/Content.Client/GameObjects/Components/Gravity/GravityGeneratorBoundUserInterface.cs index 450e73c288..0ed0ad0a68 100644 --- a/Content.Client/GameObjects/Components/Gravity/GravityGeneratorBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Gravity/GravityGeneratorBoundUserInterface.cs @@ -1,4 +1,3 @@ -using System; using Content.Shared.GameObjects.Components.Gravity; using Robust.Client.GameObjects.Components.UserInterface; using Robust.Client.UserInterface.Controls; diff --git a/Content.Client/GameObjects/Components/HUD/Inventory/ClientInventoryComponent.cs b/Content.Client/GameObjects/Components/HUD/Inventory/ClientInventoryComponent.cs index 041f763cac..26b1086f0a 100644 --- a/Content.Client/GameObjects/Components/HUD/Inventory/ClientInventoryComponent.cs +++ b/Content.Client/GameObjects/Components/HUD/Inventory/ClientInventoryComponent.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Linq; using Content.Client.GameObjects.Components.Clothing; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Inventory; using Content.Shared.Preferences.Appearance; using Robust.Client.GameObjects; using Robust.Client.Interfaces.GameObjects.Components; @@ -10,9 +10,9 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.ViewVariables; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; -using static Content.Shared.GameObjects.SharedInventoryComponent.ClientInventoryMessage; +using static Content.Shared.GameObjects.Components.Inventory.SharedInventoryComponent.ClientInventoryMessage; -namespace Content.Client.GameObjects +namespace Content.Client.GameObjects.Components.HUD.Inventory { /// /// A character UI which shows items the user has equipped within his inventory diff --git a/Content.Client/GameObjects/Components/HUD/Inventory/HumanInventoryInterfaceController.cs b/Content.Client/GameObjects/Components/HUD/Inventory/HumanInventoryInterfaceController.cs index 01d94b822b..d08d3e1211 100644 --- a/Content.Client/GameObjects/Components/HUD/Inventory/HumanInventoryInterfaceController.cs +++ b/Content.Client/GameObjects/Components/HUD/Inventory/HumanInventoryInterfaceController.cs @@ -1,4 +1,6 @@ -using Content.Client.Utility; +using System.Collections.Generic; +using Content.Client.UserInterface; +using Content.Client.Utility; using JetBrains.Annotations; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.UserInterface; @@ -9,10 +11,8 @@ using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; -using Content.Client.UserInterface; -using System.Collections.Generic; -namespace Content.Client.GameObjects +namespace Content.Client.GameObjects.Components.HUD.Inventory { // Dynamically instantiated by ClientInventoryComponent. [UsedImplicitly] diff --git a/Content.Client/GameObjects/Components/HUD/Inventory/InventoryInterfaceController.cs b/Content.Client/GameObjects/Components/HUD/Inventory/InventoryInterfaceController.cs index 091ca4d097..12cf3375c2 100644 --- a/Content.Client/GameObjects/Components/HUD/Inventory/InventoryInterfaceController.cs +++ b/Content.Client/GameObjects/Components/HUD/Inventory/InventoryInterfaceController.cs @@ -8,7 +8,7 @@ using Robust.Shared.Input; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; -namespace Content.Client.GameObjects +namespace Content.Client.GameObjects.Components.HUD.Inventory { public abstract class InventoryInterfaceController : IDisposable { diff --git a/Content.Client/GameObjects/Components/HUD/Inventory/StrippableBoundUserInterface.cs b/Content.Client/GameObjects/Components/HUD/Inventory/StrippableBoundUserInterface.cs new file mode 100644 index 0000000000..afd87e0e06 --- /dev/null +++ b/Content.Client/GameObjects/Components/HUD/Inventory/StrippableBoundUserInterface.cs @@ -0,0 +1,81 @@ +using System.Collections.Generic; +using Content.Client.UserInterface; +using Content.Shared.GameObjects.Components.GUI; +using Content.Shared.GameObjects.Components.Inventory; +using JetBrains.Annotations; +using Robust.Client.GameObjects.Components.UserInterface; +using Robust.Shared.GameObjects.Components.UserInterface; +using Robust.Shared.ViewVariables; +using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; + +namespace Content.Client.GameObjects.Components.HUD.Inventory +{ + [UsedImplicitly] + public class StrippableBoundUserInterface : BoundUserInterface + { + public Dictionary Inventory { get; private set; } + public Dictionary Hands { get; private set; } + + [ViewVariables] + private StrippingMenu _strippingMenu; + + public StrippableBoundUserInterface(ClientUserInterfaceComponent owner, object uiKey) : base(owner, uiKey) + { + } + + protected override void Open() + { + base.Open(); + + _strippingMenu = new StrippingMenu($"{Owner.Owner.Name}'s inventory"); + _strippingMenu.OpenCentered(); + UpdateMenu(); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (!disposing) return; + _strippingMenu.Dispose(); + + _strippingMenu.Close(); + } + + private void UpdateMenu() + { + if (_strippingMenu == null) return; + + _strippingMenu.ClearButtons(); + + if(Inventory != null) + foreach (var (slot, name) in Inventory) + { + _strippingMenu.AddButton(EquipmentSlotDefines.SlotNames[slot], name, (ev) => + { + SendMessage(new StrippingInventoryButtonPressed(slot)); + }); + } + + if(Hands != null) + foreach (var (hand, name) in Hands) + { + _strippingMenu.AddButton(hand, name, (ev) => + { + SendMessage(new StrippingHandButtonPressed(hand)); + }); + } + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + if (!(state is StrippingBoundUserInterfaceState stripState)) return; + + Inventory = stripState.Inventory; + Hands = stripState.Hands; + + UpdateMenu(); + } + } +} diff --git a/Content.Client/GameObjects/Components/IconSmoothing/IconSmoothComponent.cs b/Content.Client/GameObjects/Components/IconSmoothing/IconSmoothComponent.cs index 54d2a99397..7515d40d51 100644 --- a/Content.Client/GameObjects/Components/IconSmoothing/IconSmoothComponent.cs +++ b/Content.Client/GameObjects/Components/IconSmoothing/IconSmoothComponent.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; using Content.Client.GameObjects.EntitySystems; using JetBrains.Annotations; using Robust.Client.Interfaces.GameObjects.Components; diff --git a/Content.Client/GameObjects/Components/Instruments/InstrumentComponent.cs b/Content.Client/GameObjects/Components/Instruments/InstrumentComponent.cs index 69d364fd5f..eeae34cbde 100644 --- a/Content.Client/GameObjects/Components/Instruments/InstrumentComponent.cs +++ b/Content.Client/GameObjects/Components/Instruments/InstrumentComponent.cs @@ -4,16 +4,16 @@ using System.Collections.Generic; using System.Linq; using Content.Shared.GameObjects.Components.Instruments; using Content.Shared.Physics; -using Robust.Shared.GameObjects; using Robust.Client.Audio.Midi; +using Robust.Shared.Audio.Midi; +using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Players; using Robust.Shared.Serialization; +using Robust.Shared.Timers; using Robust.Shared.ViewVariables; -using MidiEvent = Robust.Shared.Audio.Midi.MidiEvent; -using Timer = Robust.Shared.Timers.Timer; namespace Content.Client.GameObjects.Components.Instruments { diff --git a/Content.Client/GameObjects/Components/Interactable/MultiToolComponent.cs b/Content.Client/GameObjects/Components/Interactable/MultiToolComponent.cs index 5eb67e8113..70de623621 100644 --- a/Content.Client/GameObjects/Components/Interactable/MultiToolComponent.cs +++ b/Content.Client/GameObjects/Components/Interactable/MultiToolComponent.cs @@ -1,12 +1,10 @@ -using System; -using Content.Client.UserInterface.Stylesheets; +using Content.Client.UserInterface.Stylesheets; using Content.Client.Utility; using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Interactable; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Shared.GameObjects; -using Robust.Shared.Localization; using Robust.Shared.Serialization; using Robust.Shared.Timing; using Robust.Shared.ViewVariables; diff --git a/Content.Client/GameObjects/Components/Items/HandsComponent.cs b/Content.Client/GameObjects/Components/Items/HandsComponent.cs index 0a024e4195..daa03d74e1 100644 --- a/Content.Client/GameObjects/Components/Items/HandsComponent.cs +++ b/Content.Client/GameObjects/Components/Items/HandsComponent.cs @@ -23,6 +23,7 @@ namespace Content.Client.GameObjects.Components.Items [Dependency] private readonly IGameHud _gameHud = default!; #pragma warning restore 649 + /// private readonly List _hands = new List(); [ViewVariables] public IReadOnlyList Hands => _hands; diff --git a/Content.Client/GameObjects/Components/Items/ItemStatusComponent.cs b/Content.Client/GameObjects/Components/Items/ItemStatusComponent.cs index 7d4562ce02..0a21bd8e43 100644 --- a/Content.Client/GameObjects/Components/Items/ItemStatusComponent.cs +++ b/Content.Client/GameObjects/Components/Items/ItemStatusComponent.cs @@ -1,6 +1,6 @@ using Robust.Shared.GameObjects; -namespace Content.Client.GameObjects +namespace Content.Client.GameObjects.Components.Items { [RegisterComponent] public class ItemStatusComponent : Component diff --git a/Content.Client/GameObjects/Components/Kitchen/MicrowaveBoundUserInterface.cs b/Content.Client/GameObjects/Components/Kitchen/MicrowaveBoundUserInterface.cs index 4fb4c8ce9f..174b21e5b6 100644 --- a/Content.Client/GameObjects/Components/Kitchen/MicrowaveBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Kitchen/MicrowaveBoundUserInterface.cs @@ -1,21 +1,20 @@ using System; -using Robust.Client.GameObjects.Components.UserInterface; -using Content.Shared.Kitchen; -using Robust.Shared.GameObjects.Components.UserInterface; -using Robust.Shared.IoC; -using Robust.Shared.Prototypes; -using Content.Shared.Chemistry; -using Robust.Shared.GameObjects; using System.Collections.Generic; -using Robust.Shared.Interfaces.GameObjects; +using Content.Shared.Chemistry; +using Content.Shared.Kitchen; using Robust.Client.GameObjects; +using Robust.Client.GameObjects.Components.UserInterface; using Robust.Client.Graphics.Drawing; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.UserInterface; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; - +using Robust.Shared.Prototypes; namespace Content.Client.GameObjects.Components.Kitchen { diff --git a/Content.Client/GameObjects/Components/Kitchen/MicrowaveVisualizer.cs b/Content.Client/GameObjects/Components/Kitchen/MicrowaveVisualizer.cs index 63ecab02cc..ab90668e24 100644 --- a/Content.Client/GameObjects/Components/Kitchen/MicrowaveVisualizer.cs +++ b/Content.Client/GameObjects/Components/Kitchen/MicrowaveVisualizer.cs @@ -7,7 +7,6 @@ using Robust.Client.Interfaces.GameObjects.Components; using Robust.Shared.Audio; using Robust.Shared.Log; - namespace Content.Client.GameObjects.Components.Kitchen { public sealed class MicrowaveVisualizer : AppearanceVisualizer diff --git a/Content.Client/GameObjects/Components/MagicMirrorBoundUserInterface.cs b/Content.Client/GameObjects/Components/MagicMirrorBoundUserInterface.cs index 8a6e1667e2..aea3434e61 100644 --- a/Content.Client/GameObjects/Components/MagicMirrorBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/MagicMirrorBoundUserInterface.cs @@ -1,6 +1,5 @@ using System; using System.Linq; -using Content.Client.UserInterface; using Content.Client.UserInterface.Stylesheets; using Content.Shared.Preferences.Appearance; using JetBrains.Annotations; @@ -244,7 +243,7 @@ namespace Content.Client.GameObjects.Components if (int.TryParse(ev.Text, out var result)) { - result = result.Clamp(0, byte.MaxValue); + result = FloatMath.Clamp(result, 0, byte.MaxValue); _ignoreEvents = true; _colorValue = (byte) result; diff --git a/Content.Client/GameObjects/Components/Mobs/CameraRecoilComponent.cs b/Content.Client/GameObjects/Components/Mobs/CameraRecoilComponent.cs index 9486ba6e83..68288ff66a 100644 --- a/Content.Client/GameObjects/Components/Mobs/CameraRecoilComponent.cs +++ b/Content.Client/GameObjects/Components/Mobs/CameraRecoilComponent.cs @@ -2,7 +2,6 @@ using Content.Shared.GameObjects.Components.Mobs; using Robust.Client.GameObjects; using Robust.Shared.GameObjects; -using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.Log; using Robust.Shared.Maths; diff --git a/Content.Client/GameObjects/Components/Mobs/ClientOverlayEffectsComponent.cs b/Content.Client/GameObjects/Components/Mobs/ClientOverlayEffectsComponent.cs index 46d5eb5872..c294fa68cd 100644 --- a/Content.Client/GameObjects/Components/Mobs/ClientOverlayEffectsComponent.cs +++ b/Content.Client/GameObjects/Components/Mobs/ClientOverlayEffectsComponent.cs @@ -1,13 +1,11 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Reflection; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.Interfaces; using Robust.Client.GameObjects; using Robust.Client.Graphics.Overlays; using Robust.Client.Interfaces.Graphics.Overlays; -using Robust.Client.Player; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; @@ -15,7 +13,6 @@ using Robust.Shared.Interfaces.Reflection; using Robust.Shared.IoC; using Robust.Shared.Log; using Robust.Shared.Players; -using Robust.Shared.Utility; using Robust.Shared.ViewVariables; namespace Content.Client.GameObjects.Components.Mobs diff --git a/Content.Client/GameObjects/Components/Mobs/ClientStatusEffectsComponent.cs b/Content.Client/GameObjects/Components/Mobs/ClientStatusEffectsComponent.cs index 68925253c4..926e6a5c46 100644 --- a/Content.Client/GameObjects/Components/Mobs/ClientStatusEffectsComponent.cs +++ b/Content.Client/GameObjects/Components/Mobs/ClientStatusEffectsComponent.cs @@ -152,7 +152,7 @@ namespace Content.Client.GameObjects.Components.Mobs var progress = (_gameTiming.CurTime - start).TotalSeconds / length; var ratio = (progress <= 1 ? (1 - progress) : (_gameTiming.CurTime - end).TotalSeconds * -5); - cooldownGraphic.Progress = (float)ratio.Clamp(-1, 1); + cooldownGraphic.Progress = FloatMath.Clamp((float)ratio, -1, 1); cooldownGraphic.Visible = ratio > -1f; } } diff --git a/Content.Client/GameObjects/Components/Mobs/CombatModeComponent.cs b/Content.Client/GameObjects/Components/Mobs/CombatModeComponent.cs index 4e08edbd12..bcedfa8487 100644 --- a/Content.Client/GameObjects/Components/Mobs/CombatModeComponent.cs +++ b/Content.Client/GameObjects/Components/Mobs/CombatModeComponent.cs @@ -1,13 +1,10 @@ -using System; -using Content.Client.UserInterface; +using Content.Client.UserInterface; using Content.Shared.GameObjects.Components.Mobs; using Robust.Client.GameObjects; using Robust.Client.Player; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Network; using Robust.Shared.IoC; -using Robust.Shared.Players; namespace Content.Client.GameObjects.Components.Mobs { diff --git a/Content.Client/GameObjects/Components/Mobs/DamageStateVisualizer.cs b/Content.Client/GameObjects/Components/Mobs/DamageStateVisualizer.cs index 556e066e1f..83a3e4f70c 100644 --- a/Content.Client/GameObjects/Components/Mobs/DamageStateVisualizer.cs +++ b/Content.Client/GameObjects/Components/Mobs/DamageStateVisualizer.cs @@ -1,12 +1,11 @@ using System.Collections.Generic; +using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Mobs; using JetBrains.Annotations; using Robust.Client.GameObjects; using Robust.Client.Interfaces.GameObjects.Components; -using Robust.Shared.GameObjects; using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; -using DrawDepth = Content.Shared.GameObjects.DrawDepth; namespace Content.Client.GameObjects.Components.Mobs { diff --git a/Content.Client/GameObjects/Components/Observer/GhostComponent.cs b/Content.Client/GameObjects/Components/Observer/GhostComponent.cs index 611476f9be..e0f2407a89 100644 --- a/Content.Client/GameObjects/Components/Observer/GhostComponent.cs +++ b/Content.Client/GameObjects/Components/Observer/GhostComponent.cs @@ -4,7 +4,6 @@ using Robust.Client.GameObjects; using Robust.Client.Player; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Network; using Robust.Shared.IoC; using Robust.Shared.ViewVariables; diff --git a/Content.Client/GameObjects/Components/Paper/PaperBoundUserInterface.cs b/Content.Client/GameObjects/Components/Paper/PaperBoundUserInterface.cs index b064d7519c..87a609f89c 100644 --- a/Content.Client/GameObjects/Components/Paper/PaperBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Paper/PaperBoundUserInterface.cs @@ -3,7 +3,7 @@ using Robust.Client.GameObjects.Components.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Shared.GameObjects.Components.UserInterface; -namespace Content.Client.GameObjects.Components +namespace Content.Client.GameObjects.Components.Paper { public class PaperBoundUserInterface : BoundUserInterface { diff --git a/Content.Client/GameObjects/Components/Paper/PaperWindow.cs b/Content.Client/GameObjects/Components/Paper/PaperWindow.cs index 2762625832..d2ac5dde08 100644 --- a/Content.Client/GameObjects/Components/Paper/PaperWindow.cs +++ b/Content.Client/GameObjects/Components/Paper/PaperWindow.cs @@ -4,7 +4,7 @@ using Robust.Client.UserInterface.CustomControls; using Robust.Shared.Maths; using Robust.Shared.Utility; -namespace Content.Client.GameObjects.Components +namespace Content.Client.GameObjects.Components.Paper { public class PaperWindow : SS14Window { diff --git a/Content.Client/GameObjects/Components/Pointing/RoguePointingArrowVisualizer.cs b/Content.Client/GameObjects/Components/Pointing/RoguePointingArrowVisualizer.cs index 97de9d0b9f..325147b76a 100644 --- a/Content.Client/GameObjects/Components/Pointing/RoguePointingArrowVisualizer.cs +++ b/Content.Client/GameObjects/Components/Pointing/RoguePointingArrowVisualizer.cs @@ -1,5 +1,4 @@ using System; -using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Pointing; using JetBrains.Annotations; using Robust.Client.Animations; diff --git a/Content.Client/GameObjects/Components/Power/ApcBoundUserInterface.cs b/Content.Client/GameObjects/Components/Power/ApcBoundUserInterface.cs index d240cc0c6c..616997820e 100644 --- a/Content.Client/GameObjects/Components/Power/ApcBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Power/ApcBoundUserInterface.cs @@ -1,5 +1,4 @@ using System; -using Content.Client.UserInterface; using Content.Client.UserInterface.Stylesheets; using Content.Shared.GameObjects.Components.Power; using Robust.Client.GameObjects.Components.UserInterface; diff --git a/Content.Client/GameObjects/Components/Power/SolarControlConsoleBoundUserInterface.cs b/Content.Client/GameObjects/Components/Power/SolarControlConsoleBoundUserInterface.cs index 88ce121443..17ce456aff 100644 --- a/Content.Client/GameObjects/Components/Power/SolarControlConsoleBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Power/SolarControlConsoleBoundUserInterface.cs @@ -1,6 +1,4 @@ using System; -using Content.Client.UserInterface; -using Content.Client.UserInterface.Stylesheets; using Content.Shared.GameObjects.Components.Power; using Robust.Client.GameObjects.Components.UserInterface; using Robust.Client.Graphics.Drawing; diff --git a/Content.Client/GameObjects/Components/RadiatingLightComponent.cs b/Content.Client/GameObjects/Components/RadiatingLightComponent.cs index 76b57f2fb4..9cfa272136 100644 --- a/Content.Client/GameObjects/Components/RadiatingLightComponent.cs +++ b/Content.Client/GameObjects/Components/RadiatingLightComponent.cs @@ -4,7 +4,6 @@ using Robust.Client.GameObjects; using Robust.Client.GameObjects.Components.Animations; using Robust.Shared.Animations; using Robust.Shared.GameObjects; -using Robust.Shared.Maths; namespace Content.Client.GameObjects.Components { diff --git a/Content.Client/GameObjects/Components/Sound/LoopingSoundComponent.cs b/Content.Client/GameObjects/Components/Sound/LoopingSoundComponent.cs index 6c6473a3f1..f521c0c3a7 100644 --- a/Content.Client/GameObjects/Components/Sound/LoopingSoundComponent.cs +++ b/Content.Client/GameObjects/Components/Sound/LoopingSoundComponent.cs @@ -4,14 +4,12 @@ using Content.Shared.Physics; using Robust.Client.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Players; using Robust.Shared.Serialization; using Robust.Shared.Timers; -using Robust.Shared.Utility; namespace Content.Client.GameObjects.Components.Sound { diff --git a/Content.Client/GameObjects/Components/StationEvents/RadiationPulseComponent.cs b/Content.Client/GameObjects/Components/StationEvents/RadiationPulseComponent.cs new file mode 100644 index 0000000000..23d57a957c --- /dev/null +++ b/Content.Client/GameObjects/Components/StationEvents/RadiationPulseComponent.cs @@ -0,0 +1,24 @@ +#nullable enable +using System; +using Content.Shared.GameObjects.Components; +using Robust.Shared.GameObjects; + +namespace Content.Client.GameObjects.Components.StationEvents +{ + [RegisterComponent] + public sealed class RadiationPulseComponent : SharedRadiationPulseComponent + { + public TimeSpan EndTime { get; private set; } + + public override void HandleComponentState(ComponentState? curState, ComponentState? nextState) + { + base.HandleComponentState(curState, nextState); + if (!(curState is RadiationPulseMessage state)) + { + return; + } + + EndTime = state.EndTime; + } + } +} \ No newline at end of file diff --git a/Content.Client/GameObjects/Components/Storage/ClientStorageComponent.cs b/Content.Client/GameObjects/Components/Storage/ClientStorageComponent.cs index affff8473d..4c5d5dce36 100644 --- a/Content.Client/GameObjects/Components/Storage/ClientStorageComponent.cs +++ b/Content.Client/GameObjects/Components/Storage/ClientStorageComponent.cs @@ -1,14 +1,14 @@ using System; using System.Collections.Generic; using Content.Client.GameObjects.Components.Items; -using Content.Shared.GameObjects.Components.Storage; using Content.Client.Interfaces.GameObjects.Components.Interaction; +using Content.Shared.GameObjects.Components.Storage; using Robust.Client.Graphics.Drawing; using Robust.Client.Interfaces.GameObjects.Components; +using Robust.Client.Player; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; -using Robust.Client.Player; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; diff --git a/Content.Client/GameObjects/Components/Trigger/TimerTriggerVisualizer.cs b/Content.Client/GameObjects/Components/Trigger/TimerTriggerVisualizer.cs index 76bce4a420..b31af5f4b7 100644 --- a/Content.Client/GameObjects/Components/Trigger/TimerTriggerVisualizer.cs +++ b/Content.Client/GameObjects/Components/Trigger/TimerTriggerVisualizer.cs @@ -1,5 +1,5 @@ using System; -using Content.Shared.GameObjects.Components.Triggers; +using Content.Shared.GameObjects.Components.Trigger; using Robust.Client.Animations; using Robust.Client.GameObjects; using Robust.Client.GameObjects.Components.Animations; @@ -8,7 +8,7 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; -namespace Content.Client.GameObjects.Components.Doors +namespace Content.Client.GameObjects.Components.Trigger { public class TimerTriggerVisualizer : AppearanceVisualizer { diff --git a/Content.Client/GameObjects/Components/VendingMachines/VendingMachineVisualizer.cs b/Content.Client/GameObjects/Components/VendingMachines/VendingMachineVisualizer.cs index 0f052ef173..1202401d27 100644 --- a/Content.Client/GameObjects/Components/VendingMachines/VendingMachineVisualizer.cs +++ b/Content.Client/GameObjects/Components/VendingMachines/VendingMachineVisualizer.cs @@ -1,44 +1,109 @@ using System; +using System.Collections.Generic; +using JetBrains.Annotations; using Robust.Client.Animations; using Robust.Client.GameObjects; using Robust.Client.GameObjects.Components.Animations; using Robust.Client.Interfaces.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; using static Content.Shared.GameObjects.Components.VendingMachines.SharedVendingMachineComponent; namespace Content.Client.GameObjects.Components.VendingMachines { - public class VendingMachineVisualizer : AppearanceVisualizer + [UsedImplicitly] + public sealed class VendingMachineVisualizer : AppearanceVisualizer { + // TODO: Should default to off or broken if damaged + // + // TODO: The length of these animations is supposed to be dictated // by the vending machine's pack prototype's `AnimationDuration` // but we have no good way of passing that data from the server // to the client at the moment. Rework Visualizers? - private const string DeniedAnimationKey = "deny"; - private const string EjectAnimationKey = "eject"; - private Animation _deniedAnimation; - private Animation _ejectAnimation; + private Dictionary _baseStates; + + private static readonly Dictionary LayerMap = + new Dictionary + { + {"off", VendingMachineVisualLayers.Unlit}, + {"screen", VendingMachineVisualLayers.Screen}, + {"normal", VendingMachineVisualLayers.Base}, + {"normal-unshaded", VendingMachineVisualLayers.BaseUnshaded}, + {"eject", VendingMachineVisualLayers.Base}, + {"eject-unshaded", VendingMachineVisualLayers.BaseUnshaded}, + {"deny", VendingMachineVisualLayers.Base}, + {"deny-unshaded", VendingMachineVisualLayers.BaseUnshaded}, + {"broken", VendingMachineVisualLayers.Unlit}, + }; + + private Dictionary _animations = new Dictionary(); public override void LoadData(YamlMappingNode node) { base.LoadData(node); - _deniedAnimation = new Animation {Length = TimeSpan.FromSeconds(1.2f)}; + + _baseStates = new Dictionary { - var flick = new AnimationTrackSpriteFlick(); - _deniedAnimation.AnimationTracks.Add(flick); - flick.LayerKey = VendingMachineVisualLayers.Base; - flick.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame("deny", 0f)); + {"off", true}, + }; + + // Used a dictionary so the yaml can adhere to the style-guide and the texture states can be clear + var states = new Dictionary + { + {"screen", "screen"}, + {"normal", "normal"}, + {"normalUnshaded", "normal-unshaded"}, + {"eject", "eject"}, + {"ejectUnshaded", "eject-unshaded"}, + {"deny", "deny"}, + {"denyUnshaded", "deny-unshaded"}, + {"broken", "broken"}, + {"brokenUnshaded", "broken-unshaded"}, + }; + + foreach (var (state, textureState) in states) + { + if (!node.TryGetNode(state, out var yamlNode)) + { + _baseStates[textureState] = false; + continue; + } + + _baseStates.Add(textureState, yamlNode.AsBool()); } - _ejectAnimation = new Animation {Length = TimeSpan.FromSeconds(1.2f)}; + if (_baseStates["deny"]) { - var flick = new AnimationTrackSpriteFlick(); - _ejectAnimation.AnimationTracks.Add(flick); - flick.LayerKey = VendingMachineVisualLayers.Base; - flick.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame("eject", 0f)); + InitializeAnimation("deny"); } + + if (_baseStates["deny-unshaded"]) + { + InitializeAnimation("deny-unshaded", true); + } + + if (_baseStates["eject"]) + { + InitializeAnimation("eject"); + } + + if (_baseStates["eject-unshaded"]) + { + InitializeAnimation("eject-unshaded", true); + } + } + + private void InitializeAnimation(string key, bool unshaded = false) + { + _animations.Add(key, new Animation {Length = TimeSpan.FromSeconds(1.2f)}); + + var flick = new AnimationTrackSpriteFlick(); + _animations[key].AnimationTracks.Add(flick); + flick.LayerKey = unshaded ? VendingMachineVisualLayers.BaseUnshaded : VendingMachineVisualLayers.Base; + flick.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame(key, 0f)); } public override void InitializeEntity(IEntity entity) @@ -51,6 +116,16 @@ namespace Content.Client.GameObjects.Components.VendingMachines } } + private void HideLayers(ISpriteComponent spriteComponent) + { + foreach (var layer in spriteComponent.AllLayers) + { + layer.Visible = false; + } + + spriteComponent.LayerSetVisible(VendingMachineVisualLayers.Unlit, true); + } + public override void OnChangeData(AppearanceComponent component) { var sprite = component.Owner.GetComponent(); @@ -59,40 +134,81 @@ namespace Content.Client.GameObjects.Components.VendingMachines { state = VendingMachineVisualState.Normal; } + + // Hide last state + HideLayers(sprite); + ActivateState(sprite, "off"); switch (state) { case VendingMachineVisualState.Normal: - sprite.LayerSetState(VendingMachineVisualLayers.Base, "normal"); + ActivateState(sprite, "screen"); + ActivateState(sprite, "normal-unshaded"); + ActivateState(sprite, "normal"); break; + case VendingMachineVisualState.Off: - sprite.LayerSetState(VendingMachineVisualLayers.Base, "off"); break; + case VendingMachineVisualState.Broken: - sprite.LayerSetState(VendingMachineVisualLayers.Base, "broken"); + ActivateState(sprite, "broken-unshaded"); + ActivateState(sprite, "broken"); + break; case VendingMachineVisualState.Deny: - if (!animPlayer.HasRunningAnimation(DeniedAnimationKey)) - { - animPlayer.Play(_deniedAnimation, DeniedAnimationKey); - } + ActivateState(sprite, "screen"); + ActivateAnimation(sprite, animPlayer, "deny-unshaded"); + ActivateAnimation(sprite, animPlayer, "deny"); break; case VendingMachineVisualState.Eject: - if (!animPlayer.HasRunningAnimation(EjectAnimationKey)) - { - animPlayer.Play(_ejectAnimation, EjectAnimationKey); - } + ActivateState(sprite, "screen"); + ActivateAnimation(sprite, animPlayer, "eject-unshaded"); + ActivateAnimation(sprite, animPlayer, "eject"); break; default: throw new ArgumentOutOfRangeException(); } } + + // Helper methods just to avoid all of that hard-to-read-indented code + private void ActivateState(ISpriteComponent spriteComponent, string stateId) + { + // No state for it on the rsi :( + if (!_baseStates[stateId]) + { + return; + } + var stateLayer = LayerMap[stateId]; + spriteComponent.LayerSetVisible(stateLayer, true); + spriteComponent.LayerSetState(stateLayer, stateId); + } + + private void ActivateAnimation(ISpriteComponent spriteComponent, AnimationPlayerComponent animationPlayer, string key) + { + if (!_animations.TryGetValue(key, out var animation)) + { + return; + } + + if (!animationPlayer.HasRunningAnimation(key)) + { + spriteComponent.LayerSetVisible(LayerMap[key], true); + animationPlayer.Play(animation, key); + } + } + public enum VendingMachineVisualLayers { + // Off / Broken. The other layers will overlay this if the machine is on. + Unlit, + // Normal / Deny / Eject Base, + BaseUnshaded, + // Screens that are persistent (where the machine is not off or broken) + Screen, } } } diff --git a/Content.Client/GameObjects/Components/Weapons/FlashableComponent.cs b/Content.Client/GameObjects/Components/Weapons/FlashableComponent.cs index 05e6305a59..18047a8f85 100644 --- a/Content.Client/GameObjects/Components/Weapons/FlashableComponent.cs +++ b/Content.Client/GameObjects/Components/Weapons/FlashableComponent.cs @@ -141,7 +141,7 @@ namespace Content.Client.GameObjects.Components.Weapons const float xOffset = 0.0f; // Overkill but easy to adjust if you want to mess around with the design - var result = (float) Math.Clamp(slope * (float) Math.Pow(ratio - xOffset, exponent) + yOffset, 0.0, 1.0); + var result = (float) FloatMath.Clamp(slope * (float) Math.Pow(ratio - xOffset, exponent) + yOffset, 0.0, 1.0); DebugTools.Assert(!float.IsNaN(result)); return result; } diff --git a/Content.Client/GameObjects/Components/Wires/WiresMenu.cs b/Content.Client/GameObjects/Components/Wires/WiresMenu.cs index 53e1a32064..a3fcda4861 100644 --- a/Content.Client/GameObjects/Components/Wires/WiresMenu.cs +++ b/Content.Client/GameObjects/Components/Wires/WiresMenu.cs @@ -5,7 +5,6 @@ using Content.Client.UserInterface.Stylesheets; using Content.Client.Utility; using Content.Shared.GameObjects.Components; using Robust.Client.Animations; -using Robust.Client.Graphics; using Robust.Client.Graphics.Drawing; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.UserInterface; diff --git a/Content.Client/GameObjects/EntitySystems/CameraRecoilSystem.cs b/Content.Client/GameObjects/EntitySystems/CameraRecoilSystem.cs index 2d5af8c103..137dc2a5e7 100644 --- a/Content.Client/GameObjects/EntitySystems/CameraRecoilSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/CameraRecoilSystem.cs @@ -1,25 +1,16 @@ using Content.Client.GameObjects.Components.Mobs; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Client.GameObjects.EntitySystems { public sealed class CameraRecoilSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(CameraRecoilComponent)); - } - public override void FrameUpdate(float frameTime) { base.FrameUpdate(frameTime); - foreach (var entity in RelevantEntities) + foreach (var recoil in EntityManager.ComponentManager.EntityQuery()) { - var recoil = entity.GetComponent(); recoil.FrameUpdate(frameTime); } } diff --git a/Content.Client/GameObjects/EntitySystems/CharacterInterfaceSystem.cs b/Content.Client/GameObjects/EntitySystems/CharacterInterfaceSystem.cs index 9b66217612..a46f038e67 100644 --- a/Content.Client/GameObjects/EntitySystems/CharacterInterfaceSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/CharacterInterfaceSystem.cs @@ -1,11 +1,9 @@ using Content.Client.GameObjects.Components.Actor; using Content.Client.UserInterface; using Content.Shared.Input; -using Robust.Client.GameObjects.EntitySystems; using Robust.Client.Player; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.IoC; diff --git a/Content.Client/GameObjects/EntitySystems/ClientInventorySystem.cs b/Content.Client/GameObjects/EntitySystems/ClientInventorySystem.cs index ccfb3ac7d0..80cd1fbb0f 100644 --- a/Content.Client/GameObjects/EntitySystems/ClientInventorySystem.cs +++ b/Content.Client/GameObjects/EntitySystems/ClientInventorySystem.cs @@ -1,10 +1,9 @@ +using Content.Client.GameObjects.Components.HUD.Inventory; using Content.Client.UserInterface; using Content.Shared.Input; -using Robust.Client.GameObjects.EntitySystems; using Robust.Client.Player; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.IoC; diff --git a/Content.Client/GameObjects/EntitySystems/CombatModeSystem.cs b/Content.Client/GameObjects/EntitySystems/CombatModeSystem.cs index 1ea36b6ae0..9daa25095b 100644 --- a/Content.Client/GameObjects/EntitySystems/CombatModeSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/CombatModeSystem.cs @@ -1,25 +1,16 @@ using Content.Client.GameObjects.Components.Mobs; using Content.Client.UserInterface; -using Content.Client.Utility; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.EntitySystemMessages; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Input; using JetBrains.Annotations; using Robust.Client.GameObjects; -using Robust.Client.GameObjects.EntitySystems; -using Robust.Client.Graphics.Drawing; -using Robust.Client.Graphics.Overlays; -using Robust.Client.Interfaces.Graphics.Overlays; -using Robust.Client.Interfaces.Input; using Robust.Client.Player; -using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; -using Robust.Shared.Maths; using Robust.Shared.Players; -using static Content.Client.StaticIoC; namespace Content.Client.GameObjects.EntitySystems { diff --git a/Content.Client/GameObjects/EntitySystems/ConstructionSystem.cs b/Content.Client/GameObjects/EntitySystems/ConstructionSystem.cs index 700393b9c5..09a4beea42 100644 --- a/Content.Client/GameObjects/EntitySystems/ConstructionSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/ConstructionSystem.cs @@ -3,6 +3,7 @@ using Content.Client.Construction; using Content.Client.GameObjects.Components.Construction; using Content.Client.UserInterface; using Content.Shared.Construction; +using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Input; using JetBrains.Annotations; using Robust.Client.GameObjects; @@ -21,7 +22,7 @@ namespace Content.Client.GameObjects.EntitySystems /// The client-side implementation of the construction system, which is used for constructing entities in game. /// [UsedImplicitly] - public class ConstructionSystem : Shared.GameObjects.EntitySystems.SharedConstructionSystem + public class ConstructionSystem : SharedConstructionSystem { #pragma warning disable 649 [Dependency] private readonly IGameHud _gameHud; diff --git a/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterGui.cs b/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterGui.cs index b785251aa9..b46b359ff4 100644 --- a/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterGui.cs +++ b/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterGui.cs @@ -20,20 +20,20 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter { [Dependency] private readonly IEyeManager _eyeManager = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; - + private Dictionary _doAfterControls = new Dictionary(); private Dictionary _doAfterBars = new Dictionary(); - + // We'll store cancellations for a little bit just so we can flash the graphic to indicate it's cancelled private Dictionary _cancelledDoAfters = new Dictionary(); public IEntity? AttachedEntity { get; set; } private ScreenCoordinates _playerPosition; - + // This behavior probably shouldn't be happening; so for whatever reason the control position is set the frame after // I got NFI why because I don't know the UI internals private bool _firstDraw = true; - + public DoAfterGui() { IoCManager.InjectDependencies(this); @@ -43,6 +43,25 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter LayoutContainer.SetGrowVertical(this, LayoutContainer.GrowDirection.Begin); } + /// + /// Called when the mind is detached from an entity + /// + /// Rather than just dispose of the Gui we'll just remove its child controls and re-use the control. + public void Detached() + { + foreach (var (_, control) in _doAfterControls) + { + control.Dispose(); + } + _doAfterControls.Clear(); + foreach (var (_, control) in _doAfterBars) + { + control.Dispose(); + } + _doAfterBars.Clear(); + _cancelledDoAfters.Clear(); + } + /// /// Add the necessary control for a DoAfter progress bar. /// @@ -71,7 +90,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter TextureScale = Vector2.One * DoAfterBar.DoAfterBarScale, SizeFlagsVertical = SizeFlags.ShrinkCenter, }, - + doAfterBar } }; @@ -79,9 +98,9 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter AddChild(control); _doAfterControls.Add(message.ID, control); } - + // NOTE THAT THE BELOW ONLY HANDLES THE UI SIDE - + /// /// Removes a DoAfter without showing a cancel graphic. /// @@ -92,7 +111,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter { return; } - + var control = _doAfterControls[id]; RemoveChild(control); _doAfterControls.Remove(id); @@ -114,7 +133,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter { return; } - + var control = _doAfterControls[id]; _doAfterBars[id].Cancelled = true; _cancelledDoAfters.Add(id, _gameTiming.CurTime); @@ -124,13 +143,13 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter { base.FrameUpdate(args); - if (AttachedEntity == null || !AttachedEntity.TryGetComponent(out DoAfterComponent doAfterComponent)) + if (AttachedEntity?.IsValid() != true || !AttachedEntity.TryGetComponent(out DoAfterComponent doAfterComponent)) { return; } - + var doAfters = doAfterComponent.DoAfters; - + // Nothing to render so we'll hide. if (doAfters.Count == 0 && _cancelledDoAfters.Count == 0) { @@ -138,7 +157,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter Visible = false; return; } - + // Set position ready for 2nd+ frames. _playerPosition = _eyeManager.WorldToScreen(AttachedEntity.Transform.GridPosition); LayoutContainer.SetPosition(this, new Vector2(_playerPosition.X - Width / 2, _playerPosition.Y - Height - 30.0f)); @@ -152,7 +171,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter Visible = true; var currentTime = _gameTiming.CurTime; var toCancel = new List(); - + // Cleanup cancelled DoAfters foreach (var (id, cancelTime) in _cancelledDoAfters) { @@ -166,7 +185,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter { RemoveDoAfter(id); } - + // Update 0 -> 1.0f of the things foreach (var (id, message) in doAfters) { @@ -174,11 +193,11 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter { continue; } - + var doAfterBar = _doAfterBars[id]; doAfterBar.Ratio = MathF.Min(1.0f, (float) (currentTime - message.StartTime).TotalSeconds / message.Delay); } } } -} \ No newline at end of file +} diff --git a/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs b/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs index d04ac081f9..8aed094c7f 100644 --- a/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs @@ -50,19 +50,20 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter base.Shutdown(); Gui?.Dispose(); Gui = null; + _player = null; } - + private void HandlePlayerAttached(IEntity? entity) { _player = entity; // Setup the GUI and pass the new data to it if applicable. - Gui?.Dispose(); - + Gui?.Detached(); + if (entity == null) { return; } - + Gui ??= new DoAfterGui(); Gui.AttachedEntity = entity; @@ -81,24 +82,29 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter var currentTime = _gameTiming.CurTime; - if (_player == null || !_player.TryGetComponent(out DoAfterComponent doAfterComponent)) + if (_player?.IsValid() != true) { return; } - + + if (!_player.TryGetComponent(out DoAfterComponent doAfterComponent)) + { + return; + } + var doAfters = doAfterComponent.DoAfters.ToList(); if (doAfters.Count == 0) { return; } - + var userGrid = _player.Transform.GridPosition; - + // Check cancellations / finishes foreach (var (id, doAfter) in doAfters) { var elapsedTime = (currentTime - doAfter.StartTime).TotalSeconds; - + // If we've passed the final time (after the excess to show completion graphic) then remove. if (elapsedTime > doAfter.Delay + ExcessTime) { @@ -106,7 +112,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter doAfterComponent.Remove(doAfter); continue; } - + // Don't predict cancellation if it's already finished. if (elapsedTime > doAfter.Delay) { @@ -147,4 +153,4 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter } } } -} \ No newline at end of file +} diff --git a/Content.Client/GameObjects/EntitySystems/DragDropSystem.cs b/Content.Client/GameObjects/EntitySystems/DragDropSystem.cs index fe8eae8959..66a5f1592c 100644 --- a/Content.Client/GameObjects/EntitySystems/DragDropSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/DragDropSystem.cs @@ -95,8 +95,8 @@ namespace Content.Client.GameObjects.EntitySystems _dropTargetInRangeShader = _prototypeManager.Index(ShaderDropTargetInRange).Instance(); _dropTargetOutOfRangeShader = _prototypeManager.Index(ShaderDropTargetOutOfRange).Instance(); - _interactionSystem = EntitySystem.Get(); - _inputSystem = EntitySystem.Get(); + _interactionSystem = Get(); + _inputSystem = Get(); // needs to fire on mouseup and mousedown so we can detect a drag / drop CommandBinds.Builder .Bind(EngineKeyFunctions.Use, new PointerInputCmdHandler(OnUse, false)) diff --git a/Content.Client/GameObjects/EntitySystems/ExamineSystem.cs b/Content.Client/GameObjects/EntitySystems/ExamineSystem.cs index 79d297bd34..86f0f9e52d 100644 --- a/Content.Client/GameObjects/EntitySystems/ExamineSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/ExamineSystem.cs @@ -5,7 +5,6 @@ using Content.Shared.GameObjects.EntitySystemMessages; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Input; using JetBrains.Annotations; -using Robust.Client.GameObjects.EntitySystems; using Robust.Client.Interfaces.GameObjects.Components; using Robust.Client.Interfaces.Input; using Robust.Client.Interfaces.UserInterface; @@ -13,7 +12,6 @@ using Robust.Client.Player; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Shared.GameObjects; -using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; @@ -109,7 +107,7 @@ namespace Content.Client.GameObjects.EntitySystems FormattedMessage message; if (entity.Uid.IsClientSide()) { - message = ExamineSystem.GetExamineText(entity, _playerManager.LocalPlayer.ControlledEntity); + message = GetExamineText(entity, _playerManager.LocalPlayer.ControlledEntity); } else { diff --git a/Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs b/Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs index 1e2f0220af..a3eeadd0d3 100644 --- a/Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs +++ b/Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs @@ -1,22 +1,16 @@ using System; using System.Collections.Generic; -using System.Linq; -using Content.Client.Atmos; -using Content.Client.Utility; using Content.Shared.Atmos; using Content.Shared.GameObjects.EntitySystems; using JetBrains.Annotations; using Robust.Client.Graphics; -using Robust.Client.Interfaces.Graphics.Overlays; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.ResourceManagement; using Robust.Client.Utility; using Robust.Shared.GameObjects; using Robust.Shared.IoC; -using Robust.Shared.Log; using Robust.Shared.Map; using Robust.Shared.Maths; -using Robust.Shared.Prototypes; using Robust.Shared.Utility; namespace Content.Client.GameObjects.EntitySystems diff --git a/Content.Client/GameObjects/EntitySystems/InstrumentSystem.cs b/Content.Client/GameObjects/EntitySystems/InstrumentSystem.cs index 5401274988..e184d7d1eb 100644 --- a/Content.Client/GameObjects/EntitySystems/InstrumentSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/InstrumentSystem.cs @@ -1,6 +1,5 @@ using Content.Client.GameObjects.Components.Instruments; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; @@ -12,12 +11,6 @@ namespace Content.Client.GameObjects.EntitySystems { [Dependency] private readonly IGameTiming _gameTiming = default; - public override void Initialize() - { - base.Initialize(); - EntityQuery = new TypeEntityQuery(typeof(InstrumentComponent)); - } - public override void Update(float frameTime) { base.Update(frameTime); @@ -27,9 +20,9 @@ namespace Content.Client.GameObjects.EntitySystems return; } - foreach (var entity in RelevantEntities) + foreach (var instrumentComponent in EntityManager.ComponentManager.EntityQuery()) { - entity.GetComponent().Update(frameTime); + instrumentComponent.Update(frameTime); } } } diff --git a/Content.Client/GameObjects/EntitySystems/MarkerSystem.cs b/Content.Client/GameObjects/EntitySystems/MarkerSystem.cs index 7573253fb6..bec86abbb4 100644 --- a/Content.Client/GameObjects/EntitySystems/MarkerSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/MarkerSystem.cs @@ -1,5 +1,4 @@ using Content.Client.GameObjects.Components.Markers; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Client.GameObjects.EntitySystems @@ -8,13 +7,6 @@ namespace Content.Client.GameObjects.EntitySystems { private bool _markersVisible; - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(); - } - public bool MarkersVisible { get => _markersVisible; @@ -27,9 +19,9 @@ namespace Content.Client.GameObjects.EntitySystems private void UpdateMarkers() { - foreach (var entity in RelevantEntities) + foreach (var markerComponent in EntityManager.ComponentManager.EntityQuery()) { - entity.GetComponent().UpdateVisibility(); + markerComponent.UpdateVisibility(); } } } diff --git a/Content.Client/GameObjects/EntitySystems/MeleeLungeSystem.cs b/Content.Client/GameObjects/EntitySystems/MeleeLungeSystem.cs index bff419b8ab..3f180d4399 100644 --- a/Content.Client/GameObjects/EntitySystems/MeleeLungeSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/MeleeLungeSystem.cs @@ -1,6 +1,5 @@ using Content.Client.GameObjects.Components.Mobs; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Client.GameObjects.EntitySystems @@ -8,20 +7,13 @@ namespace Content.Client.GameObjects.EntitySystems [UsedImplicitly] public sealed class MeleeLungeSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(); - } - public override void FrameUpdate(float frameTime) { base.FrameUpdate(frameTime); - foreach (var entity in RelevantEntities) + foreach (var meleeLungeComponent in EntityManager.ComponentManager.EntityQuery()) { - entity.GetComponent().Update(frameTime); + meleeLungeComponent.Update(frameTime); } } } diff --git a/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs b/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs index 8b95cb6405..ca7a9d79e4 100644 --- a/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs @@ -24,16 +24,15 @@ namespace Content.Client.GameObjects.EntitySystems public override void Initialize() { SubscribeNetworkEvent(PlayWeaponArc); - EntityQuery = new TypeEntityQuery(typeof(MeleeWeaponArcAnimationComponent)); } public override void FrameUpdate(float frameTime) { base.FrameUpdate(frameTime); - foreach (var entity in RelevantEntities) + foreach (var arcAnimationComponent in EntityManager.ComponentManager.EntityQuery()) { - entity.GetComponent().Update(frameTime); + arcAnimationComponent.Update(frameTime); } } diff --git a/Content.Client/GameObjects/EntitySystems/MoverSystem.cs b/Content.Client/GameObjects/EntitySystems/MoverSystem.cs index e0d161b649..cdabb87d7c 100644 --- a/Content.Client/GameObjects/EntitySystems/MoverSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/MoverSystem.cs @@ -1,7 +1,6 @@ #nullable enable using Content.Shared.GameObjects.Components.Movement; using Content.Shared.GameObjects.EntitySystems; -using Content.Shared.Physics; using JetBrains.Annotations; using Robust.Client.Physics; using Robust.Client.Player; @@ -31,11 +30,10 @@ namespace Content.Client.GameObjects.EntitySystems return; } - var physics = playerEnt.GetComponent(); - playerEnt.TryGetComponent(out ICollidableComponent? collidable); - physics.Predict = true; + var collidable = playerEnt.GetComponent(); + collidable.Predict = true; - UpdateKinematics(playerEnt.Transform, mover, physics, collidable); + UpdateKinematics(playerEnt.Transform, mover, collidable); } public override void Update(float frameTime) diff --git a/Content.Client/GameObjects/EntitySystems/StatusEffectsSystem.cs b/Content.Client/GameObjects/EntitySystems/StatusEffectsSystem.cs index 65476ce25e..367c49f0b9 100644 --- a/Content.Client/GameObjects/EntitySystems/StatusEffectsSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/StatusEffectsSystem.cs @@ -1,6 +1,4 @@ using Content.Client.GameObjects.Components.Mobs; -using Content.Shared.GameObjects.Components.Mobs; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; @@ -13,11 +11,6 @@ namespace Content.Client.GameObjects.EntitySystems [Dependency] private IGameTiming _gameTiming; #pragma warning restore 649 - public StatusEffectsSystem() - { - EntityQuery = new TypeEntityQuery(typeof(ClientStatusEffectsComponent)); - } - public override void FrameUpdate(float frameTime) { base.FrameUpdate(frameTime); @@ -25,9 +18,9 @@ namespace Content.Client.GameObjects.EntitySystems if (!_gameTiming.IsFirstTimePredicted) return; - foreach (var entity in RelevantEntities) + foreach (var clientStatusEffectsComponent in EntityManager.ComponentManager.EntityQuery()) { - entity.GetComponent().FrameUpdate(frameTime); + clientStatusEffectsComponent.FrameUpdate(frameTime); } } } diff --git a/Content.Client/GameObjects/EntitySystems/VerbSystem.cs b/Content.Client/GameObjects/EntitySystems/VerbSystem.cs index 6c5fc11445..f388263d65 100644 --- a/Content.Client/GameObjects/EntitySystems/VerbSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/VerbSystem.cs @@ -6,8 +6,8 @@ using System.Threading; using Content.Client.State; using Content.Client.UserInterface; using Content.Client.Utility; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.EntitySystemMessages; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Input; using JetBrains.Annotations; using Robust.Client.GameObjects.EntitySystems; @@ -210,6 +210,9 @@ namespace Content.Client.GameObjects.EntitySystems if (verb.RequireInteractionRange && !VerbUtility.InVerbUseRange(user, entity)) continue; + if (verb.BlockedByContainers && !user.IsInSameOrNoContainer(entity)) + continue; + var verbData = verb.GetData(user, component); if (verbData.IsInvisible) @@ -232,6 +235,9 @@ namespace Content.Client.GameObjects.EntitySystems if (globalVerb.RequireInteractionRange && !VerbUtility.InVerbUseRange(user, entity)) continue; + if (globalVerb.BlockedByContainers && !user.IsInSameOrNoContainer(entity)) + continue; + var verbData = globalVerb.GetData(user, entity); if (verbData.IsInvisible) diff --git a/Content.Client/GlobalVerbs/ExamineVerb.cs b/Content.Client/GlobalVerbs/ExamineVerb.cs index 33b8f38027..2116290796 100644 --- a/Content.Client/GlobalVerbs/ExamineVerb.cs +++ b/Content.Client/GlobalVerbs/ExamineVerb.cs @@ -1,5 +1,5 @@ using Content.Client.GameObjects.EntitySystems; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Verbs; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Localization; @@ -11,6 +11,8 @@ namespace Content.Client.GlobalVerbs { public override bool RequireInteractionRange => false; + public override bool BlockedByContainers => false; + public override void GetData(IEntity user, IEntity target, VerbData data) { data.Visibility = VerbVisibility.Visible; diff --git a/Content.Client/GlobalVerbs/ViewVariablesVerb.cs b/Content.Client/GlobalVerbs/ViewVariablesVerb.cs index acaa118f09..fd31a6fd0c 100644 --- a/Content.Client/GlobalVerbs/ViewVariablesVerb.cs +++ b/Content.Client/GlobalVerbs/ViewVariablesVerb.cs @@ -1,4 +1,4 @@ -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Verbs; using Robust.Client.Console; using Robust.Client.ViewVariables; using Robust.Shared.Interfaces.GameObjects; @@ -13,6 +13,7 @@ namespace Content.Client.GlobalVerbs class ViewVariablesVerb : GlobalVerb { public override bool RequireInteractionRange => false; + public override bool BlockedByContainers => false; public override void GetData(IEntity user, IEntity target, VerbData data) { diff --git a/Content.Client/Graphics/Overlays/FlashOverlay.cs b/Content.Client/Graphics/Overlays/FlashOverlay.cs index 2d76466b32..cf56eb796e 100644 --- a/Content.Client/Graphics/Overlays/FlashOverlay.cs +++ b/Content.Client/Graphics/Overlays/FlashOverlay.cs @@ -1,20 +1,16 @@ -using System.Net.Mime; -using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.Interfaces; using Robust.Client.Graphics; using Robust.Client.Graphics.Drawing; using Robust.Client.Graphics.Overlays; using Robust.Client.Graphics.Shaders; using Robust.Client.Interfaces.Graphics; -using Robust.Client.Interfaces.Graphics.ClientEye; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Maths; using Robust.Shared.Prototypes; -using Robust.Shared.Timing; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; -using Color = Robust.Shared.Maths.Color; namespace Content.Client.Graphics.Overlays { diff --git a/Content.Client/Health/BodySystem/BodyScanner/BodyScannerBoundUserInterface.cs b/Content.Client/Health/BodySystem/BodyScanner/BodyScannerBoundUserInterface.cs index 382712cf84..5bf9bec18b 100644 --- a/Content.Client/Health/BodySystem/BodyScanner/BodyScannerBoundUserInterface.cs +++ b/Content.Client/Health/BodySystem/BodyScanner/BodyScannerBoundUserInterface.cs @@ -1,12 +1,10 @@ -using Content.Client.UserInterface; -using Content.Shared.BodySystem; +using System.Collections.Generic; +using Content.Shared.Health.BodySystem.BodyScanner; using Robust.Client.GameObjects.Components.UserInterface; -using Robust.Client.UserInterface.Controls; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.ViewVariables; -using System.Collections.Generic; -namespace Content.Client.BodySystem +namespace Content.Client.Health.BodySystem.BodyScanner { public class BodyScannerBoundUserInterface : BoundUserInterface { @@ -40,7 +38,7 @@ namespace Content.Client.BodySystem _template = scannerState.Template; _parts = scannerState.Parts; - + _display.UpdateDisplay(_template, _parts); } diff --git a/Content.Client/Health/BodySystem/BodyScanner/BodyScannerDisplay.cs b/Content.Client/Health/BodySystem/BodyScanner/BodyScannerDisplay.cs index 8df49bc53e..d997c73216 100644 --- a/Content.Client/Health/BodySystem/BodyScanner/BodyScannerDisplay.cs +++ b/Content.Client/Health/BodySystem/BodyScanner/BodyScannerDisplay.cs @@ -1,20 +1,14 @@ -using Content.Client.BodySystem; -using Content.Shared.BodySystem; -using Robust.Client.Graphics.Drawing; -using Robust.Client.Interfaces.ResourceManagement; +using System.Collections.Generic; +using System.Globalization; +using Content.Shared.Health.BodySystem.BodyScanner; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; -using Robust.Client.Utility; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; -using Robust.Shared.Utility; -using System; -using System.Collections.Generic; -using System.Globalization; using static Robust.Client.UserInterface.Controls.ItemList; -namespace Content.Client.UserInterface +namespace Content.Client.Health.BodySystem.BodyScanner { public sealed class BodyScannerDisplay : SS14Window { @@ -33,7 +27,7 @@ namespace Content.Client.UserInterface private BodyScannerTemplateData _template; private Dictionary _parts; - private List _slots; + private List _slots; private BodyScannerBodyPartData _currentBodyPart; @@ -100,7 +94,7 @@ namespace Content.Client.UserInterface public void UpdateDisplay(BodyScannerTemplateData template, Dictionary parts) { - _template = template; + _template = template; _parts = parts; _slots = new List(); BodyPartList.Clear(); diff --git a/Content.Client/Health/BodySystem/Surgery/GenericSurgeryBoundUserInterface.cs b/Content.Client/Health/BodySystem/Surgery/GenericSurgeryBoundUserInterface.cs index 1079a939ce..04c0246e83 100644 --- a/Content.Client/Health/BodySystem/Surgery/GenericSurgeryBoundUserInterface.cs +++ b/Content.Client/Health/BodySystem/Surgery/GenericSurgeryBoundUserInterface.cs @@ -1,15 +1,8 @@ -using System; -using System.Collections.Generic; +using Content.Shared.Health.BodySystem.Surgery; using Robust.Client.GameObjects.Components.UserInterface; using Robust.Shared.GameObjects.Components.UserInterface; -using Robust.Shared.IoC; -using Robust.Shared.Prototypes; -using Robust.Shared.GameObjects; -using Robust.Shared.Interfaces.Network; -using Robust.Shared.Players; -using Content.Shared.BodySystem; -namespace Content.Client.BodySystem +namespace Content.Client.Health.BodySystem.Surgery { //TODO : Make window close if target or surgery tool gets too far away from user. diff --git a/Content.Client/Health/BodySystem/Surgery/GenericSurgeryWindow.cs b/Content.Client/Health/BodySystem/Surgery/GenericSurgeryWindow.cs index f83ae9163f..baae1b145c 100644 --- a/Content.Client/Health/BodySystem/Surgery/GenericSurgeryWindow.cs +++ b/Content.Client/Health/BodySystem/Surgery/GenericSurgeryWindow.cs @@ -1,14 +1,13 @@ -using Robust.Client.UserInterface; +using System; +using System.Collections.Generic; +using System.Globalization; +using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.Localization; using Robust.Shared.Maths; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Text; -namespace Content.Client.BodySystem +namespace Content.Client.Health.BodySystem.Surgery { public class GenericSurgeryWindow : SS14Window { diff --git a/Content.Client/IgnoredComponents.cs b/Content.Client/IgnoredComponents.cs index c0915caf7b..5169e4a189 100644 --- a/Content.Client/IgnoredComponents.cs +++ b/Content.Client/IgnoredComponents.cs @@ -136,6 +136,8 @@ "TrashSpawner", "Pill", "RCD", + "RCDDeconstructWhitelist", + "RCDAmmo", "Pullable", "CursedEntityStorage", "Listening", diff --git a/Content.Client/Instruments/InstrumentMenu.cs b/Content.Client/Instruments/InstrumentMenu.cs index 50f480143d..3acacb3f34 100644 --- a/Content.Client/Instruments/InstrumentMenu.cs +++ b/Content.Client/Instruments/InstrumentMenu.cs @@ -1,4 +1,3 @@ -using System.Threading.Tasks; using Content.Client.GameObjects.Components.Instruments; using Content.Client.UserInterface.Stylesheets; using Content.Shared.GameObjects.EntitySystems; diff --git a/Content.Client/Jobs/ClownSpecial.cs b/Content.Client/Jobs/ClownSpecial.cs index 8c4af7de1d..e5cd37f1e1 100644 --- a/Content.Client/Jobs/ClownSpecial.cs +++ b/Content.Client/Jobs/ClownSpecial.cs @@ -1,4 +1,4 @@ -using Content.Server.Jobs; +using Content.Shared.Roles; using JetBrains.Annotations; namespace Content.Client.Jobs diff --git a/Content.Client/Parallax/ParallaxGenerator.cs b/Content.Client/Parallax/ParallaxGenerator.cs index 9011cf411e..ab358c2b41 100644 --- a/Content.Client/Parallax/ParallaxGenerator.cs +++ b/Content.Client/Parallax/ParallaxGenerator.cs @@ -9,12 +9,8 @@ using Robust.Shared.Maths; using Robust.Shared.Noise; using Robust.Shared.Random; using SixLabors.ImageSharp; -using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.PixelFormats; using Color = Robust.Shared.Maths.Color; -using CannyFastMath; -using Math = CannyFastMath.Math; -using MathF = CannyFastMath.MathF; namespace Content.Client.Parallax { @@ -81,7 +77,7 @@ namespace Content.Client.Parallax private readonly NoiseGenerator.NoiseType NoiseType = NoiseGenerator.NoiseType.Fbm; private readonly uint Seed = 1234; private readonly float Persistence = 0.5f; - private readonly float Lacunarity = (float) (Math.TAU / 3); + private readonly float Lacunarity = (float) (Math.PI / 3); private readonly float Frequency = 1; private readonly uint Octaves = 3; private readonly float Threshold; diff --git a/Content.Client/Parallax/ParallaxManager.cs b/Content.Client/Parallax/ParallaxManager.cs index 0e6ff0e827..d289ef16cc 100644 --- a/Content.Client/Parallax/ParallaxManager.cs +++ b/Content.Client/Parallax/ParallaxManager.cs @@ -8,6 +8,7 @@ using Robust.Client.Graphics; using Robust.Client.Interfaces.ResourceManagement; using Robust.Shared.Interfaces.Configuration; using Robust.Shared.Interfaces.Log; +using Robust.Shared.Interfaces.Resources; using Robust.Shared.IoC; using Robust.Shared.Log; using Robust.Shared.Utility; @@ -59,16 +60,11 @@ namespace Content.Client.Parallax if (!debugParallax && _resourceCache.UserData.Exists(ParallaxConfigOld)) { - bool match; - using (var data = _resourceCache.UserData.Open(ParallaxConfigOld, FileMode.Open)) - using (var reader = new StreamReader(data, EncodingHelpers.UTF8)) - { - match = reader.ReadToEnd() == contents; - } + var match = _resourceCache.UserData.ReadAllText(ParallaxConfigOld) == contents; if (match) { - using (var stream = _resourceCache.UserData.Open(ParallaxPath, FileMode.Open)) + using (var stream = _resourceCache.UserData.OpenRead(ParallaxPath)) { ParallaxTexture = Texture.LoadFromPNGStream(stream, "Parallax"); } @@ -95,7 +91,7 @@ namespace Content.Client.Parallax ParallaxTexture = Texture.LoadFromImage(image, "Parallax"); // Store it and CRC so further game starts don't need to regenerate it. - using (var stream = _resourceCache.UserData.Open(ParallaxPath, FileMode.Create)) + using (var stream = _resourceCache.UserData.Create(ParallaxPath)) { image.SaveAsPng(stream); } @@ -105,8 +101,7 @@ namespace Content.Client.Parallax var i = 0; foreach (var debugImage in debugImages) { - using (var stream = _resourceCache.UserData.Open(new ResourcePath($"/parallax_debug_{i}.png"), - FileMode.Create)) + using (var stream = _resourceCache.UserData.Create(new ResourcePath($"/parallax_debug_{i}.png"))) { debugImage.SaveAsPng(stream); } @@ -117,7 +112,7 @@ namespace Content.Client.Parallax image.Dispose(); - using (var stream = _resourceCache.UserData.Open(ParallaxConfigOld, FileMode.Create)) + using (var stream = _resourceCache.UserData.Create(ParallaxConfigOld)) using (var writer = new StreamWriter(stream, EncodingHelpers.UTF8)) { writer.Write(contents); diff --git a/Content.Client/Sandbox/SandboxManager.cs b/Content.Client/Sandbox/SandboxManager.cs index d1e7de9694..fddcf313cf 100644 --- a/Content.Client/Sandbox/SandboxManager.cs +++ b/Content.Client/Sandbox/SandboxManager.cs @@ -1,13 +1,16 @@ using System; using Content.Client.UserInterface; +using Content.Client.GameObjects.EntitySystems; using Content.Shared.Input; using Content.Shared.Sandbox; +using Robust.Client.Console; +using Robust.Client.Interfaces.Console; using Robust.Client.Interfaces.Input; +using Robust.Client.Interfaces.Graphics.Lighting; using Robust.Client.Interfaces.Placement; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; -using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Network; @@ -17,9 +20,64 @@ using Robust.Shared.Prototypes; namespace Content.Client.Sandbox { - internal sealed class SandboxManager : SharedSandboxManager, ISandboxManager + // Layout for the SandboxWindow + public class SandboxWindow : SS14Window + { + public Button RespawnButton; + public Button SpawnEntitiesButton; + public Button SpawnTilesButton; + public Button GiveFullAccessButton; //A button that just puts a captain's ID in your hands. + public Button GiveAghostButton; + public Button ToggleLightButton; + public Button SuicideButton; + public Button ToggleSubfloorButton; + public Button ShowMarkersButton; //Shows spawn points + public Button ShowBbButton; //Shows bounding boxes + + public SandboxWindow(ILocalizationManager loc) + { + Resizable = false; + + Title = "Sandbox Panel"; + + var vBox = new VBoxContainer { SeparationOverride = 4 }; + Contents.AddChild(vBox); + + RespawnButton = new Button { Text = loc.GetString("Respawn") }; + vBox.AddChild(RespawnButton); + + SpawnEntitiesButton = new Button { Text = loc.GetString("Spawn Entities") }; + vBox.AddChild(SpawnEntitiesButton); + + SpawnTilesButton = new Button { Text = loc.GetString("Spawn Tiles") }; + vBox.AddChild(SpawnTilesButton); + + GiveFullAccessButton = new Button { Text = loc.GetString("Give AA Id") }; + vBox.AddChild(GiveFullAccessButton); + + GiveAghostButton = new Button { Text = loc.GetString("Ghost") }; + vBox.AddChild(GiveAghostButton); + + ToggleLightButton = new Button { Text = loc.GetString("Toggle Lights"), ToggleMode = true }; + vBox.AddChild(ToggleLightButton); + + ToggleSubfloorButton = new Button { Text = loc.GetString("Toggle Subfloor"), ToggleMode = true }; + vBox.AddChild(ToggleSubfloorButton); + + SuicideButton = new Button { Text = loc.GetString("Suicide") }; + vBox.AddChild(SuicideButton); + + ShowMarkersButton = new Button { Text = loc.GetString("Show Spawns"), ToggleMode = true }; + vBox.AddChild(ShowMarkersButton); + + ShowBbButton = new Button { Text = loc.GetString("Show Bb"), ToggleMode = true }; + vBox.AddChild(ShowBbButton); + } + } + internal class SandboxManager : SharedSandboxManager, ISandboxManager { #pragma warning disable 649 + [Dependency] private readonly IClientConsole _console; [Dependency] private readonly IGameHud _gameHud; [Dependency] private readonly IClientNetManager _netManager; [Dependency] private readonly ILocalizationManager _localization; @@ -38,6 +96,7 @@ namespace Content.Client.Sandbox private EntitySpawnWindow _spawnWindow; private TileSpawnWindow _tilesSpawnWindow; private bool _sandboxWindowToggled; + bool SpawnEntitiesButton { get; set; } public void Initialize() { @@ -48,6 +107,10 @@ namespace Content.Client.Sandbox _netManager.RegisterNetMessage(nameof(MsgSandboxRespawn)); + _netManager.RegisterNetMessage(nameof(MsgSandboxGiveAghost)); + + _netManager.RegisterNetMessage(nameof(MsgSandboxSuicide)); + _gameHud.SandboxButtonToggled = SandboxButtonPressed; _inputManager.SetInputCommand(ContentKeyFunctions.OpenEntitySpawnWindow, @@ -112,12 +175,16 @@ namespace Content.Client.Sandbox _window.SpawnTilesButton.OnPressed += OnSpawnTilesButtonClicked; _window.SpawnEntitiesButton.OnPressed += OnSpawnEntitiesButtonClicked; _window.GiveFullAccessButton.OnPressed += OnGiveAdminAccessButtonClicked; + _window.GiveAghostButton.OnPressed += OnGiveAghostButtonClicked; + _window.ToggleLightButton.OnToggled += OnToggleLightButtonClicked; + _window.SuicideButton.OnPressed += OnSuicideButtonClicked; + _window.ToggleSubfloorButton.OnPressed += OnToggleSubfloorButtonClicked; + _window.ShowMarkersButton.OnPressed += OnShowMarkersButtonClicked; + _window.ShowBbButton.OnPressed += OnShowBbButtonClicked; _window.OpenCentered(); } - - private void WindowOnOnClose() { _window = null; @@ -140,13 +207,44 @@ namespace Content.Client.Sandbox ToggleTilesWindow(); } + private void OnToggleLightButtonClicked(BaseButton.ButtonEventArgs args) + { + ToggleLight(); + } + + private void OnToggleSubfloorButtonClicked(BaseButton.ButtonEventArgs args) + { + ToggleSubfloor(); + } + + private void OnShowMarkersButtonClicked(BaseButton.ButtonEventArgs args) + { + ShowMarkers(); + } + + private void OnShowBbButtonClicked(BaseButton.ButtonEventArgs args) + { + ShowBb(); + } + private void OnGiveAdminAccessButtonClicked(BaseButton.ButtonEventArgs args) { _netManager.ClientSendMessage(_netManager.CreateNetMessage()); } + + private void OnGiveAghostButtonClicked(BaseButton.ButtonEventArgs args) + { + _netManager.ClientSendMessage(_netManager.CreateNetMessage()); + } + + private void OnSuicideButtonClicked(BaseButton.ButtonEventArgs args) + { + _netManager.ClientSendMessage(_netManager.CreateNetMessage()); + } + private void ToggleEntitySpawnWindow() { - if(_spawnWindow == null) + if (_spawnWindow == null) _spawnWindow = new EntitySpawnWindow(_placementManager, _prototypeManager, _resourceCache, _localization); if (_spawnWindow.IsOpen) @@ -162,7 +260,7 @@ namespace Content.Client.Sandbox private void ToggleTilesWindow() { - if(_tilesSpawnWindow == null) + if (_tilesSpawnWindow == null) _tilesSpawnWindow = new TileSpawnWindow(_tileDefinitionManager, _placementManager, _resourceCache); if (_tilesSpawnWindow.IsOpen) @@ -175,5 +273,25 @@ namespace Content.Client.Sandbox _tilesSpawnWindow.OpenToLeft(); } } + + private void ToggleLight() + { + _console.ProcessCommand("togglelight"); + } + + private void ToggleSubfloor() + { + _console.ProcessCommand("showsubfloor"); + } + + private void ShowMarkers() + { + _console.ProcessCommand("showmarkers"); + } + + private void ShowBb() + { + _console.ProcessCommand("showbb"); + } } } diff --git a/Content.Client/Sandbox/SandboxWindow.cs b/Content.Client/Sandbox/SandboxWindow.cs deleted file mode 100644 index b1db694d01..0000000000 --- a/Content.Client/Sandbox/SandboxWindow.cs +++ /dev/null @@ -1,51 +0,0 @@ -using Robust.Client.UserInterface.Controls; -using Robust.Client.UserInterface.CustomControls; -using Robust.Shared.Localization; - -namespace Content.Client.Sandbox -{ - public sealed class SandboxWindow : SS14Window - { - public Button RespawnButton { get; } - public Button SpawnEntitiesButton { get; } - public Button SpawnTilesButton { get; } - - public Button GiveFullAccessButton { get; } //A button that just puts a captain's ID in your hands. - - public SandboxWindow(ILocalizationManager loc) - { - Title = loc.GetString("Sandbox Panel"); - - RespawnButton = new Button - { - Text = loc.GetString("Respawn") - }; - - SpawnEntitiesButton = new Button - { - Text = loc.GetString("Spawn Entities") - }; - - SpawnTilesButton = new Button - { - Text = loc.GetString("Spawn Tiles") - }; - - GiveFullAccessButton = new Button - { - Text = loc.GetString("Give Full Access ID") - }; - - Contents.AddChild(new VBoxContainer - { - Children = - { - RespawnButton, - SpawnEntitiesButton, - SpawnTilesButton, - GiveFullAccessButton - } - }); - } - } -} diff --git a/Content.Client/ScreenshotHook.cs b/Content.Client/ScreenshotHook.cs index f3a7565bed..d1cf81bd96 100644 --- a/Content.Client/ScreenshotHook.cs +++ b/Content.Client/ScreenshotHook.cs @@ -4,7 +4,6 @@ using System.Threading.Tasks; using Content.Shared.Input; using Robust.Client.Interfaces.Graphics; using Robust.Client.Interfaces.Input; -using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.Interfaces.Resources; using Robust.Shared.IoC; @@ -58,7 +57,7 @@ namespace Content.Client } await using var file = - _resourceManager.UserData.Open(BaseScreenshotPath / $"{filename}.png", FileMode.CreateNew); + _resourceManager.UserData.Open(BaseScreenshotPath / $"{filename}.png", FileMode.CreateNew, FileAccess.Read, FileShare.None); await Task.Run(() => { diff --git a/Content.Client/State/GameScreen.cs b/Content.Client/State/GameScreen.cs index 5449ed7e3b..98425026b5 100644 --- a/Content.Client/State/GameScreen.cs +++ b/Content.Client/State/GameScreen.cs @@ -1,20 +1,13 @@ -using System.Collections.Generic; -using System.Collections.Immutable; using Content.Client.Chat; using Content.Client.Interfaces.Chat; using Content.Client.UserInterface; using Content.Shared.Input; -using Robust.Client.Console; using Robust.Client.Interfaces.Input; -using Robust.Client.Interfaces.State; using Robust.Client.Interfaces.UserInterface; using Robust.Client.UserInterface.Controls; -using Robust.Shared.Input; using Robust.Shared.Input.Binding; -using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; -using Robust.Shared.Map; using Robust.Shared.ViewVariables; namespace Content.Client.State diff --git a/Content.Client/State/GameScreenBase.cs b/Content.Client/State/GameScreenBase.cs index d16119a4a2..1372dacce5 100644 --- a/Content.Client/State/GameScreenBase.cs +++ b/Content.Client/State/GameScreenBase.cs @@ -5,11 +5,10 @@ using Content.Client.GameObjects.Components; using Content.Shared.GameObjects.EntitySystems; using Robust.Client.GameObjects.EntitySystems; using Robust.Client.Interfaces.GameObjects; -using Robust.Client.Interfaces.GameObjects.Components; using Robust.Client.Interfaces.Graphics.ClientEye; using Robust.Client.Interfaces.Input; -using Robust.Client.Interfaces.UserInterface; using Robust.Client.Interfaces.State; +using Robust.Client.Interfaces.UserInterface; using Robust.Client.Player; using Robust.Shared.GameObjects; using Robust.Shared.Input; diff --git a/Content.Client/State/LobbyState.cs b/Content.Client/State/LobbyState.cs index 7136d581d2..23f1d28d83 100644 --- a/Content.Client/State/LobbyState.cs +++ b/Content.Client/State/LobbyState.cs @@ -9,10 +9,8 @@ using Robust.Client.Interfaces; using Robust.Client.Interfaces.Input; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.Interfaces.UserInterface; -using Robust.Client.UserInterface.CustomControls; using Robust.Client.Player; using Robust.Client.UserInterface.Controls; -using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; @@ -20,9 +18,6 @@ using Robust.Shared.Localization; using Robust.Shared.Prototypes; using Robust.Shared.Timing; using Robust.Shared.ViewVariables; -using CannyFastMath; -using Math = CannyFastMath.Math; -using MathF = CannyFastMath.MathF; namespace Content.Client.State { diff --git a/Content.Client/StationEvents/RadiationPulseOverlay.cs b/Content.Client/StationEvents/RadiationPulseOverlay.cs new file mode 100644 index 0000000000..2604419ed5 --- /dev/null +++ b/Content.Client/StationEvents/RadiationPulseOverlay.cs @@ -0,0 +1,152 @@ +#nullable enable +using System; +using System.Collections.Generic; +using System.Linq; +using Content.Client.GameObjects.Components.StationEvents; +using Content.Shared.GameObjects.Components.Mobs; +using JetBrains.Annotations; +using Robust.Client.Graphics.Drawing; +using Robust.Client.Graphics.Overlays; +using Robust.Client.Interfaces.Graphics.ClientEye; +using Robust.Client.Player; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.Interfaces.Timing; +using Robust.Shared.IoC; +using Color = Robust.Shared.Maths.Color; + +namespace Content.Client.StationEvents +{ + [UsedImplicitly] + public sealed class RadiationPulseOverlay : Overlay + { + [Dependency] private readonly IComponentManager _componentManager = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IEyeManager _eyeManager = default!; + + /// + /// Current color of a pulse + /// + private readonly Dictionary _colors = new Dictionary(); + + /// + /// Whether our alpha is increasing or decreasing and at what time does it flip (or stop) + /// + private readonly Dictionary _transitions = + new Dictionary(); + + /// + /// How much the alpha changes per second for each pulse + /// + private readonly Dictionary _alphaRateOfChange = new Dictionary(); + + private TimeSpan _lastTick; + + // TODO: When worldHandle can do DrawCircle change this. + public override OverlaySpace Space => OverlaySpace.ScreenSpace; + + public RadiationPulseOverlay() : base(nameof(SharedOverlayID.RadiationPulseOverlay)) + { + IoCManager.InjectDependencies(this); + _lastTick = _gameTiming.CurTime; + } + + /// + /// Get the current color for the entity, + /// accounting for what its alpha should be and whether it should be transitioning in or out + /// + /// + /// frametime + /// + /// + private Color GetColor(IEntity entity, float elapsedTime, TimeSpan endTime) + { + var currentTime = _gameTiming.CurTime; + + // New pulse + if (!_colors.ContainsKey(entity)) + { + UpdateTransition(entity, currentTime, endTime); + } + + var currentColor = _colors[entity]; + var alphaChange = _alphaRateOfChange[entity] * elapsedTime; + + if (!_transitions[entity].EasingIn) + { + alphaChange *= -1; + } + + if (currentTime > _transitions[entity].TransitionTime) + { + UpdateTransition(entity, currentTime, endTime); + } + + _colors[entity] = _colors[entity].WithAlpha(currentColor.A + alphaChange); + return _colors[entity]; + } + + private void UpdateTransition(IEntity entity, TimeSpan currentTime, TimeSpan endTime) + { + bool easingIn; + TimeSpan transitionTime; + + if (!_transitions.TryGetValue(entity, out var transition)) + { + // Start as false because it will immediately be flipped + easingIn = false; + transitionTime = (endTime - currentTime) / 2 + currentTime; + } + else + { + easingIn = transition.EasingIn; + transitionTime = endTime; + } + + _transitions[entity] = (!easingIn, transitionTime); + _colors[entity] = Color.Green.WithAlpha(0.0f); + _alphaRateOfChange[entity] = 1.0f / (float) (transitionTime - currentTime).TotalSeconds; + } + + protected override void Draw(DrawingHandleBase handle, OverlaySpace currentSpace) + { + // PVS should control the overlay pretty well so the overlay doesn't get instantiated unless we're near one... + var playerEntity = _playerManager.LocalPlayer?.ControlledEntity; + + if (playerEntity == null) + { + return; + } + + var elapsedTime = (float) (_gameTiming.CurTime - _lastTick).TotalSeconds; + _lastTick = _gameTiming.CurTime; + + var radiationPulses = _componentManager + .EntityQuery() + .ToList(); + + var screenHandle = (DrawingHandleScreen) handle; + var viewport = _eyeManager.GetWorldViewport(); + + foreach (var grid in _mapManager.FindGridsIntersecting(playerEntity.Transform.MapID, viewport)) + { + foreach (var pulse in radiationPulses) + { + if (grid.Index != pulse.Owner.Transform.GridID) continue; + + // TODO: Check if viewport intersects circle + var circlePosition = _eyeManager.WorldToScreen(pulse.Owner.Transform.WorldPosition); + var comp = (RadiationPulseComponent) pulse; + + // change to worldhandle when implemented + screenHandle.DrawCircle( + circlePosition, + comp.Range * 64, + GetColor(pulse.Owner, elapsedTime, comp.EndTime)); + } + } + } + } +} \ No newline at end of file diff --git a/Content.Client/UserInterface/Cargo/CargoConsoleMenu.cs b/Content.Client/UserInterface/Cargo/CargoConsoleMenu.cs index 3626f72faa..f5f05f50c0 100644 --- a/Content.Client/UserInterface/Cargo/CargoConsoleMenu.cs +++ b/Content.Client/UserInterface/Cargo/CargoConsoleMenu.cs @@ -1,4 +1,7 @@ -using Content.Client.GameObjects.Components.Cargo; +using System; +using System.Collections.Generic; +using Content.Client.GameObjects.Components.Cargo; +using Content.Client.UserInterface.Stylesheets; using Content.Shared.Prototypes.Cargo; using Robust.Client.Graphics.Drawing; using Robust.Client.UserInterface.Controls; @@ -7,9 +10,6 @@ using Robust.Client.Utility; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; -using System; -using System.Collections.Generic; -using Content.Client.UserInterface.Stylesheets; namespace Content.Client.UserInterface.Cargo { diff --git a/Content.Client/UserInterface/Cargo/CargoConsoleOrderMenu.cs b/Content.Client/UserInterface/Cargo/CargoConsoleOrderMenu.cs index a831c90ccc..5c2b4460f0 100644 --- a/Content.Client/UserInterface/Cargo/CargoConsoleOrderMenu.cs +++ b/Content.Client/UserInterface/Cargo/CargoConsoleOrderMenu.cs @@ -1,10 +1,8 @@ -using Robust.Client.UserInterface.Controls; +using System.Collections.Generic; +using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.IoC; using Robust.Shared.Localization; -using Robust.Shared.Maths; -using System; -using System.Collections.Generic; namespace Content.Client.UserInterface.Cargo { diff --git a/Content.Client/UserInterface/Cargo/GalacticBankSelectionMenu.cs b/Content.Client/UserInterface/Cargo/GalacticBankSelectionMenu.cs index cc4dfb1e83..25c90ee7f8 100644 --- a/Content.Client/UserInterface/Cargo/GalacticBankSelectionMenu.cs +++ b/Content.Client/UserInterface/Cargo/GalacticBankSelectionMenu.cs @@ -5,8 +5,6 @@ using Robust.Client.UserInterface.CustomControls; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; -using System; -using static Robust.Client.UserInterface.Controls.ItemList; namespace Content.Client.UserInterface.Cargo { diff --git a/Content.Client/UserInterface/CharacterSetupGui.cs b/Content.Client/UserInterface/CharacterSetupGui.cs index 4b6f9f4049..5ca0d6d564 100644 --- a/Content.Client/UserInterface/CharacterSetupGui.cs +++ b/Content.Client/UserInterface/CharacterSetupGui.cs @@ -3,8 +3,8 @@ using Content.Client.GameObjects.Components.Mobs; using Content.Client.Interfaces; using Content.Client.UserInterface.Stylesheets; using Content.Client.Utility; -using Content.Shared.Jobs; using Content.Shared.Preferences; +using Content.Shared.Roles; using Robust.Client.GameObjects; using Robust.Client.Graphics.Drawing; using Robust.Client.Interfaces.ResourceManagement; diff --git a/Content.Client/UserInterface/CooldownGraphic.cs b/Content.Client/UserInterface/CooldownGraphic.cs index ae09ec8fb8..777ec9e1d9 100644 --- a/Content.Client/UserInterface/CooldownGraphic.cs +++ b/Content.Client/UserInterface/CooldownGraphic.cs @@ -1,16 +1,12 @@ -using Robust.Client.Graphics.Drawing; -using Robust.Client.Interfaces.GameObjects.Components; -using Robust.Client.Interfaces.Graphics; -using Robust.Shared.Maths; -using System; +using System; +using Robust.Client.Graphics.Drawing; using Robust.Client.Graphics.Shaders; +using Robust.Client.UserInterface; using Robust.Shared.IoC; +using Robust.Shared.Maths; using Robust.Shared.Prototypes; -using CannyFastMath; -using Math = CannyFastMath.Math; -using MathF = CannyFastMath.MathF; -namespace Robust.Client.UserInterface.Controls +namespace Content.Client.UserInterface { public class CooldownGraphic : Control @@ -45,7 +41,7 @@ namespace Robust.Client.UserInterface.Controls } else { - var alpha = MathF.Clamp(0.5f * lerp, 0f, 0.5f); + var alpha = FloatMath.Clamp(0.5f * lerp, 0f, 0.5f); color = new Color(1f, 1f, 1f, alpha); } diff --git a/Content.Client/UserInterface/EscapeMenu.cs b/Content.Client/UserInterface/EscapeMenu.cs index 3f085d1a8a..7b3ba644ce 100644 --- a/Content.Client/UserInterface/EscapeMenu.cs +++ b/Content.Client/UserInterface/EscapeMenu.cs @@ -1,5 +1,4 @@ -using Content.Client.Sandbox; -using Robust.Client.Console; +using Robust.Client.Console; using Robust.Client.Interfaces.Placement; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.UserInterface.Controls; @@ -15,16 +14,12 @@ namespace Content.Client.UserInterface internal sealed class EscapeMenu : SS14Window { private readonly IClientConsole _console; - private readonly ITileDefinitionManager __tileDefinitionManager; + private readonly ITileDefinitionManager _tileDefinitionManager; private readonly IPlacementManager _placementManager; private readonly IPrototypeManager _prototypeManager; private readonly IResourceCache _resourceCache; private readonly IConfigurationManager _configSystem; private readonly ILocalizationManager _localizationManager; -#pragma warning disable 649 - [Dependency] private readonly ISandboxManager _sandboxManager; - [Dependency] private readonly IClientConGroupController _conGroupController; -#pragma warning restore 649 private BaseButton DisconnectButton; private BaseButton QuitButton; @@ -41,7 +36,7 @@ namespace Content.Client.UserInterface _configSystem = configSystem; _localizationManager = localizationManager; _console = console; - __tileDefinitionManager = tileDefinitionManager; + _tileDefinitionManager = tileDefinitionManager; _placementManager = placementManager; _prototypeManager = prototypeManager; _resourceCache = resourceCache; diff --git a/Content.Client/UserInterface/GameHud.cs b/Content.Client/UserInterface/GameHud.cs index 318e1c051f..fa2c6cf000 100644 --- a/Content.Client/UserInterface/GameHud.cs +++ b/Content.Client/UserInterface/GameHud.cs @@ -8,12 +8,10 @@ using Robust.Client.Interfaces.Input; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; -using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; -using static Robust.Client.UserInterface.Control; namespace Content.Client.UserInterface { diff --git a/Content.Client/UserInterface/GhostGui.cs b/Content.Client/UserInterface/GhostGui.cs index 959b3beff6..5ac6e1a7cc 100644 --- a/Content.Client/UserInterface/GhostGui.cs +++ b/Content.Client/UserInterface/GhostGui.cs @@ -1,4 +1,3 @@ -using System.Data; using Content.Client.GameObjects.Components.Observer; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; diff --git a/Content.Client/UserInterface/HumanoidProfileEditor.cs b/Content.Client/UserInterface/HumanoidProfileEditor.cs index 8bcc069762..625cffd16e 100644 --- a/Content.Client/UserInterface/HumanoidProfileEditor.cs +++ b/Content.Client/UserInterface/HumanoidProfileEditor.cs @@ -3,11 +3,9 @@ using System.Collections.Generic; using System.Linq; using Content.Client.GameObjects.Components; using Content.Client.Interfaces; -using Content.Client.Utility; using Content.Shared; -using Content.Shared.Jobs; -using Content.Shared.Antags; using Content.Shared.Preferences; +using Content.Shared.Roles; using Robust.Client.Graphics.Drawing; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; @@ -18,7 +16,6 @@ using Robust.Shared.Localization; using Robust.Shared.Maths; using Robust.Shared.Prototypes; using Robust.Shared.Utility; -using static Content.Client.StaticIoC; namespace Content.Client.UserInterface { diff --git a/Content.Client/UserInterface/IItemSlotManager.cs b/Content.Client/UserInterface/IItemSlotManager.cs index 9c23325976..f6f34c7903 100644 --- a/Content.Client/UserInterface/IItemSlotManager.cs +++ b/Content.Client/UserInterface/IItemSlotManager.cs @@ -1,5 +1,4 @@ -using Content.Client.GameObjects; -using Robust.Client.UserInterface; +using Robust.Client.UserInterface; using Robust.Shared.Interfaces.GameObjects; namespace Content.Client.UserInterface diff --git a/Content.Client/UserInterface/ItemSlotButton.cs b/Content.Client/UserInterface/ItemSlotButton.cs index 1438b48c88..24ed144d4c 100644 --- a/Content.Client/UserInterface/ItemSlotButton.cs +++ b/Content.Client/UserInterface/ItemSlotButton.cs @@ -1,5 +1,4 @@ using System; -using Content.Shared.GameObjects.Components.Items; using Robust.Client.Graphics; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; diff --git a/Content.Client/UserInterface/ItemSlotManager.cs b/Content.Client/UserInterface/ItemSlotManager.cs index ff8872553d..d7d4c1e78d 100644 --- a/Content.Client/UserInterface/ItemSlotManager.cs +++ b/Content.Client/UserInterface/ItemSlotManager.cs @@ -1,17 +1,12 @@ -using System; -using Content.Client.GameObjects; -using Content.Client.GameObjects.Components.Storage; +using Content.Client.GameObjects.Components.Storage; using Content.Client.GameObjects.EntitySystems; -using Content.Client.Utility; using Content.Shared.GameObjects.Components.Items; using Content.Shared.Input; using Robust.Client.GameObjects; using Robust.Client.GameObjects.EntitySystems; -using Robust.Client.Graphics; using Robust.Client.Interfaces.GameObjects.Components; using Robust.Client.Interfaces.Graphics.ClientEye; using Robust.Client.Interfaces.Input; -using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.Player; using Robust.Client.UserInterface; using Robust.Shared.Input; @@ -112,7 +107,7 @@ namespace Content.Client.UserInterface var progress = (_gameTiming.CurTime - start).TotalSeconds / length; var ratio = (progress <= 1 ? (1 - progress) : (_gameTiming.CurTime - end).TotalSeconds * -5); - cooldownDisplay.Progress = (float)ratio.Clamp(-1, 1); + cooldownDisplay.Progress = FloatMath.Clamp((float)ratio, -1, 1); if (ratio > -1f) { diff --git a/Content.Client/UserInterface/LateJoinGui.cs b/Content.Client/UserInterface/LateJoinGui.cs index 02edca1d92..30f662ae80 100644 --- a/Content.Client/UserInterface/LateJoinGui.cs +++ b/Content.Client/UserInterface/LateJoinGui.cs @@ -1,19 +1,18 @@ +using System; +using System.Linq; +using Content.Shared.Roles; using Robust.Client.Console; using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; using Robust.Client.Utility; -using Content.Shared.Jobs; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Log; using Robust.Shared.Maths; using Robust.Shared.Prototypes; using Robust.Shared.Utility; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Robust.Client.UserInterface.CustomControls +namespace Content.Client.UserInterface { public sealed class LateJoinGui : SS14Window { diff --git a/Content.Client/UserInterface/LobbyCharacterPreviewPanel.cs b/Content.Client/UserInterface/LobbyCharacterPreviewPanel.cs index c5df73e001..b4dcdca7fb 100644 --- a/Content.Client/UserInterface/LobbyCharacterPreviewPanel.cs +++ b/Content.Client/UserInterface/LobbyCharacterPreviewPanel.cs @@ -1,10 +1,10 @@ using System.Linq; -using Content.Client.GameObjects; +using Content.Client.GameObjects.Components.HUD.Inventory; using Content.Client.GameObjects.Components.Mobs; using Content.Client.Interfaces; using Content.Shared; -using Content.Shared.Jobs; using Content.Shared.Preferences; +using Content.Shared.Roles; using Robust.Client.Interfaces.GameObjects.Components; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; diff --git a/Content.Client/UserInterface/RoundEndSummaryWindow.cs b/Content.Client/UserInterface/RoundEndSummaryWindow.cs index 5e8600b188..5f2d736d9c 100644 --- a/Content.Client/UserInterface/RoundEndSummaryWindow.cs +++ b/Content.Client/UserInterface/RoundEndSummaryWindow.cs @@ -1,19 +1,12 @@ -using Robust.Client.Graphics; -using Robust.Client.Interfaces.Input; -using Robust.Client.Interfaces.ResourceManagement; -using Robust.Client.ResourceManagement; +using System; +using System.Collections.Generic; +using System.Linq; +using Content.Client.Utility; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; -using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; -using Content.Client.Utility; -using Robust.Client.Player; -using System.Linq; -using System.Collections.Generic; -using static Robust.Client.UserInterface.Controls.ItemList; using static Content.Shared.SharedGameTicker; -using System; namespace Content.Client.UserInterface { diff --git a/Content.Client/UserInterface/StrippingMenu.cs b/Content.Client/UserInterface/StrippingMenu.cs new file mode 100644 index 0000000000..3088bd4270 --- /dev/null +++ b/Content.Client/UserInterface/StrippingMenu.cs @@ -0,0 +1,64 @@ +using System; +using Content.Client.UserInterface.Stylesheets; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.Map; +using Robust.Shared.Maths; + +namespace Content.Client.UserInterface +{ + public class StrippingMenu : SS14Window + { + protected override Vector2? CustomSize => new Vector2(400, 600); + + private readonly VBoxContainer _vboxContainer; + + public StrippingMenu(string title) + { + Title = title; + + _vboxContainer = new VBoxContainer() + { + SizeFlagsVertical = SizeFlags.FillExpand, + SeparationOverride = 5, + }; + + Contents.AddChild(_vboxContainer); + } + + public void ClearButtons() + { + _vboxContainer.DisposeAllChildren(); + } + + public void AddButton(string title, string name, Action onPressed) + { + var button = new Button() + { + Text = name, + StyleClasses = { StyleBase.ButtonOpenRight } + }; + + button.OnPressed += onPressed; + + _vboxContainer.AddChild(new HBoxContainer() + { + SizeFlagsHorizontal = SizeFlags.FillExpand, + SeparationOverride = 5, + Children = + { + new Label() + { + Text = $"{title}:" + }, + new Control() + { + SizeFlagsHorizontal = SizeFlags.FillExpand + }, + button, + } + }); + } + } +} diff --git a/Content.IntegrationTests/Tests/AI/AiControllerTest.cs b/Content.IntegrationTests/Tests/AI/AiControllerTest.cs index 7c2b1b3371..12517b2092 100644 --- a/Content.IntegrationTests/Tests/AI/AiControllerTest.cs +++ b/Content.IntegrationTests/Tests/AI/AiControllerTest.cs @@ -1,23 +1,19 @@ -using NUnit.Framework; -using Robust.Shared.GameObjects; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Map; -using Robust.Shared.Map; -using Robust.Shared.Prototypes; -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Content.Server.GameObjects.Components.Movement; -using Content.Shared.VendingMachines; +using NUnit.Framework; using Robust.Server.AI; -using Robust.Shared.Log; -using Robust.Server.Interfaces.Maps; -using Robust.Server.Interfaces.Timing; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Reflection; using Robust.Shared.IoC; +using Robust.Shared.Map; using Robust.Shared.Maths; +using Robust.Shared.Prototypes; -namespace Content.IntegrationTests.Tests +namespace Content.IntegrationTests.Tests.AI { [TestFixture] [TestOf(typeof(AiControllerTest))] @@ -47,7 +43,7 @@ namespace Content.IntegrationTests.Tests Assert.That(attrib != null, $"No AiLogicProcessorAttribute found on {processor.Name}"); processorNames.Add(attrib.SerializeName); } - + foreach (var entity in prototypeManager.EnumeratePrototypes()) { var comps = entity.Components; diff --git a/Content.IntegrationTests/Tests/BuckleTest.cs b/Content.IntegrationTests/Tests/BuckleTest.cs index 34049ade76..e2ada13caa 100644 --- a/Content.IntegrationTests/Tests/BuckleTest.cs +++ b/Content.IntegrationTests/Tests/BuckleTest.cs @@ -1,5 +1,6 @@ using System.Threading.Tasks; using Content.Server.GameObjects.Components.Buckle; +using Content.Server.GameObjects.Components.Strap; using Content.Shared.GameObjects.Components.Buckle; using Content.Shared.GameObjects.EntitySystems; using NUnit.Framework; @@ -7,7 +8,6 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Map; -using StrapComponent = Content.Server.GameObjects.Components.Strap.StrapComponent; namespace Content.IntegrationTests.Tests { diff --git a/Content.IntegrationTests/Tests/ContainerOcclusionTest.cs b/Content.IntegrationTests/Tests/ContainerOcclusionTest.cs index c3b84b42b5..3ab0b0c837 100644 --- a/Content.IntegrationTests/Tests/ContainerOcclusionTest.cs +++ b/Content.IntegrationTests/Tests/ContainerOcclusionTest.cs @@ -1,6 +1,5 @@ using System.Linq; using System.Threading.Tasks; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Items.Storage; using NUnit.Framework; using Robust.Client.GameObjects; diff --git a/Content.IntegrationTests/Tests/Disposal/DisposalUnitTest.cs b/Content.IntegrationTests/Tests/Disposal/DisposalUnitTest.cs index b8d887ead5..15b2167631 100644 --- a/Content.IntegrationTests/Tests/Disposal/DisposalUnitTest.cs +++ b/Content.IntegrationTests/Tests/Disposal/DisposalUnitTest.cs @@ -5,7 +5,6 @@ using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Disposal; using Content.Server.GameObjects.Components.Power.ApcNetComponents; using NUnit.Framework; -using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; diff --git a/Content.IntegrationTests/Tests/DoAfter/DoAfterServerTest.cs b/Content.IntegrationTests/Tests/DoAfter/DoAfterServerTest.cs index 7ddb2ef944..5c6fdcfe38 100644 --- a/Content.IntegrationTests/Tests/DoAfter/DoAfterServerTest.cs +++ b/Content.IntegrationTests/Tests/DoAfter/DoAfterServerTest.cs @@ -1,7 +1,7 @@ using System.Threading; using System.Threading.Tasks; using Content.Server.GameObjects.Components; -using Content.Server.GameObjects.EntitySystems; +using Content.Server.GameObjects.EntitySystems.DoAfter; using NUnit.Framework; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; @@ -9,7 +9,6 @@ using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Map; -using Robust.Shared.Maths; namespace Content.IntegrationTests.Tests.DoAfter { @@ -35,7 +34,7 @@ namespace Content.IntegrationTests.Tests.DoAfter var args = new DoAfterEventArgs(mob, tickTime / 2, cancelToken.Token); task = EntitySystem.Get().DoAfter(args); }); - + await server.WaitRunTicks(1); Assert.That(task.Result == DoAfterStatus.Finished); } @@ -63,4 +62,4 @@ namespace Content.IntegrationTests.Tests.DoAfter Assert.That(task.Result == DoAfterStatus.Cancelled, $"Result was {task.Result}"); } } -} \ No newline at end of file +} diff --git a/Content.IntegrationTests/Tests/EntityTest.cs b/Content.IntegrationTests/Tests/EntityTest.cs index 288105ab42..4df604e4ad 100644 --- a/Content.IntegrationTests/Tests/EntityTest.cs +++ b/Content.IntegrationTests/Tests/EntityTest.cs @@ -1,20 +1,21 @@ -using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using NUnit.Framework; +using Robust.Server.Interfaces.Maps; +using Robust.Server.Interfaces.Timing; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; -using Robust.Shared.Map; -using Robust.Shared.Prototypes; -using System; -using System.Collections.Generic; -using System.Threading.Tasks; using Robust.Shared.Log; -using Robust.Server.Interfaces.Maps; -using Robust.Server.Interfaces.Timing; +using Robust.Shared.Map; +using Robust.Shared.Maths; +using Robust.Shared.Prototypes; namespace Content.IntegrationTests.Tests { [TestFixture] - [TestOf(typeof(Robust.Shared.GameObjects.Entity))] + [TestOf(typeof(Entity))] public class EntityTest : ContentIntegrationTest { [Test] @@ -41,7 +42,7 @@ namespace Content.IntegrationTests.Tests server.Assert(() => { - var testLocation = new GridCoordinates(new Robust.Shared.Maths.Vector2(0, 0), grid); + var testLocation = new GridCoordinates(new Vector2(0, 0), grid); //Generate list of non-abstract prototypes to test foreach (var prototype in prototypeMan.EnumeratePrototypes()) diff --git a/Content.IntegrationTests/Tests/GravityGridTest.cs b/Content.IntegrationTests/Tests/GravityGridTest.cs index dcf9b23d3f..82c694b26a 100644 --- a/Content.IntegrationTests/Tests/GravityGridTest.cs +++ b/Content.IntegrationTests/Tests/GravityGridTest.cs @@ -1,8 +1,6 @@ using System.Threading.Tasks; -using Content.Client.GameObjects.Components.Gravity; using Content.Server.GameObjects.Components.Gravity; using Content.Server.GameObjects.Components.Power.ApcNetComponents; -using Content.Server.GameObjects.Components.Power; using NUnit.Framework; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; diff --git a/Content.IntegrationTests/Tests/HumanInventoryUniformSlotsTest.cs b/Content.IntegrationTests/Tests/HumanInventoryUniformSlotsTest.cs index 2281118b12..3f2b1ca4f8 100644 --- a/Content.IntegrationTests/Tests/HumanInventoryUniformSlotsTest.cs +++ b/Content.IntegrationTests/Tests/HumanInventoryUniformSlotsTest.cs @@ -1,11 +1,10 @@ using System.Threading.Tasks; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.GUI; using NUnit.Framework; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Map; -using Robust.Shared.Maths; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; namespace Content.IntegrationTests.Tests diff --git a/Content.IntegrationTests/Tests/StationEvents/StationEventsSystemTest.cs b/Content.IntegrationTests/Tests/StationEvents/StationEventsSystemTest.cs new file mode 100644 index 0000000000..2e115930ed --- /dev/null +++ b/Content.IntegrationTests/Tests/StationEvents/StationEventsSystemTest.cs @@ -0,0 +1,44 @@ +using System.Threading.Tasks; +using Content.Server.GameObjects.EntitySystems; +using Content.Server.GameObjects.EntitySystems.StationEvents; +using NUnit.Framework; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.Timing; +using Robust.Shared.IoC; + +namespace Content.IntegrationTests.Tests.StationEvents +{ + [TestFixture] + public class StationEventsSystemTest : ContentIntegrationTest + { + [Test] + public async Task Test() + { + var server = StartServerDummyTicker(); + + server.Assert(() => + { + // Idle each event once + var stationEventsSystem = EntitySystem.Get(); + var dummyFrameTime = (float) IoCManager.Resolve().TickPeriod.TotalSeconds; + + foreach (var stationEvent in stationEventsSystem.StationEvents) + { + stationEvent.Startup(); + stationEvent.Update(dummyFrameTime); + stationEvent.Shutdown(); + Assert.That(stationEvent.Occurrences == 1); + } + + stationEventsSystem.ResettingCleanup(); + + foreach (var stationEvent in stationEventsSystem.StationEvents) + { + Assert.That(stationEvent.Occurrences == 0); + } + }); + + await server.WaitIdleAsync(); + } + } +} \ No newline at end of file diff --git a/Content.Server.Database/Migrations/Postgres/PostgresPreferencesDbContextModelSnapshot.cs b/Content.Server.Database/Migrations/Postgres/PostgresPreferencesDbContextModelSnapshot.cs index 0343886635..9429c9c003 100644 --- a/Content.Server.Database/Migrations/Postgres/PostgresPreferencesDbContextModelSnapshot.cs +++ b/Content.Server.Database/Migrations/Postgres/PostgresPreferencesDbContextModelSnapshot.cs @@ -1,8 +1,7 @@ // -using Content.Server.Database; + using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; namespace Content.Server.Database.Migrations.Postgres diff --git a/Content.Server.Database/Migrations/Sqlite/20200118020532_initial.Designer.cs b/Content.Server.Database/Migrations/Sqlite/20200118020532_initial.Designer.cs index 001d5c6a29..a0cfca0af8 100644 --- a/Content.Server.Database/Migrations/Sqlite/20200118020532_initial.Designer.cs +++ b/Content.Server.Database/Migrations/Sqlite/20200118020532_initial.Designer.cs @@ -1,11 +1,10 @@ // -using Content.Server.Database; + using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -namespace Content.Server.Database.Migrations +namespace Content.Server.Database.Migrations.Sqlite { [DbContext(typeof(SqlitePreferencesDbContext))] [Migration("20200118020532_initial")] diff --git a/Content.Server.Database/Migrations/Sqlite/20200118020532_initial.cs b/Content.Server.Database/Migrations/Sqlite/20200118020532_initial.cs index 69fdb24764..9fdf32e225 100644 --- a/Content.Server.Database/Migrations/Sqlite/20200118020532_initial.cs +++ b/Content.Server.Database/Migrations/Sqlite/20200118020532_initial.cs @@ -1,6 +1,6 @@ using Microsoft.EntityFrameworkCore.Migrations; -namespace Content.Server.Database.Migrations +namespace Content.Server.Database.Migrations.Sqlite { public partial class initial : Migration { diff --git a/Content.Server.Database/Migrations/Sqlite/20200118195640_jobs.Designer.cs b/Content.Server.Database/Migrations/Sqlite/20200118195640_jobs.Designer.cs index 24a875c25c..c7235a5ef9 100644 --- a/Content.Server.Database/Migrations/Sqlite/20200118195640_jobs.Designer.cs +++ b/Content.Server.Database/Migrations/Sqlite/20200118195640_jobs.Designer.cs @@ -1,11 +1,10 @@ // -using Content.Server.Database; + using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -namespace Content.Server.Database.Migrations +namespace Content.Server.Database.Migrations.Sqlite { [DbContext(typeof(SqlitePreferencesDbContext))] [Migration("20200118195640_jobs")] diff --git a/Content.Server.Database/Migrations/Sqlite/20200118195640_jobs.cs b/Content.Server.Database/Migrations/Sqlite/20200118195640_jobs.cs index 09a47891ba..44b8beb651 100644 --- a/Content.Server.Database/Migrations/Sqlite/20200118195640_jobs.cs +++ b/Content.Server.Database/Migrations/Sqlite/20200118195640_jobs.cs @@ -1,6 +1,6 @@ using Microsoft.EntityFrameworkCore.Migrations; -namespace Content.Server.Database.Migrations +namespace Content.Server.Database.Migrations.Sqlite { public partial class jobs : Migration { diff --git a/Content.Server.Database/Migrations/Sqlite/20200119103426_preferenceUnavailable.Designer.cs b/Content.Server.Database/Migrations/Sqlite/20200119103426_preferenceUnavailable.Designer.cs index c0aab2caeb..4b13876840 100644 --- a/Content.Server.Database/Migrations/Sqlite/20200119103426_preferenceUnavailable.Designer.cs +++ b/Content.Server.Database/Migrations/Sqlite/20200119103426_preferenceUnavailable.Designer.cs @@ -1,11 +1,10 @@ // -using Content.Server.Database; + using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -namespace Content.Server.Database.Migrations +namespace Content.Server.Database.Migrations.Sqlite { [DbContext(typeof(SqlitePreferencesDbContext))] [Migration("20200119103426_preferenceUnavailable")] diff --git a/Content.Server.Database/Migrations/Sqlite/20200119103426_preferenceUnavailable.cs b/Content.Server.Database/Migrations/Sqlite/20200119103426_preferenceUnavailable.cs index 453b1cff60..e5091391f2 100644 --- a/Content.Server.Database/Migrations/Sqlite/20200119103426_preferenceUnavailable.cs +++ b/Content.Server.Database/Migrations/Sqlite/20200119103426_preferenceUnavailable.cs @@ -1,6 +1,6 @@ using Microsoft.EntityFrameworkCore.Migrations; -namespace Content.Server.Database.Migrations +namespace Content.Server.Database.Migrations.Sqlite { public partial class preferenceUnavailable : Migration { diff --git a/Content.Server.Database/Migrations/Sqlite/SqlitePreferencesDbContextModelSnapshot.cs b/Content.Server.Database/Migrations/Sqlite/SqlitePreferencesDbContextModelSnapshot.cs index 60b7c39f14..5715275f50 100644 --- a/Content.Server.Database/Migrations/Sqlite/SqlitePreferencesDbContextModelSnapshot.cs +++ b/Content.Server.Database/Migrations/Sqlite/SqlitePreferencesDbContextModelSnapshot.cs @@ -1,10 +1,9 @@ // -using Content.Server.Database; + using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -namespace Content.Server.Database.Migrations +namespace Content.Server.Database.Migrations.Sqlite { [DbContext(typeof(SqlitePreferencesDbContext))] partial class SqlitePreferencesDbContextModelSnapshot : ModelSnapshot diff --git a/Content.Server/AI/Operators/Combat/Melee/SwingMeleeWeaponOperator.cs b/Content.Server/AI/Operators/Combat/Melee/SwingMeleeWeaponOperator.cs index 9f47dff826..d9c6ce5383 100644 --- a/Content.Server/AI/Operators/Combat/Melee/SwingMeleeWeaponOperator.cs +++ b/Content.Server/AI/Operators/Combat/Melee/SwingMeleeWeaponOperator.cs @@ -1,8 +1,6 @@ -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Weapon.Melee; -using Content.Server.GameObjects.EntitySystems; using Content.Server.GameObjects.EntitySystems.Click; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Operators/Combat/Melee/UnarmedCombatOperator.cs b/Content.Server/AI/Operators/Combat/Melee/UnarmedCombatOperator.cs index a0bade8ae3..0a6b6697fe 100644 --- a/Content.Server/AI/Operators/Combat/Melee/UnarmedCombatOperator.cs +++ b/Content.Server/AI/Operators/Combat/Melee/UnarmedCombatOperator.cs @@ -1,7 +1,5 @@ -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Weapon.Melee; -using Content.Server.GameObjects.EntitySystems; using Content.Server.GameObjects.EntitySystems.Click; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Operators/Inventory/CloseStorageOperator.cs b/Content.Server/AI/Operators/Inventory/CloseStorageOperator.cs index 7876711556..8753fb6115 100644 --- a/Content.Server/AI/Operators/Inventory/CloseStorageOperator.cs +++ b/Content.Server/AI/Operators/Inventory/CloseStorageOperator.cs @@ -1,6 +1,5 @@ using Content.Server.AI.Utility; using Content.Server.AI.WorldState.States.Inventory; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.Utility; using Content.Shared.Interfaces.GameObjects.Components; diff --git a/Content.Server/AI/Operators/Inventory/DropEntityOperator.cs b/Content.Server/AI/Operators/Inventory/DropEntityOperator.cs index 1e2450d791..94778ff169 100644 --- a/Content.Server/AI/Operators/Inventory/DropEntityOperator.cs +++ b/Content.Server/AI/Operators/Inventory/DropEntityOperator.cs @@ -1,7 +1,5 @@ -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Log; namespace Content.Server.AI.Operators.Inventory { diff --git a/Content.Server/AI/Operators/Inventory/DropHandItemsOperator.cs b/Content.Server/AI/Operators/Inventory/DropHandItemsOperator.cs index dd3c45bd46..65b0ef9f03 100644 --- a/Content.Server/AI/Operators/Inventory/DropHandItemsOperator.cs +++ b/Content.Server/AI/Operators/Inventory/DropHandItemsOperator.cs @@ -1,4 +1,3 @@ -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/Operators/Inventory/EquipEntityOperator.cs b/Content.Server/AI/Operators/Inventory/EquipEntityOperator.cs index 64eafaffd2..9e1348c5a1 100644 --- a/Content.Server/AI/Operators/Inventory/EquipEntityOperator.cs +++ b/Content.Server/AI/Operators/Inventory/EquipEntityOperator.cs @@ -1,4 +1,3 @@ -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/Operators/Inventory/OpenStorageOperator.cs b/Content.Server/AI/Operators/Inventory/OpenStorageOperator.cs index b27b58c3ea..07eeb3e911 100644 --- a/Content.Server/AI/Operators/Inventory/OpenStorageOperator.cs +++ b/Content.Server/AI/Operators/Inventory/OpenStorageOperator.cs @@ -1,6 +1,5 @@ using Content.Server.AI.Utility; using Content.Server.AI.WorldState.States.Inventory; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.Utility; using Content.Shared.Interfaces.GameObjects.Components; diff --git a/Content.Server/AI/Operators/Inventory/PickupEntityOperator.cs b/Content.Server/AI/Operators/Inventory/PickupEntityOperator.cs index 69061a6382..6b5b438663 100644 --- a/Content.Server/AI/Operators/Inventory/PickupEntityOperator.cs +++ b/Content.Server/AI/Operators/Inventory/PickupEntityOperator.cs @@ -1,5 +1,5 @@ -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.EntitySystems.Click; using Content.Server.Utility; using Robust.Shared.Containers; diff --git a/Content.Server/AI/Operators/Inventory/UseItemInHandsOperator.cs b/Content.Server/AI/Operators/Inventory/UseItemInHandsOperator.cs index e8e667270f..130b139ad0 100644 --- a/Content.Server/AI/Operators/Inventory/UseItemInHandsOperator.cs +++ b/Content.Server/AI/Operators/Inventory/UseItemInHandsOperator.cs @@ -1,5 +1,5 @@ -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Robust.Shared.Interfaces.GameObjects; namespace Content.Server.AI.Operators.Inventory diff --git a/Content.Server/AI/Operators/Movement/MoveToEntityOperator.cs b/Content.Server/AI/Operators/Movement/MoveToEntityOperator.cs index ed4a10e692..dd1d2120c8 100644 --- a/Content.Server/AI/Operators/Movement/MoveToEntityOperator.cs +++ b/Content.Server/AI/Operators/Movement/MoveToEntityOperator.cs @@ -1,5 +1,4 @@ using System; -using System.IO; using Content.Server.GameObjects.EntitySystems.AI.Steering; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/Utility/Actions/Clothing/Gloves/PickUpGloves.cs b/Content.Server/AI/Utility/Actions/Clothing/Gloves/PickUpGloves.cs index 85df65dbfc..3558bca497 100644 --- a/Content.Server/AI/Utility/Actions/Clothing/Gloves/PickUpGloves.cs +++ b/Content.Server/AI/Utility/Actions/Clothing/Gloves/PickUpGloves.cs @@ -2,13 +2,11 @@ using System; using System.Collections.Generic; using Content.Server.AI.Operators.Sequences; using Content.Server.AI.Utility.Considerations; -using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.Utility.Considerations.Containers; using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.Utility.Considerations.Movement; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/Actions/Clothing/Head/EquipHead.cs b/Content.Server/AI/Utility/Actions/Clothing/Head/EquipHead.cs index 7bffe3d92d..8e37b88f5d 100644 --- a/Content.Server/AI/Utility/Actions/Clothing/Head/EquipHead.cs +++ b/Content.Server/AI/Utility/Actions/Clothing/Head/EquipHead.cs @@ -3,11 +3,9 @@ using System.Collections.Generic; using Content.Server.AI.Operators; using Content.Server.AI.Operators.Inventory; using Content.Server.AI.Utility.Considerations; -using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/Actions/Clothing/Head/PickUpHead.cs b/Content.Server/AI/Utility/Actions/Clothing/Head/PickUpHead.cs index ba91121254..ca0ee164d6 100644 --- a/Content.Server/AI/Utility/Actions/Clothing/Head/PickUpHead.cs +++ b/Content.Server/AI/Utility/Actions/Clothing/Head/PickUpHead.cs @@ -2,13 +2,11 @@ using System; using System.Collections.Generic; using Content.Server.AI.Operators.Sequences; using Content.Server.AI.Utility.Considerations; -using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.Utility.Considerations.Containers; using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.Utility.Considerations.Movement; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/Actions/Clothing/OuterClothing/EquipOuterClothing.cs b/Content.Server/AI/Utility/Actions/Clothing/OuterClothing/EquipOuterClothing.cs index 9955cc49aa..53e83765a1 100644 --- a/Content.Server/AI/Utility/Actions/Clothing/OuterClothing/EquipOuterClothing.cs +++ b/Content.Server/AI/Utility/Actions/Clothing/OuterClothing/EquipOuterClothing.cs @@ -3,11 +3,9 @@ using System.Collections.Generic; using Content.Server.AI.Operators; using Content.Server.AI.Operators.Inventory; using Content.Server.AI.Utility.Considerations; -using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/Actions/Clothing/OuterClothing/PickUpOuterClothing.cs b/Content.Server/AI/Utility/Actions/Clothing/OuterClothing/PickUpOuterClothing.cs index 22730f3659..75e72dfbd9 100644 --- a/Content.Server/AI/Utility/Actions/Clothing/OuterClothing/PickUpOuterClothing.cs +++ b/Content.Server/AI/Utility/Actions/Clothing/OuterClothing/PickUpOuterClothing.cs @@ -2,13 +2,11 @@ using System; using System.Collections.Generic; using Content.Server.AI.Operators.Sequences; using Content.Server.AI.Utility.Considerations; -using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.Utility.Considerations.Containers; using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.Utility.Considerations.Movement; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/Actions/Clothing/Shoes/EquipShoes.cs b/Content.Server/AI/Utility/Actions/Clothing/Shoes/EquipShoes.cs index 218e218c35..07f0da5f8b 100644 --- a/Content.Server/AI/Utility/Actions/Clothing/Shoes/EquipShoes.cs +++ b/Content.Server/AI/Utility/Actions/Clothing/Shoes/EquipShoes.cs @@ -3,11 +3,9 @@ using System.Collections.Generic; using Content.Server.AI.Operators; using Content.Server.AI.Operators.Inventory; using Content.Server.AI.Utility.Considerations; -using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/Actions/Clothing/Shoes/PickUpShoes.cs b/Content.Server/AI/Utility/Actions/Clothing/Shoes/PickUpShoes.cs index 00cd4b1cd9..39559bedb6 100644 --- a/Content.Server/AI/Utility/Actions/Clothing/Shoes/PickUpShoes.cs +++ b/Content.Server/AI/Utility/Actions/Clothing/Shoes/PickUpShoes.cs @@ -2,13 +2,11 @@ using System; using System.Collections.Generic; using Content.Server.AI.Operators.Sequences; using Content.Server.AI.Utility.Considerations; -using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.Utility.Considerations.Containers; using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.Utility.Considerations.Movement; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/Actions/Combat/Melee/MeleeWeaponAttackEntity.cs b/Content.Server/AI/Utility/Actions/Combat/Melee/MeleeWeaponAttackEntity.cs index 28335ace75..e0df81467c 100644 --- a/Content.Server/AI/Utility/Actions/Combat/Melee/MeleeWeaponAttackEntity.cs +++ b/Content.Server/AI/Utility/Actions/Combat/Melee/MeleeWeaponAttackEntity.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using Content.Server.AI.Operators; -using Content.Server.AI.Operators.Combat; using Content.Server.AI.Operators.Combat.Melee; using Content.Server.AI.Operators.Movement; using Content.Server.AI.Utility.Considerations; diff --git a/Content.Server/AI/Utility/Actions/Combat/Melee/PickUpMeleeWeapon.cs b/Content.Server/AI/Utility/Actions/Combat/Melee/PickUpMeleeWeapon.cs index 708afc240e..fed29d402a 100644 --- a/Content.Server/AI/Utility/Actions/Combat/Melee/PickUpMeleeWeapon.cs +++ b/Content.Server/AI/Utility/Actions/Combat/Melee/PickUpMeleeWeapon.cs @@ -4,7 +4,6 @@ using Content.Server.AI.Operators.Sequences; using Content.Server.AI.Utility.Considerations; using Content.Server.AI.Utility.Considerations.Combat.Melee; using Content.Server.AI.Utility.Considerations.Containers; -using Content.Server.AI.Utility.Considerations.Hands; using Content.Server.AI.Utility.Considerations.Movement; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; diff --git a/Content.Server/AI/Utility/Actions/Combat/Melee/UnarmedAttackEntity.cs b/Content.Server/AI/Utility/Actions/Combat/Melee/UnarmedAttackEntity.cs index 5735b884e7..62c15cffd7 100644 --- a/Content.Server/AI/Utility/Actions/Combat/Melee/UnarmedAttackEntity.cs +++ b/Content.Server/AI/Utility/Actions/Combat/Melee/UnarmedAttackEntity.cs @@ -5,7 +5,6 @@ using Content.Server.AI.Operators.Combat.Melee; using Content.Server.AI.Operators.Movement; using Content.Server.AI.Utility.Considerations; using Content.Server.AI.Utility.Considerations.Combat; -using Content.Server.AI.Utility.Considerations.Combat.Melee; using Content.Server.AI.Utility.Considerations.Containers; using Content.Server.AI.Utility.Considerations.Movement; using Content.Server.AI.WorldState; diff --git a/Content.Server/AI/Utility/Actions/IAiUtility.cs b/Content.Server/AI/Utility/Actions/IAiUtility.cs index 679d410cb7..6eef451235 100644 --- a/Content.Server/AI/Utility/Actions/IAiUtility.cs +++ b/Content.Server/AI/Utility/Actions/IAiUtility.cs @@ -1,5 +1,3 @@ -using Content.Server.AI.Utility.AiLogic; - namespace Content.Server.AI.Utility.Actions { public interface IAiUtility diff --git a/Content.Server/AI/Utility/Actions/Idle/WanderAndWait.cs b/Content.Server/AI/Utility/Actions/Idle/WanderAndWait.cs index ce68e46d78..5cb13cea2c 100644 --- a/Content.Server/AI/Utility/Actions/Idle/WanderAndWait.cs +++ b/Content.Server/AI/Utility/Actions/Idle/WanderAndWait.cs @@ -5,17 +5,15 @@ using Content.Server.AI.Operators.Generic; using Content.Server.AI.Operators.Movement; using Content.Server.AI.Utility.Considerations; using Content.Server.AI.Utility.Considerations.ActionBlocker; -using Content.Server.AI.Utility.Considerations.Containers; using Content.Server.AI.WorldState; +using Content.Server.GameObjects.EntitySystems.AI.Pathfinding; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible; -using Content.Server.GameObjects.EntitySystems.Pathfinding; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Map; -using Robust.Shared.Maths; using Robust.Shared.Random; namespace Content.Server.AI.Utility.Actions.Idle @@ -50,7 +48,7 @@ namespace Content.Server.AI.Utility.Actions.Idle new WaitOperator(waitTime), }); } - + protected override IReadOnlyCollection> GetConsiderations(Blackboard context) { var considerationsManager = IoCManager.Resolve(); @@ -75,7 +73,7 @@ namespace Content.Server.AI.Utility.Actions.Idle { return default; } - + var reachableNodes = new List(); foreach (var region in reachableRegions) diff --git a/Content.Server/AI/Utility/Actions/UtilityAction.cs b/Content.Server/AI/Utility/Actions/UtilityAction.cs index f00ee01ddf..f8be97abaa 100644 --- a/Content.Server/AI/Utility/Actions/UtilityAction.cs +++ b/Content.Server/AI/Utility/Actions/UtilityAction.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using Content.Server.AI.Operators; -using Content.Server.AI.Utility.Considerations; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States.Utility; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/Utility/AiLogic/UtilityAI.cs b/Content.Server/AI/Utility/AiLogic/UtilityAI.cs index 791727b637..005a30a9bc 100644 --- a/Content.Server/AI/Utility/AiLogic/UtilityAI.cs +++ b/Content.Server/AI/Utility/AiLogic/UtilityAI.cs @@ -2,12 +2,12 @@ using System; using System.Collections.Generic; using System.Threading; using Content.Server.AI.Operators; -using Content.Server.AI.Operators.Generic; using Content.Server.AI.Utility.Actions; using Content.Server.AI.Utility.BehaviorSets; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States.Utility; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Damage; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.EntitySystems.AI.LoadBalancer; using Content.Server.GameObjects.EntitySystems.JobQueues; using Robust.Server.AI; @@ -148,7 +148,7 @@ namespace Content.Server.AI.Utility.AiLogic _isDead = false; } } - + private void ReceivedAction() { switch (_actionRequest.Exception) @@ -167,7 +167,7 @@ namespace Content.Server.AI.Utility.AiLogic { return; } - + var currentOp = CurrentAction?.ActionOperators.Peek(); if (currentOp != null && currentOp.HasStartup) { diff --git a/Content.Server/AI/Utility/BehaviorSets/BehaviorSet.cs b/Content.Server/AI/Utility/BehaviorSets/BehaviorSet.cs index 0651885c7e..d5f221a5cd 100644 --- a/Content.Server/AI/Utility/BehaviorSets/BehaviorSet.cs +++ b/Content.Server/AI/Utility/BehaviorSets/BehaviorSet.cs @@ -1,4 +1,3 @@ -using System.Collections; using System.Collections.Generic; using Content.Server.AI.Utility.Actions; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/Utility/BehaviorSets/HungerBehaviorSet.cs b/Content.Server/AI/Utility/BehaviorSets/HungerBehaviorSet.cs index a9c6117af1..b91b504418 100644 --- a/Content.Server/AI/Utility/BehaviorSets/HungerBehaviorSet.cs +++ b/Content.Server/AI/Utility/BehaviorSets/HungerBehaviorSet.cs @@ -1,6 +1,4 @@ -using System.Collections.Generic; using Content.Server.AI.Utility.Actions; -using Content.Server.AI.Utility.Actions.Nutrition; using Content.Server.AI.Utility.ExpandableActions.Nutrition; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/Utility/Considerations/Clothing/ClothingInInventoryCon.cs b/Content.Server/AI/Utility/Considerations/Clothing/ClothingInInventoryCon.cs index 5a0dce18f6..961139a648 100644 --- a/Content.Server/AI/Utility/Considerations/Clothing/ClothingInInventoryCon.cs +++ b/Content.Server/AI/Utility/Considerations/Clothing/ClothingInInventoryCon.cs @@ -1,7 +1,7 @@ using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States.Clothing; using Content.Server.AI.WorldState.States.Inventory; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; namespace Content.Server.AI.Utility.Considerations.Clothing diff --git a/Content.Server/AI/Utility/Considerations/Combat/TargetHealthCon.cs b/Content.Server/AI/Utility/Considerations/Combat/TargetHealthCon.cs index 96db4f5f35..8e70bb9200 100644 --- a/Content.Server/AI/Utility/Considerations/Combat/TargetHealthCon.cs +++ b/Content.Server/AI/Utility/Considerations/Combat/TargetHealthCon.cs @@ -1,7 +1,7 @@ using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Server.GameObjects; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Damage; namespace Content.Server.AI.Utility.Considerations.Combat { diff --git a/Content.Server/AI/Utility/Considerations/Combat/TargetIsCritCon.cs b/Content.Server/AI/Utility/Considerations/Combat/TargetIsCritCon.cs index 0fd1990748..97ed516326 100644 --- a/Content.Server/AI/Utility/Considerations/Combat/TargetIsCritCon.cs +++ b/Content.Server/AI/Utility/Considerations/Combat/TargetIsCritCon.cs @@ -1,6 +1,6 @@ using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Mobs; namespace Content.Server.AI.Utility.Considerations.Combat { diff --git a/Content.Server/AI/Utility/Considerations/Combat/TargetIsDeadCon.cs b/Content.Server/AI/Utility/Considerations/Combat/TargetIsDeadCon.cs index 8cdf0b520b..e973538e79 100644 --- a/Content.Server/AI/Utility/Considerations/Combat/TargetIsDeadCon.cs +++ b/Content.Server/AI/Utility/Considerations/Combat/TargetIsDeadCon.cs @@ -1,6 +1,6 @@ using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Mobs; namespace Content.Server.AI.Utility.Considerations.Combat { diff --git a/Content.Server/AI/Utility/Considerations/Consideration.cs b/Content.Server/AI/Utility/Considerations/Consideration.cs index f2f0a9429d..20afc4dec1 100644 --- a/Content.Server/AI/Utility/Considerations/Consideration.cs +++ b/Content.Server/AI/Utility/Considerations/Consideration.cs @@ -2,6 +2,7 @@ using System; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States.Utility; using JetBrains.Annotations; +using Robust.Shared.Maths; namespace Content.Server.AI.Utility.Considerations { @@ -16,7 +17,7 @@ namespace Content.Server.AI.Utility.Considerations var modificationFactor = 1.0f - 1.0f / considerationsCount; var makeUpValue = (1.0f - score) * modificationFactor; var adjustedScore = score + makeUpValue * score; - return Math.Clamp(adjustedScore, 0.0f, 1.0f); + return FloatMath.Clamp(adjustedScore, 0.0f, 1.0f); } [Pure] @@ -43,7 +44,7 @@ namespace Content.Server.AI.Utility.Considerations // ReSharper disable once CompareOfFloatsByEqualityOperator return x == 1.0f ? 0.0f : 1.0f; } - + public Func InverseBoolCurve(Blackboard context) { float Result() @@ -58,7 +59,7 @@ namespace Content.Server.AI.Utility.Considerations [Pure] private static float LogisticCurve(float x, float slope, float exponent, float yOffset, float xOffset) { - return Math.Clamp( + return FloatMath.Clamp( exponent * (1 / (1 + (float) Math.Pow(Math.Log(1000) * slope, -1 * x + xOffset))) + yOffset, 0.0f, 1.0f); } @@ -76,7 +77,7 @@ namespace Content.Server.AI.Utility.Considerations [Pure] private static float QuadraticCurve(float x, float slope, float exponent, float yOffset, float xOffset) { - return Math.Clamp(slope * (float) Math.Pow(x - xOffset, exponent) + yOffset, 0.0f, 1.0f); + return FloatMath.Clamp(slope * (float) Math.Pow(x - xOffset, exponent) + yOffset, 0.0f, 1.0f); } public Func QuadraticCurve(Blackboard context, float slope, float exponent, float yOffset, float xOffset) @@ -102,7 +103,7 @@ namespace Content.Server.AI.Utility.Considerations float Result() { var adjustedScore = GetAdjustedScore(context); - + switch (preset) { case Considerations.PresetCurve.Distance: diff --git a/Content.Server/AI/Utility/Considerations/Containers/TargetAccessibleCon.cs b/Content.Server/AI/Utility/Considerations/Containers/TargetAccessibleCon.cs index 5c017aaa5e..d8e9557966 100644 --- a/Content.Server/AI/Utility/Considerations/Containers/TargetAccessibleCon.cs +++ b/Content.Server/AI/Utility/Considerations/Containers/TargetAccessibleCon.cs @@ -1,9 +1,6 @@ using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Items.Storage; -using Content.Server.GameObjects.Components.Movement; -using Content.Server.GameObjects.EntitySystems.AI.Pathfinding; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible; using Content.Shared.GameObjects.EntitySystems; using Robust.Shared.Containers; diff --git a/Content.Server/AI/Utility/Considerations/Hands/FreeHandCon.cs b/Content.Server/AI/Utility/Considerations/Hands/FreeHandCon.cs index b379f46e18..67363574e9 100644 --- a/Content.Server/AI/Utility/Considerations/Hands/FreeHandCon.cs +++ b/Content.Server/AI/Utility/Considerations/Hands/FreeHandCon.cs @@ -1,6 +1,5 @@ using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; namespace Content.Server.AI.Utility.Considerations.Hands diff --git a/Content.Server/AI/Utility/Considerations/Inventory/CanPutTargetInInventoryCon.cs b/Content.Server/AI/Utility/Considerations/Inventory/CanPutTargetInInventoryCon.cs index 706054cb10..c16ca7d86a 100644 --- a/Content.Server/AI/Utility/Considerations/Inventory/CanPutTargetInInventoryCon.cs +++ b/Content.Server/AI/Utility/Considerations/Inventory/CanPutTargetInInventoryCon.cs @@ -2,7 +2,7 @@ using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Hands; using Content.Server.AI.WorldState.States.Inventory; -using Content.Server.GameObjects.Components; +using Content.Server.GameObjects.Components.Items.Storage; namespace Content.Server.AI.Utility.Considerations.Inventory { diff --git a/Content.Server/AI/Utility/Considerations/Inventory/TargetInOurInventoryCon.cs b/Content.Server/AI/Utility/Considerations/Inventory/TargetInOurInventoryCon.cs index 100f111a7e..ba00f6303d 100644 --- a/Content.Server/AI/Utility/Considerations/Inventory/TargetInOurInventoryCon.cs +++ b/Content.Server/AI/Utility/Considerations/Inventory/TargetInOurInventoryCon.cs @@ -1,8 +1,7 @@ using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Inventory; -using Content.Server.GameObjects; -using Content.Server.GameObjects.Components; +using Content.Server.GameObjects.Components.Items.Storage; namespace Content.Server.AI.Utility.Considerations.Inventory { diff --git a/Content.Server/AI/Utility/ExpandableActions/Clothing/Gloves/EquipAnyGlovesExp.cs b/Content.Server/AI/Utility/ExpandableActions/Clothing/Gloves/EquipAnyGlovesExp.cs index a022113f1b..f828ab89b8 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Clothing/Gloves/EquipAnyGlovesExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Clothing/Gloves/EquipAnyGlovesExp.cs @@ -7,7 +7,7 @@ using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Inventory; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/ExpandableActions/Clothing/Gloves/PickUpAnyNearbyGlovesExp.cs b/Content.Server/AI/Utility/ExpandableActions/Clothing/Gloves/PickUpAnyNearbyGlovesExp.cs index 50d584aa69..6128442684 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Clothing/Gloves/PickUpAnyNearbyGlovesExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Clothing/Gloves/PickUpAnyNearbyGlovesExp.cs @@ -4,11 +4,10 @@ using Content.Server.AI.Utility.Actions; using Content.Server.AI.Utility.Actions.Clothing.Gloves; using Content.Server.AI.Utility.Considerations; using Content.Server.AI.Utility.Considerations.Clothing; -using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Clothing; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/ExpandableActions/Clothing/Head/EquipAnyHeadExp.cs b/Content.Server/AI/Utility/ExpandableActions/Clothing/Head/EquipAnyHeadExp.cs index a98faf0804..2f05138436 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Clothing/Head/EquipAnyHeadExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Clothing/Head/EquipAnyHeadExp.cs @@ -7,7 +7,7 @@ using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Inventory; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/ExpandableActions/Clothing/Head/PickUpAnyNearbyHeadExp.cs b/Content.Server/AI/Utility/ExpandableActions/Clothing/Head/PickUpAnyNearbyHeadExp.cs index f1e3d0e14f..a5642f0944 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Clothing/Head/PickUpAnyNearbyHeadExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Clothing/Head/PickUpAnyNearbyHeadExp.cs @@ -4,11 +4,10 @@ using Content.Server.AI.Utility.Actions; using Content.Server.AI.Utility.Actions.Clothing.Head; using Content.Server.AI.Utility.Considerations; using Content.Server.AI.Utility.Considerations.Clothing; -using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Clothing; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/ExpandableActions/Clothing/OuterClothing/EquipAnyOuterClothingExp.cs b/Content.Server/AI/Utility/ExpandableActions/Clothing/OuterClothing/EquipAnyOuterClothingExp.cs index 548a08f774..31aaa0ae94 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Clothing/OuterClothing/EquipAnyOuterClothingExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Clothing/OuterClothing/EquipAnyOuterClothingExp.cs @@ -7,7 +7,7 @@ using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Inventory; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/ExpandableActions/Clothing/OuterClothing/PickUpAnyNearbyOuterClothingExp.cs b/Content.Server/AI/Utility/ExpandableActions/Clothing/OuterClothing/PickUpAnyNearbyOuterClothingExp.cs index 29ec45a582..f216285e72 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Clothing/OuterClothing/PickUpAnyNearbyOuterClothingExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Clothing/OuterClothing/PickUpAnyNearbyOuterClothingExp.cs @@ -4,11 +4,10 @@ using Content.Server.AI.Utility.Actions; using Content.Server.AI.Utility.Actions.Clothing.OuterClothing; using Content.Server.AI.Utility.Considerations; using Content.Server.AI.Utility.Considerations.Clothing; -using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Clothing; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/ExpandableActions/Clothing/Shoes/EquipAnyShoesExp.cs b/Content.Server/AI/Utility/ExpandableActions/Clothing/Shoes/EquipAnyShoesExp.cs index f02f7abe0f..ab0a5a2a7b 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Clothing/Shoes/EquipAnyShoesExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Clothing/Shoes/EquipAnyShoesExp.cs @@ -7,7 +7,7 @@ using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Inventory; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/ExpandableActions/Clothing/Shoes/PickUpAnyNearbyShoesExp.cs b/Content.Server/AI/Utility/ExpandableActions/Clothing/Shoes/PickUpAnyNearbyShoesExp.cs index 8a1fa9429e..0e25c67fb7 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Clothing/Shoes/PickUpAnyNearbyShoesExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Clothing/Shoes/PickUpAnyNearbyShoesExp.cs @@ -4,11 +4,10 @@ using Content.Server.AI.Utility.Actions; using Content.Server.AI.Utility.Actions.Clothing.Shoes; using Content.Server.AI.Utility.Considerations; using Content.Server.AI.Utility.Considerations.Clothing; -using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Clothing; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/EquipMeleeExp.cs b/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/EquipMeleeExp.cs index 1d993bec7b..996ff8c1ec 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/EquipMeleeExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/EquipMeleeExp.cs @@ -4,7 +4,6 @@ using Content.Server.AI.Utility.Actions; using Content.Server.AI.Utility.Actions.Combat.Melee; using Content.Server.AI.Utility.Considerations; using Content.Server.AI.Utility.Considerations.Combat.Melee; -using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Inventory; diff --git a/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/MeleeAttackNearbyPlayerExp.cs b/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/MeleeAttackNearbyPlayerExp.cs index a1ee5543bf..b54aed6274 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/MeleeAttackNearbyPlayerExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/MeleeAttackNearbyPlayerExp.cs @@ -7,7 +7,7 @@ using Content.Server.AI.Utility.Considerations.Combat.Melee; using Content.Server.AI.Utils; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Movement; using Robust.Server.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/MeleeAttackNearbySpeciesExp.cs b/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/MeleeAttackNearbySpeciesExp.cs index b78bb2812c..29937b0270 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/MeleeAttackNearbySpeciesExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/MeleeAttackNearbySpeciesExp.cs @@ -1,11 +1,9 @@ -using System; using System.Collections.Generic; using Content.Server.AI.Utility.Actions; using Content.Server.AI.Utility.Actions.Combat.Melee; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Mobs; -using Content.Server.GameObjects.Components.Movement; namespace Content.Server.AI.Utility.ExpandableActions.Combat.Melee { diff --git a/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/UnarmedAttackNearbyPlayerExp.cs b/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/UnarmedAttackNearbyPlayerExp.cs index 0fc6d162b7..74696e13e5 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/UnarmedAttackNearbyPlayerExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/UnarmedAttackNearbyPlayerExp.cs @@ -7,7 +7,7 @@ using Content.Server.AI.Utility.Considerations.Combat.Melee; using Content.Server.AI.Utils; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Movement; using Robust.Server.GameObjects; using Robust.Shared.IoC; @@ -47,4 +47,4 @@ namespace Content.Server.AI.Utility.ExpandableActions.Combat.Melee } } } -} \ No newline at end of file +} diff --git a/Content.Server/AI/WorldState/Blackboard.cs b/Content.Server/AI/WorldState/Blackboard.cs index 3b1d5176e8..833e0a3bf5 100644 --- a/Content.Server/AI/WorldState/Blackboard.cs +++ b/Content.Server/AI/WorldState/Blackboard.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Reflection; using Robust.Shared.IoC; -using Robust.Shared.Utility; namespace Content.Server.AI.WorldState { diff --git a/Content.Server/AI/WorldState/StateData.cs b/Content.Server/AI/WorldState/StateData.cs index ba4dfad8fe..684f8e250e 100644 --- a/Content.Server/AI/WorldState/StateData.cs +++ b/Content.Server/AI/WorldState/StateData.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using Content.Server.Interfaces.GameTicking; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; diff --git a/Content.Server/AI/WorldState/States/Clothing/EquippedClothingState.cs b/Content.Server/AI/WorldState/States/Clothing/EquippedClothingState.cs index 2e91376bab..694697a49b 100644 --- a/Content.Server/AI/WorldState/States/Clothing/EquippedClothingState.cs +++ b/Content.Server/AI/WorldState/States/Clothing/EquippedClothingState.cs @@ -1,5 +1,5 @@ using System.Collections.Generic; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.GUI; using Content.Shared.GameObjects.Components.Inventory; using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/WorldState/States/Clothing/NearbyClothingState.cs b/Content.Server/AI/WorldState/States/Clothing/NearbyClothingState.cs index 4d231273fa..c8a654a01c 100644 --- a/Content.Server/AI/WorldState/States/Clothing/NearbyClothingState.cs +++ b/Content.Server/AI/WorldState/States/Clothing/NearbyClothingState.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; using Content.Server.AI.Utils; -using Content.Server.GameObjects; -using Content.Server.GameObjects.Components; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Movement; using JetBrains.Annotations; diff --git a/Content.Server/AI/WorldState/States/Hands/AnyFreeHandState.cs b/Content.Server/AI/WorldState/States/Hands/AnyFreeHandState.cs index 5fcec1f468..fdf61ebb9a 100644 --- a/Content.Server/AI/WorldState/States/Hands/AnyFreeHandState.cs +++ b/Content.Server/AI/WorldState/States/Hands/AnyFreeHandState.cs @@ -1,4 +1,3 @@ -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; using JetBrains.Annotations; diff --git a/Content.Server/AI/WorldState/States/Hands/FreeHands.cs b/Content.Server/AI/WorldState/States/Hands/FreeHands.cs index 92c846f672..3a8f2e0807 100644 --- a/Content.Server/AI/WorldState/States/Hands/FreeHands.cs +++ b/Content.Server/AI/WorldState/States/Hands/FreeHands.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; using JetBrains.Annotations; diff --git a/Content.Server/AI/WorldState/States/Hands/HandItemsState.cs b/Content.Server/AI/WorldState/States/Hands/HandItemsState.cs index ea53b121a9..41bb9b5081 100644 --- a/Content.Server/AI/WorldState/States/Hands/HandItemsState.cs +++ b/Content.Server/AI/WorldState/States/Hands/HandItemsState.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/WorldState/States/Inventory/EquippedEntityState.cs b/Content.Server/AI/WorldState/States/Inventory/EquippedEntityState.cs index f7784368b7..88426963ba 100644 --- a/Content.Server/AI/WorldState/States/Inventory/EquippedEntityState.cs +++ b/Content.Server/AI/WorldState/States/Inventory/EquippedEntityState.cs @@ -1,4 +1,3 @@ -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/WorldState/States/Inventory/InventoryState.cs b/Content.Server/AI/WorldState/States/Inventory/InventoryState.cs index 26ce5f30af..3f570d58bd 100644 --- a/Content.Server/AI/WorldState/States/Inventory/InventoryState.cs +++ b/Content.Server/AI/WorldState/States/Inventory/InventoryState.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/WorldState/States/Inventory/LastOpenedStorageState.cs b/Content.Server/AI/WorldState/States/Inventory/LastOpenedStorageState.cs index 973faf3115..0df276ee3a 100644 --- a/Content.Server/AI/WorldState/States/Inventory/LastOpenedStorageState.cs +++ b/Content.Server/AI/WorldState/States/Inventory/LastOpenedStorageState.cs @@ -1,7 +1,6 @@ -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Items.Storage; using Robust.Shared.Interfaces.GameObjects; -using Logger = Robust.Shared.Log.Logger; +using Robust.Shared.Log; namespace Content.Server.AI.WorldState.States.Inventory { diff --git a/Content.Server/AI/WorldState/States/Mobs/NearbyPlayersState.cs b/Content.Server/AI/WorldState/States/Mobs/NearbyPlayersState.cs index 802ef04258..f1c7bbae1a 100644 --- a/Content.Server/AI/WorldState/States/Mobs/NearbyPlayersState.cs +++ b/Content.Server/AI/WorldState/States/Mobs/NearbyPlayersState.cs @@ -1,5 +1,5 @@ using System.Collections.Generic; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Movement; using JetBrains.Annotations; using Robust.Server.Interfaces.Player; diff --git a/Content.Server/AI/WorldState/States/Mobs/NearbySpeciesState.cs b/Content.Server/AI/WorldState/States/Mobs/NearbySpeciesState.cs index 68ac8fd355..a72786d326 100644 --- a/Content.Server/AI/WorldState/States/Mobs/NearbySpeciesState.cs +++ b/Content.Server/AI/WorldState/States/Mobs/NearbySpeciesState.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; using Content.Server.AI.Utils; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Movement; using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/WorldState/States/Nutrition/NearbyDrinkState.cs b/Content.Server/AI/WorldState/States/Nutrition/NearbyDrinkState.cs index a2be3e46f2..15cd69cda2 100644 --- a/Content.Server/AI/WorldState/States/Nutrition/NearbyDrinkState.cs +++ b/Content.Server/AI/WorldState/States/Nutrition/NearbyDrinkState.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using Content.Server.AI.Utils; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Movement; using Content.Server.GameObjects.Components.Nutrition; diff --git a/Content.Server/AI/WorldState/States/Nutrition/NearbyFoodState.cs b/Content.Server/AI/WorldState/States/Nutrition/NearbyFoodState.cs index 168f9c0897..ba44a9d9c5 100644 --- a/Content.Server/AI/WorldState/States/Nutrition/NearbyFoodState.cs +++ b/Content.Server/AI/WorldState/States/Nutrition/NearbyFoodState.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using Content.Server.AI.Utils; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Movement; using Content.Server.GameObjects.Components.Nutrition; diff --git a/Content.Server/AI/WorldState/States/Nutrition/ThirstyState.cs b/Content.Server/AI/WorldState/States/Nutrition/ThirstyState.cs index 65877facf2..e8a13e9e17 100644 --- a/Content.Server/AI/WorldState/States/Nutrition/ThirstyState.cs +++ b/Content.Server/AI/WorldState/States/Nutrition/ThirstyState.cs @@ -2,7 +2,6 @@ using System; using Content.Server.GameObjects.Components.Nutrition; using Content.Shared.GameObjects.Components.Nutrition; using JetBrains.Annotations; -using ThirstComponent = Content.Server.GameObjects.Components.Nutrition.ThirstComponent; namespace Content.Server.AI.WorldState.States.Nutrition { diff --git a/Content.Server/Administration/AGhost.cs b/Content.Server/Administration/AGhost.cs index b84847c642..dfe516576b 100644 --- a/Content.Server/Administration/AGhost.cs +++ b/Content.Server/Administration/AGhost.cs @@ -1,12 +1,9 @@ -using System.Timers; -using Content.Server.GameObjects.Components.Observer; +using Content.Server.GameObjects.Components.Observer; using Content.Server.Players; using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; -using Robust.Shared.Map; -using Timer = Robust.Shared.Timers.Timer; namespace Content.Server.Administration { diff --git a/Content.Server/Administration/ControlMob.cs b/Content.Server/Administration/ControlMob.cs index 8b08f3d99e..317f2d77ee 100644 --- a/Content.Server/Administration/ControlMob.cs +++ b/Content.Server/Administration/ControlMob.cs @@ -1,6 +1,5 @@ using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Observer; -using Content.Server.Mobs; using Content.Server.Players; using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; diff --git a/Content.Server/Administration/DeleteEntitiesWithComponent.cs b/Content.Server/Administration/DeleteEntitiesWithComponent.cs index b476ba3a0d..6abf5a6f08 100644 --- a/Content.Server/Administration/DeleteEntitiesWithComponent.cs +++ b/Content.Server/Administration/DeleteEntitiesWithComponent.cs @@ -1,12 +1,11 @@ -using Robust.Server.Interfaces.Console; +using System; +using System.Collections.Generic; +using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; -using System; -using System.Collections.Generic; -using System.Text; namespace Content.Server.Administration { diff --git a/Content.Server/Administration/WarpCommand.cs b/Content.Server/Administration/WarpCommand.cs index 4942c6599b..e54bca1671 100644 --- a/Content.Server/Administration/WarpCommand.cs +++ b/Content.Server/Administration/WarpCommand.cs @@ -4,10 +4,12 @@ using Content.Server.GameObjects.Components.Markers; using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; using Robust.Shared.Enums; +using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Map; +using Robust.Shared.Maths; namespace Content.Server.Administration { @@ -107,6 +109,10 @@ namespace Content.Server.Administration if (found.GridID != GridId.Invalid) { player.AttachedEntity.Transform.GridPosition = found; + if (player.AttachedEntity.TryGetComponent(out ICollidableComponent collidable)) + { + collidable.Stop(); + } } else { diff --git a/Content.Server/Atmos/AtmosHelpers.cs b/Content.Server/Atmos/AtmosHelpers.cs index 4a4eb37d0c..5561b70639 100644 --- a/Content.Server/Atmos/AtmosHelpers.cs +++ b/Content.Server/Atmos/AtmosHelpers.cs @@ -1,9 +1,9 @@ -using Content.Server.GameObjects.EntitySystems; +#nullable enable +using System.Diagnostics.CodeAnalysis; +using Content.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Map; -#nullable enable - namespace Content.Server.Atmos { public static class AtmosHelpers @@ -15,11 +15,42 @@ namespace Content.Server.Atmos return gridAtmos?.GetTile(coordinates); } + public static GasMixture? GetTileAir(this GridCoordinates coordinates) + { + return coordinates.GetTileAtmosphere()?.Air; + } + + public static bool TryGetTileAtmosphere(this GridCoordinates coordinates, [NotNullWhen(true)] out TileAtmosphere atmosphere) + { + return (atmosphere = coordinates.GetTileAtmosphere()!) != default; + } + + public static bool TryGetTileAir(this GridCoordinates coordinates, [NotNullWhen(true)] out GasMixture air) + { + return !(air = coordinates.GetTileAir()!).Equals(default); + } + public static TileAtmosphere? GetTileAtmosphere(this MapIndices indices, GridId gridId) { var gridAtmos = EntitySystem.Get().GetGridAtmosphere(gridId); return gridAtmos?.GetTile(indices); } + + public static GasMixture? GetTileAir(this MapIndices indices, GridId gridId) + { + return indices.GetTileAtmosphere(gridId)?.Air; + } + + public static bool TryGetTileAtmosphere(this MapIndices indices, GridId gridId, + [NotNullWhen(true)] out TileAtmosphere atmosphere) + { + return (atmosphere = indices.GetTileAtmosphere(gridId)!) != default; + } + + public static bool TryGetTileAir(this MapIndices indices, GridId gridId, [NotNullWhen(true)] out GasMixture air) + { + return !(air = indices.GetTileAir(gridId)!).Equals(default); + } } } diff --git a/Content.Server/Atmos/GasMixture.cs b/Content.Server/Atmos/GasMixture.cs index a500e831b1..f886acad84 100644 --- a/Content.Server/Atmos/GasMixture.cs +++ b/Content.Server/Atmos/GasMixture.cs @@ -11,8 +11,6 @@ using Robust.Shared.IoC; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using Math = CannyFastMath.Math; -using MathF = CannyFastMath.MathF; namespace Content.Server.Atmos { @@ -332,7 +330,7 @@ namespace Content.Server.Atmos } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void TemperatureShare(GasMixture sharer, float conductionCoefficient) + public float TemperatureShare(GasMixture sharer, float conductionCoefficient) { var temperatureDelta = TemperatureArchived - sharer.TemperatureArchived; if (MathF.Abs(temperatureDelta) > Atmospherics.MinimumTemperatureDeltaToConsider) @@ -351,6 +349,30 @@ namespace Content.Server.Atmos sharer.Temperature = MathF.Abs(MathF.Max(sharer.Temperature + heat / sharerHeatCapacity, Atmospherics.TCMB)); } } + + return sharer.Temperature; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public float TemperatureShare(float conductionCoefficient, float sharerTemperature, float sharerHeatCapacity) + { + var temperatureDelta = TemperatureArchived - sharerTemperature; + if (MathF.Abs(temperatureDelta) > Atmospherics.MinimumTemperatureDeltaToConsider) + { + var heatCapacity = HeatCapacityArchived; + + if (sharerHeatCapacity > Atmospherics.MinimumHeatCapacity && heatCapacity > Atmospherics.MinimumHeatCapacity) + { + var heat = conductionCoefficient * temperatureDelta * (heatCapacity * sharerHeatCapacity / (heatCapacity + sharerHeatCapacity)); + + if (!Immutable) + Temperature = MathF.Abs(MathF.Max(Temperature - heat / heatCapacity, Atmospherics.TCMB)); + + sharerTemperature = MathF.Abs(MathF.Max(sharerTemperature + heat / sharerHeatCapacity, Atmospherics.TCMB)); + } + } + + return sharerTemperature; } public enum GasCompareResult @@ -359,6 +381,9 @@ namespace Content.Server.Atmos TemperatureExchange = -1, } + /// + /// Compares sample to self to see if within acceptable ranges that group processing may be enabled. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public GasCompareResult Compare(GasMixture sample) { diff --git a/Content.Server/Atmos/HighPressureMovementController.cs b/Content.Server/Atmos/HighPressureMovementController.cs index b7644151d4..2e27f513ad 100644 --- a/Content.Server/Atmos/HighPressureMovementController.cs +++ b/Content.Server/Atmos/HighPressureMovementController.cs @@ -1,4 +1,5 @@ #nullable enable +using System; using Content.Server.GameObjects.Components.Atmos; using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.Physics; @@ -8,8 +9,6 @@ using Robust.Shared.Map; using Robust.Shared.Maths; using Robust.Shared.Physics; using Robust.Shared.Random; -using Logger = Robust.Shared.Log.Logger; -using MathF = CannyFastMath.MathF; namespace Content.Server.Atmos { @@ -50,19 +49,23 @@ namespace Content.Server.Atmos { - if (maxForce > ThrowForce && throwTarget != GridCoordinates.InvalidGrid) + if (maxForce > ThrowForce) { - var moveForce = MathF.Min(maxForce * MathF.Clamp(moveProb, 0, 100) / 100f, 50f); - var pos = throwTarget.Position - transform.GridPosition.Position; - LinearVelocity = pos * moveForce; - } - else - { - var moveForce = MathF.Min(maxForce * MathF.Clamp(moveProb, 0, 100) / 100f, 25f); - LinearVelocity = direction.ToVec() * moveForce; - } + if (throwTarget != GridCoordinates.InvalidGrid) + { + var moveForce = maxForce * FloatMath.Clamp(moveProb, 0, 100) / 150f; + var pos = ((throwTarget.Position - transform.GridPosition.Position).Normalized + direction.ToVec()).Normalized; + LinearVelocity = pos * moveForce; + } - pressureComponent.LastHighPressureMovementAirCycle = cycle; + else + { + var moveForce = MathF.Min(maxForce * FloatMath.Clamp(moveProb, 0, 100) / 2500f, 20f); + LinearVelocity = direction.ToVec() * moveForce; + } + + pressureComponent.LastHighPressureMovementAirCycle = cycle; + } } } @@ -73,7 +76,7 @@ namespace Content.Server.Atmos if (ControlledComponent != null && !_physicsManager.IsWeightless(ControlledComponent.Owner.Transform.GridPosition)) { LinearVelocity *= 0.85f; - if (LinearVelocity.Length < 1f) + if (MathF.Abs(LinearVelocity.Length) < 1f) Stop(); } } diff --git a/Content.Server/Atmos/IGridAtmosphereComponent.cs b/Content.Server/Atmos/IGridAtmosphereComponent.cs index 5fdd25b2e3..5518881767 100644 --- a/Content.Server/Atmos/IGridAtmosphereComponent.cs +++ b/Content.Server/Atmos/IGridAtmosphereComponent.cs @@ -40,6 +40,11 @@ namespace Content.Server.Atmos /// void Invalidate(MapIndices indices); + /// + /// Attempts to fix a sudden vacuum by creating gas. + /// + void FixVacuum(MapIndices indices); + /// /// Adds an active tile so it becomes processed every update until it becomes inactive. /// Also makes the tile excited. @@ -66,6 +71,18 @@ namespace Content.Server.Atmos /// void RemoveHotspotTile(TileAtmosphere tile); + /// + /// Marks a tile as superconductive so it can be processed. + /// + /// + void AddSuperconductivityTile(TileAtmosphere tile); + + /// + /// Removes a tile from the superconductivity processing list. + /// + /// + void RemoveSuperconductivityTile(TileAtmosphere tile); + /// /// Marks a tile has having high pressure differences that need to be equalized. /// diff --git a/Content.Server/Atmos/Reactions/PhoronFireReaction.cs b/Content.Server/Atmos/Reactions/PhoronFireReaction.cs index f67752f906..46e8ceec2b 100644 --- a/Content.Server/Atmos/Reactions/PhoronFireReaction.cs +++ b/Content.Server/Atmos/Reactions/PhoronFireReaction.cs @@ -1,9 +1,8 @@ #nullable enable -using CannyFastMath; +using System; using Content.Server.Interfaces; using Content.Shared.Atmos; using JetBrains.Annotations; -using Robust.Shared.Log; using Robust.Shared.Serialization; namespace Content.Server.Atmos.Reactions diff --git a/Content.Server/Atmos/TileAtmosInfo.cs b/Content.Server/Atmos/TileAtmosInfo.cs index b8bdb70a68..43ed5f129d 100644 --- a/Content.Server/Atmos/TileAtmosInfo.cs +++ b/Content.Server/Atmos/TileAtmosInfo.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; using Robust.Shared.Maths; using Robust.Shared.ViewVariables; diff --git a/Content.Server/Atmos/TileAtmosphere.cs b/Content.Server/Atmos/TileAtmosphere.cs index f709f8e9de..8e634a1c7d 100644 --- a/Content.Server/Atmos/TileAtmosphere.cs +++ b/Content.Server/Atmos/TileAtmosphere.cs @@ -1,4 +1,5 @@ using System; +using System.Buffers; using System.Collections.Generic; using System.Runtime.CompilerServices; using Content.Server.Atmos.Reactions; @@ -7,19 +8,20 @@ using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; using Content.Shared.Atmos; using Content.Shared.Audio; +using Content.Shared.Maps; using Robust.Server.GameObjects.EntitySystems; +using Robust.Shared.Containers; using Robust.Shared.GameObjects.Components; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; +using Robust.Shared.Log; using Robust.Shared.Map; using Robust.Shared.Maths; using Robust.Shared.Random; using Robust.Shared.ViewVariables; -using Logger = Robust.Shared.Log.Logger; -using MathF = CannyFastMath.MathF; namespace Content.Server.Atmos { @@ -29,9 +31,24 @@ namespace Content.Server.Atmos [Robust.Shared.IoC.Dependency] private IEntityManager _entityManager = default!; [Robust.Shared.IoC.Dependency] private IMapManager _mapManager = default!; + + private static readonly TileAtmosphereComparer _comparer = new TileAtmosphereComparer(); + + [ViewVariables] private int _archivedCycle = 0; + + [ViewVariables] private int _currentCycle = 0; + [ViewVariables] + private static GasTileOverlaySystem _gasTileOverlaySystem; + + [ViewVariables] + private float _temperature = Atmospherics.T20C; + + [ViewVariables] + private float _temperatureArchived = Atmospherics.T20C; + // I know this being static is evil, but I seriously can't come up with a better solution to sound spam. private static int _soundCooldown = 0; @@ -41,6 +58,12 @@ namespace Content.Server.Atmos [ViewVariables] public float PressureDifference { get; set; } = 0; + [ViewVariables(VVAccess.ReadWrite)] + public float HeatCapacity { get; set; } = 1f; + + [ViewVariables] + public float ThermalConductivity => Tile?.Tile.GetContentTileDefinition().ThermalConductivity ?? 0.05f; + [ViewVariables] public bool Excited { get; set; } = false; @@ -61,6 +84,9 @@ namespace Content.Server.Atmos [ViewVariables] public GridId GridIndex { get; } + [ViewVariables] + public TileRef? Tile => GridIndices.GetTileRef(GridIndex); + [ViewVariables] public MapIndices GridIndices { get; } @@ -70,6 +96,9 @@ namespace Content.Server.Atmos [ViewVariables] public GasMixture Air { get; set; } + [ViewVariables] + public bool BlocksAir => _gridAtmosphereComponent.IsAirBlocked(GridIndices); + public TileAtmosphere(GridAtmosphereComponent atmosphereComponent, GridId gridIndex, MapIndices gridIndices, GasMixture mixture = null) { IoCManager.InjectDependencies(this); @@ -77,13 +106,15 @@ namespace Content.Server.Atmos GridIndex = gridIndex; GridIndices = gridIndices; Air = mixture; + ResetTileAtmosInfo(); } [MethodImpl(MethodImplOptions.AggressiveInlining)] private void Archive(int fireCount) { - _archivedCycle = fireCount; Air?.Archive(); + _archivedCycle = fireCount; + _temperatureArchived = _temperature; } public void HotspotExpose(float exposedTemperature, float exposedVolume, bool soh = false) @@ -140,16 +171,19 @@ namespace Content.Server.Atmos { if(_soundCooldown == 0) EntitySystem.Get().PlayAtCoords("/Audio/Effects/space_wind.ogg", - GridIndices.ToGridCoordinates(_mapManager, GridIndex), AudioHelpers.WithVariation(0.125f).WithVolume(MathF.Clamp(PressureDifference / 10, 10, 100))); + GridIndices.ToGridCoordinates(_mapManager, GridIndex), AudioHelpers.WithVariation(0.125f).WithVolume(FloatMath.Clamp(PressureDifference / 10, 10, 100))); } foreach (var entity in _entityManager.GetEntitiesIntersecting(_mapManager.GetGrid(GridIndex).ParentMapId, Box2.UnitCentered.Translated(GridIndices))) { if (!entity.TryGetComponent(out ICollidableComponent physics) - || !entity.TryGetComponent(out MovedByPressureComponent pressure)) + || !entity.TryGetComponent(out MovedByPressureComponent pressure) + || ContainerHelpers.IsInContainer(entity)) continue; + physics.WakeBody(); + var pressureMovements = physics.EnsureController(); if (pressure.LastHighPressureMovementAirCycle < _gridAtmosphereComponent.UpdateCounter) { @@ -168,12 +202,30 @@ namespace Content.Server.Atmos _soundCooldown = 0; } + private class TileAtmosphereComparer : IComparer + { + public int Compare(TileAtmosphere a, TileAtmosphere b) + { + if (a == null && b == null) + return 0; + + if (a == null) + return -1; + + if (b == null) + return 1; + + return a._tileAtmosInfo.MoleDelta.CompareTo(b._tileAtmosInfo.MoleDelta); + } + } + //[MethodImpl(MethodImplOptions.AggressiveInlining)] public void EqualizePressureInZone(int cycleNum) { if (Air == null || (_tileAtmosInfo.LastCycle >= cycleNum)) return; // Already done. - _tileAtmosInfo = new TileAtmosInfo(); + ResetTileAtmosInfo(); + var startingMoles = Air.TotalMoles; var runAtmos = false; @@ -196,7 +248,7 @@ namespace Content.Server.Atmos var queueCycle = ++_gridAtmosphereComponent.EqualizationQueueCycleControl; var totalMoles = 0f; - var tiles = new TileAtmosphere[Atmospherics.ZumosHardTileLimit]; + var tiles = ArrayPool.Shared.Rent(Atmospherics.ZumosHardTileLimit); tiles[0] = this; _tileAtmosInfo.LastQueueCycle = queueCycle; var tileCount = 1; @@ -216,7 +268,7 @@ namespace Content.Server.Atmos { if (adj?.Air == null) continue; if(adj._tileAtmosInfo.LastQueueCycle == queueCycle) continue; - adj._tileAtmosInfo = new TileAtmosInfo(); + adj.ResetTileAtmosInfo(); adj._tileAtmosInfo.LastQueueCycle = queueCycle; if(tileCount < Atmospherics.ZumosHardTileLimit) @@ -244,11 +296,13 @@ namespace Content.Server.Atmos } //tiles = tiles.AsSpan().Slice(0, tileCount).ToArray(); // According to my benchmarks, this is much slower. - Array.Resize(ref tiles, tileCount); + //Array.Resize(ref tiles, tileCount); - var averageMoles = totalMoles / (tiles.Length); - var giverTiles = new List(); - var takerTiles = new List(); + var averageMoles = totalMoles / (tileCount); + var giverTiles = ArrayPool.Shared.Rent(tileCount); + var takerTiles = ArrayPool.Shared.Rent(tileCount); + var giverTilesLength = 0; + var takerTilesLength = 0; for (var i = 0; i < tileCount; i++) { @@ -257,28 +311,28 @@ namespace Content.Server.Atmos tile._tileAtmosInfo.MoleDelta -= averageMoles; if (tile._tileAtmosInfo.MoleDelta > 0) { - giverTiles.Add(tile); + giverTiles[giverTilesLength++] = tile; } else { - takerTiles.Add(tile); + takerTiles[takerTilesLength++] = tile; } } - var logN = MathF.Log2(tiles.Length); + var logN = MathF.Log2(tileCount); // Optimization - try to spread gases using an O(nlogn) algorithm that has a chance of not working first to avoid O(n^2) - if (giverTiles.Count > logN && takerTiles.Count > logN) + if (giverTilesLength > logN && takerTilesLength > logN) { // Even if it fails, it will speed up the next part. - Array.Sort(tiles, (a, b) - => a._tileAtmosInfo.MoleDelta.CompareTo(b._tileAtmosInfo.MoleDelta)); + Array.Sort(tiles, 0, tileCount, _comparer); - foreach (var tile in tiles) + for (var i = 0; i < tileCount; i++) { + var tile = tiles[i]; tile._tileAtmosInfo.FastDone = true; if (!(tile._tileAtmosInfo.MoleDelta > 0)) continue; - Direction eligibleAdjBits = 0; + var eligibleDirections = new List(); var amtEligibleAdj = 0; foreach (var direction in Cardinal) { @@ -288,51 +342,55 @@ namespace Content.Server.Atmos if (tile2._tileAtmosInfo.FastDone || tile2._tileAtmosInfo.LastQueueCycle != queueCycle) continue; - eligibleAdjBits |= direction; + eligibleDirections.Add(direction); amtEligibleAdj++; } - if (amtEligibleAdj <= 0) continue; // Oof we've painted ourselves into a corner. Bad luck. Next part will handle this. + if (amtEligibleAdj <= 0) + continue; // Oof we've painted ourselves into a corner. Bad luck. Next part will handle this. + var molesToMove = tile._tileAtmosInfo.MoleDelta / amtEligibleAdj; foreach (var direction in Cardinal) { - if((eligibleAdjBits & direction) == 0 || !tile._adjacentTiles.TryGetValue(direction, out var tile2)) continue; + if (eligibleDirections.Contains(direction) || + !tile._adjacentTiles.TryGetValue(direction, out var tile2)) continue; tile.AdjustEqMovement(direction, molesToMove); tile._tileAtmosInfo.MoleDelta -= molesToMove; tile2._tileAtmosInfo.MoleDelta += molesToMove; } } - giverTiles.Clear(); - takerTiles.Clear(); + giverTilesLength = 0; + takerTilesLength = 0; - foreach (var tile in tiles) + for (var i = 0; i < tileCount; i++) { + var tile = tiles[i]; if (tile._tileAtmosInfo.MoleDelta > 0) { - giverTiles.Add(tile); + giverTiles[giverTilesLength++] = tile; } else { - takerTiles.Add(tile); + takerTiles[takerTilesLength++] = tile; } } // This is the part that can become O(n^2). - if (giverTiles.Count < takerTiles.Count) + if (giverTilesLength < takerTilesLength) { // as an optimization, we choose one of two methods based on which list is smaller. We really want to avoid O(n^2) if we can. - var queue = new List(takerTiles.Count); - foreach (var giver in giverTiles) + var queue = ArrayPool.Shared.Rent(tileCount); + for (var j = 0; j < giverTilesLength; j++) { - giver._tileAtmosInfo.CurrentTransferDirection = (Direction)(-1); + var giver = giverTiles[j]; + giver._tileAtmosInfo.CurrentTransferDirection = (Direction) (-1); giver._tileAtmosInfo.CurrentTransferAmount = 0; var queueCycleSlow = ++_gridAtmosphereComponent.EqualizationQueueCycleControl; - queue.Clear(); - queue.Add(giver); + var queueLength = 0; + queue[queueLength++] = giver; giver._tileAtmosInfo.LastSlowQueueCycle = queueCycleSlow; - var queueCount = queue.Count; - for (var i = 0; i < queueCount; i++) + for (var i = 0; i < queueLength; i++) { if (giver._tileAtmosInfo.MoleDelta <= 0) break; // We're done here now. Let's not do more work than needed. @@ -340,16 +398,12 @@ namespace Content.Server.Atmos var tile = queue[i]; foreach (var direction in Cardinal) { - if(!tile._adjacentTiles.TryGetValue(direction, out var tile2)) continue; - if (giver._tileAtmosInfo.MoleDelta <= 0) - break; // We're done here now. Let's not do more work than needed. - - if (tile2?._tileAtmosInfo == null || tile2._tileAtmosInfo.LastQueueCycle != queueCycle) - continue; - + if (!tile._adjacentTiles.TryGetValue(direction, out var tile2)) continue; + if (giver._tileAtmosInfo.MoleDelta <= 0) break; // We're done here now. Let's not do more work than needed. + if (tile2._tileAtmosInfo.LastQueueCycle != queueCycle) continue; if (tile2._tileAtmosInfo.LastSlowQueueCycle == queueCycleSlow) continue; - queue.Add(tile2); - queueCount++; + + queue[queueLength++] = tile2; tile2._tileAtmosInfo.LastSlowQueueCycle = queueCycleSlow; tile2._tileAtmosInfo.CurrentTransferDirection = direction.GetOpposite(); tile2._tileAtmosInfo.CurrentTransferAmount = 0; @@ -375,33 +429,38 @@ namespace Content.Server.Atmos } // Putting this loop here helps make it O(n^2) over O(n^3) - for (var i = queue.Count - 1; i >= 0; i--) + for (var i = queueLength - 1; i >= 0; i--) { var tile = queue[i]; if (tile._tileAtmosInfo.CurrentTransferAmount != 0 && - tile._tileAtmosInfo.CurrentTransferDirection != (Direction)(-1)) + tile._tileAtmosInfo.CurrentTransferDirection != (Direction) (-1)) { - tile.AdjustEqMovement(tile._tileAtmosInfo.CurrentTransferDirection, tile._tileAtmosInfo.CurrentTransferAmount); - if(tile._adjacentTiles.TryGetValue(tile._tileAtmosInfo.CurrentTransferDirection, out var adjacent)) - adjacent._tileAtmosInfo.CurrentTransferAmount += tile._tileAtmosInfo.CurrentTransferAmount; + tile.AdjustEqMovement(tile._tileAtmosInfo.CurrentTransferDirection, + tile._tileAtmosInfo.CurrentTransferAmount); + if (tile._adjacentTiles.TryGetValue(tile._tileAtmosInfo.CurrentTransferDirection, + out var adjacent)) + adjacent._tileAtmosInfo.CurrentTransferAmount += + tile._tileAtmosInfo.CurrentTransferAmount; tile._tileAtmosInfo.CurrentTransferAmount = 0; } } } + + ArrayPool.Shared.Return(queue, true); } else { - var queue = new List(giverTiles.Count); - foreach (var taker in takerTiles) + var queue = ArrayPool.Shared.Rent(tileCount); + for (var j = 0; j < takerTilesLength; j++) { + var taker = takerTiles[j]; taker._tileAtmosInfo.CurrentTransferDirection = Direction.Invalid; taker._tileAtmosInfo.CurrentTransferAmount = 0; var queueCycleSlow = ++_gridAtmosphereComponent.EqualizationQueueCycleControl; - queue.Clear(); - queue.Add(taker); + var queueLength = 0; + queue[queueLength++] = taker; taker._tileAtmosInfo.LastSlowQueueCycle = queueCycleSlow; - var queueCount = queue.Count; - for (int i = 0; i < queueCount; i++) + for (var i = 0; i < queueLength; i++) { if (taker._tileAtmosInfo.MoleDelta >= 0) break; // We're done here now. Let's not do more work than needed. @@ -409,16 +468,13 @@ namespace Content.Server.Atmos var tile = queue[i]; foreach (var direction in Cardinal) { - if(!tile._adjacentTiles.ContainsKey(direction)) continue; + if (!tile._adjacentTiles.ContainsKey(direction)) continue; var tile2 = tile._adjacentTiles[direction]; - if (taker._tileAtmosInfo.MoleDelta >= 0) - break; // We're done here now. Let's not do more work than needed. - - if (tile2?._tileAtmosInfo == null || tile2._tileAtmosInfo.LastQueueCycle != queueCycle) continue; + if (taker._tileAtmosInfo.MoleDelta >= 0) break; // We're done here now. Let's not do more work than needed. + if (tile2._tileAtmosInfo.LastQueueCycle != queueCycle) continue; if (tile2._tileAtmosInfo.LastSlowQueueCycle == queueCycleSlow) continue; - queue.Add(tile2); - queueCount++; + queue[queueLength++] = tile2; tile2._tileAtmosInfo.LastSlowQueueCycle = queueCycleSlow; tile2._tileAtmosInfo.CurrentTransferDirection = direction.GetOpposite(); tile2._tileAtmosInfo.CurrentTransferAmount = 0; @@ -444,27 +500,34 @@ namespace Content.Server.Atmos } } - for (var i = queue.Count - 1; i >= 0; i--) + for (var i = queueLength - 1; i >= 0; i--) { var tile = queue[i]; - if (tile._tileAtmosInfo.CurrentTransferAmount == 0 || - tile._tileAtmosInfo.CurrentTransferDirection == Direction.Invalid) continue; + if (tile._tileAtmosInfo.CurrentTransferAmount == 0 || tile._tileAtmosInfo.CurrentTransferDirection == Direction.Invalid) + continue; + tile.AdjustEqMovement(tile._tileAtmosInfo.CurrentTransferDirection, tile._tileAtmosInfo.CurrentTransferAmount); - if(tile._adjacentTiles.TryGetValue(tile._tileAtmosInfo.CurrentTransferDirection, out var adjacent)) + if (tile._adjacentTiles.TryGetValue(tile._tileAtmosInfo.CurrentTransferDirection, out var adjacent)) + { adjacent._tileAtmosInfo.CurrentTransferAmount += tile._tileAtmosInfo.CurrentTransferAmount; - tile._tileAtmosInfo.CurrentTransferAmount = 0; + tile._tileAtmosInfo.CurrentTransferAmount = 0; + } } } + + ArrayPool.Shared.Return(queue, true); } - foreach (var tile in tiles) + for (var i = 0; i < tileCount; i++) { + var tile = tiles[i]; tile.FinalizeEq(); } - foreach (var tile in tiles) + for (var i = 0; i < tileCount; i++) { + var tile = tiles[i]; foreach (var direction in Cardinal) { if (!tile._adjacentTiles.TryGetValue(direction, out var tile2)) continue; @@ -473,6 +536,10 @@ namespace Content.Server.Atmos break; } } + + ArrayPool.Shared.Return(tiles, true); + ArrayPool.Shared.Return(giverTiles, true); + ArrayPool.Shared.Return(takerTiles, true); } } @@ -484,38 +551,34 @@ namespace Content.Server.Atmos foreach (var direction in Cardinal) { var amount = _tileAtmosInfo[direction]; - transferDirections[direction] = amount; if (amount == 0) continue; + transferDirections[direction] = amount; _tileAtmosInfo[direction] = 0; hasTransferDirs = true; } if (!hasTransferDirs) return; - foreach (var direction in Cardinal) + foreach (var (direction, amount) in transferDirections) { - var amount = transferDirections[direction]; if (!_adjacentTiles.TryGetValue(direction, out var tile) || tile.Air == null) continue; if (amount > 0) { - // Prevent infinite recursion. - tile._tileAtmosInfo[direction.GetOpposite()] = 0; - if (Air.TotalMoles < amount) - FinalizeEqNeighbors(); + FinalizeEqNeighbors(transferDirections.Keys); tile.Air.Merge(Air.Remove(amount)); UpdateVisuals(); tile.UpdateVisuals(); - ConsiderPressureDifference(tile, amount); + ConsiderPressureDifference(direction, amount); } } } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private void FinalizeEqNeighbors() + private void FinalizeEqNeighbors(IEnumerable directions) { - foreach (var direction in Cardinal) + foreach (var direction in directions) { var amount = _tileAtmosInfo[direction]; if(amount < 0 && _adjacentTiles.TryGetValue(direction, out var adjacent)) @@ -524,13 +587,13 @@ namespace Content.Server.Atmos } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private void ConsiderPressureDifference(TileAtmosphere tile, float difference) + private void ConsiderPressureDifference(Direction direction, float difference) { _gridAtmosphereComponent.AddHighPressureDelta(this); if (difference > PressureDifference) { PressureDifference = difference; - _pressureDirection = ((Vector2i) (tile.GridIndices - GridIndices)).GetDir(); + _pressureDirection = difference < 0 ? direction.GetOpposite() : direction; } } @@ -538,8 +601,14 @@ namespace Content.Server.Atmos private void AdjustEqMovement(Direction direction, float molesToMove) { _tileAtmosInfo[direction] += molesToMove; - if(direction != (Direction)(-1) && _adjacentTiles.TryGetValue(direction, out var adj)) - _adjacentTiles[direction]._tileAtmosInfo[direction.GetOpposite()] -= molesToMove; + if(direction != Direction.Invalid && _adjacentTiles.TryGetValue(direction, out var adj)) + adj._tileAtmosInfo[direction.GetOpposite()] -= molesToMove; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void ResetTileAtmosInfo() + { + _tileAtmosInfo = new TileAtmosInfo {CurrentTransferDirection = Direction.Invalid}; } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -557,7 +626,7 @@ namespace Content.Server.Atmos _currentCycle = fireCount; var adjacentTileLength = 0; - foreach (var (_, enemyTile) in _adjacentTiles) + foreach (var (direction, enemyTile) in _adjacentTiles) { // If the tile is null or has no air, we don't do anything if(enemyTile?.Air == null) continue; @@ -607,11 +676,11 @@ namespace Content.Server.Atmos // Space wind! if (difference > 0) { - ConsiderPressureDifference(enemyTile, difference); + ConsiderPressureDifference(direction, difference); } else { - enemyTile.ConsiderPressureDifference(this, -difference); + enemyTile.ConsiderPressureDifference(direction.GetOpposite(), -difference); } LastShareCheck(); @@ -706,10 +775,150 @@ namespace Content.Server.Atmos // TODO ATMOS Let all entities in this tile know about the fire? } + private bool ConsiderSuperconductivity() + { + if (ThermalConductivity == 0f) + return false; + + _gridAtmosphereComponent.AddSuperconductivityTile(this); + return true; + } + private bool ConsiderSuperconductivity(bool starting) { - // TODO ATMOS - return false; + if (Air.Temperature < (starting + ? Atmospherics.MinimumTemperatureStartSuperConduction + : Atmospherics.MinimumTemperatureForSuperconduction)) + return false; + + return !(Air.HeatCapacity < Atmospherics.MCellWithRatio) && ConsiderSuperconductivity(); + } + + public void Superconduct() + { + var directions = ConductivityDirections(); + var adjacentTiles = _gridAtmosphereComponent.GetAdjacentTiles(GridIndices, true); + + if (directions.Length > 0) + { + foreach (var direction in directions) + { + if (!adjacentTiles.TryGetValue(direction, out var adjacent)) continue; + + if (adjacent.ThermalConductivity == 0f) + continue; + + if(adjacent._archivedCycle < _gridAtmosphereComponent.UpdateCounter) + adjacent.Archive(_gridAtmosphereComponent.UpdateCounter); + + adjacent.NeighborConductWithSource(this); + + adjacent.ConsiderSuperconductivity(); + } + } + + RadiateToSpace(); + + FinishSuperconduction(); + } + + private void FinishSuperconduction() + { + // Conduct with air on my tile if I have it + if (!BlocksAir) + { + _temperature = Air.TemperatureShare(ThermalConductivity, _temperature, HeatCapacity); + } + + FinishSuperconduction(BlocksAir ? _temperature : Air.Temperature); + } + + private void FinishSuperconduction(float temperature) + { + // Make sure it's still hot enough to continue conducting. + if (temperature < Atmospherics.MinimumTemperatureForSuperconduction) + { + _gridAtmosphereComponent.RemoveSuperconductivityTile(this); + } + } + + private void NeighborConductWithSource(TileAtmosphere other) + { + if (BlocksAir) + { + if (!other.BlocksAir) + { + other.TemperatureShareOpenToSolid(this); + } + else + { + other.TemperatureShareMutualSolid(this, ThermalConductivity); + } + + TemperatureExpose(null, _temperature, _gridAtmosphereComponent.GetVolumeForCells(1)); + return; + } + + if (!other.BlocksAir) + { + other.Air.TemperatureShare(Air, Atmospherics.WindowHeatTransferCoefficient); + } + else + { + TemperatureShareOpenToSolid(other); + } + + _gridAtmosphereComponent.AddActiveTile(this); + } + + private void TemperatureShareOpenToSolid(TileAtmosphere other) + { + other._temperature = + Air.TemperatureShare(other.ThermalConductivity, other._temperature, other.HeatCapacity); + } + + private void TemperatureShareMutualSolid(TileAtmosphere other, float conductionCoefficient) + { + var deltaTemperature = (_temperatureArchived - other._temperatureArchived); + if (MathF.Abs(deltaTemperature) > Atmospherics.MinimumTemperatureDeltaToConsider + && HeatCapacity != 0f && other.HeatCapacity != 0f) + { + var heat = conductionCoefficient * deltaTemperature * + (HeatCapacity * other.HeatCapacity / (HeatCapacity + other.HeatCapacity)); + + _temperature -= heat / HeatCapacity; + other._temperature += heat / other.HeatCapacity; + } + } + + public void RadiateToSpace() + { + // Considering 0ºC as the break even point for radiation in and out. + if (_temperature > Atmospherics.T0C) + { + // Hardcoded space temperature. + var deltaTemperature = (_temperatureArchived - Atmospherics.TCMB); + if ((HeatCapacity > 0) && (MathF.Abs(deltaTemperature) > Atmospherics.MinimumTemperatureDeltaToConsider)) + { + var heat = ThermalConductivity * deltaTemperature * (HeatCapacity * + Atmospherics.HeatCapacityVacuum / (HeatCapacity + Atmospherics.HeatCapacityVacuum)); + + _temperature -= heat; + } + } + } + + public Direction[] ConductivityDirections() + { + if(BlocksAir) + { + if(_archivedCycle < _gridAtmosphereComponent.UpdateCounter) + Archive(_gridAtmosphereComponent.UpdateCounter); + return Cardinal; + } + + // TODO ATMOS check if this is correct + return Cardinal; } //[MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -721,11 +930,10 @@ namespace Content.Server.Atmos var tiles = new List(); var spaceTiles = new List(); tiles.Add(this); - _tileAtmosInfo = new TileAtmosInfo - { - LastQueueCycle = queueCycle, - CurrentTransferDirection = Direction.Invalid - }; + + ResetTileAtmosInfo(); + _tileAtmosInfo.LastQueueCycle = queueCycle; + var tileCount = 1; for (var i = 0; i < tileCount; i++) { @@ -739,16 +947,17 @@ namespace Content.Server.Atmos } else { - if (i > Atmospherics.ZumosHardTileLimit) continue; + if (i > Atmospherics.ZumosTileLimit) continue; foreach (var direction in Cardinal) { - if (!_adjacentTiles.TryGetValue(direction, out var tile2)) continue; + if (!tile._adjacentTiles.TryGetValue(direction, out var tile2)) continue; if (tile2?.Air == null) continue; if (tile2._tileAtmosInfo.LastQueueCycle == queueCycle) continue; tile.ConsiderFirelocks(tile2); if (tile._adjacentTiles[direction]?.Air != null) { - tile2._tileAtmosInfo = new TileAtmosInfo {LastQueueCycle = queueCycle}; + tile2.ResetTileAtmosInfo(); + tile2._tileAtmosInfo.LastQueueCycle = queueCycle; tiles.Add(tile2); tileCount++; } @@ -771,7 +980,7 @@ namespace Content.Server.Atmos var tile = progressionOrder[i]; foreach (var direction in Cardinal) { - if (!_adjacentTiles.TryGetValue(direction, out var tile2)) continue; + if (!tile._adjacentTiles.TryGetValue(direction, out var tile2)) continue; if (tile2?._tileAtmosInfo.LastQueueCycle != queueCycle) continue; if (tile2._tileAtmosInfo.LastSlowQueueCycle == queueCycleSlow) continue; if(tile2.Air.Immutable) continue; @@ -784,14 +993,12 @@ namespace Content.Server.Atmos } } - for (int i = 0; i < progressionCount; i++) + for (var i = progressionCount - 1; i >= 0; i--) { var tile = progressionOrder[i]; if (tile._tileAtmosInfo.CurrentTransferDirection == Direction.Invalid) continue; - var hpdLength = _gridAtmosphereComponent.HighPressureDeltaCount; - var inHdp = _gridAtmosphereComponent.HasHighPressureDelta(tile); - if(!inHdp) - _gridAtmosphereComponent.AddHighPressureDelta(tile); + _gridAtmosphereComponent.AddHighPressureDelta(tile); + _gridAtmosphereComponent.AddActiveTile(tile); if (!tile._adjacentTiles.TryGetValue(tile._tileAtmosInfo.CurrentTransferDirection, out var tile2) || tile2.Air == null) continue; var sum = tile2.Air.TotalMoles; totalGasesRemoved += sum; @@ -799,11 +1006,13 @@ namespace Content.Server.Atmos tile2._tileAtmosInfo.CurrentTransferAmount += tile._tileAtmosInfo.CurrentTransferAmount; tile.PressureDifference = tile._tileAtmosInfo.CurrentTransferAmount; tile._pressureDirection = tile._tileAtmosInfo.CurrentTransferDirection; + if (tile2._tileAtmosInfo.CurrentTransferDirection == Direction.Invalid) { tile2.PressureDifference = tile2._tileAtmosInfo.CurrentTransferAmount; tile2._pressureDirection = tile._tileAtmosInfo.CurrentTransferDirection; } + tile.Air.Clear(); tile.UpdateVisuals(); tile.HandleDecompressionFloorRip(sum); @@ -812,7 +1021,8 @@ namespace Content.Server.Atmos private void HandleDecompressionFloorRip(float sum) { - if (sum > 20 && _robustRandom.Prob(MathF.Clamp(sum / 100, 0.005f, 0.5f))) + var chance = FloatMath.Clamp(sum / 500, 0.005f, 0.5f); + if (sum > 20 && _robustRandom.Prob(chance)) _gridAtmosphereComponent.PryTile(GridIndices); } @@ -822,7 +1032,6 @@ namespace Content.Server.Atmos //throw new NotImplementedException(); } - private void React() { // TODO ATMOS I think this is enough? gotta make sure... @@ -854,14 +1063,19 @@ namespace Content.Server.Atmos { foreach (var direction in Cardinal) { - if(!_gridAtmosphereComponent.IsAirBlocked(GridIndices.Offset(direction))) - _adjacentTiles[direction] = _gridAtmosphereComponent.GetTile(GridIndices.Offset(direction)); + if (!_gridAtmosphereComponent.IsAirBlocked(GridIndices.Offset(direction))) + { + var adjacent = _gridAtmosphereComponent.GetTile(GridIndices.Offset(direction)); + _adjacentTiles[direction] = adjacent; + adjacent.UpdateAdjacent(direction.GetOpposite()); + } } } public void UpdateAdjacent(Direction direction) { - _adjacentTiles[direction] = _gridAtmosphereComponent.GetTile(GridIndices.Offset(direction)); + if (!_gridAtmosphereComponent.IsAirBlocked(GridIndices.Offset(direction))) + _adjacentTiles[direction] = _gridAtmosphereComponent.GetTile(GridIndices.Offset(direction)); } private void LastShareCheck() @@ -882,8 +1096,6 @@ namespace Content.Server.Atmos Direction.North, Direction.East, Direction.South, Direction.West }; - private static GasTileOverlaySystem _gasTileOverlaySystem; - public void TemperatureExpose(GasMixture mixture, float temperature, float cellVolume) { // TODO ATMOS do this diff --git a/Content.Server/Cargo/CargoOrderDataManager.cs b/Content.Server/Cargo/CargoOrderDataManager.cs index 35fed56a01..fe169ab26d 100644 --- a/Content.Server/Cargo/CargoOrderDataManager.cs +++ b/Content.Server/Cargo/CargoOrderDataManager.cs @@ -1,7 +1,6 @@ -using Content.Server.GameObjects.Components.Cargo; +using System.Collections.Generic; +using Content.Server.GameObjects.Components.Cargo; using Content.Shared.Prototypes.Cargo; -using System; -using System.Collections.Generic; namespace Content.Server.Cargo { diff --git a/Content.Server/Cargo/CargoOrderDatabase.cs b/Content.Server/Cargo/CargoOrderDatabase.cs index 3762822ef5..924a424071 100644 --- a/Content.Server/Cargo/CargoOrderDatabase.cs +++ b/Content.Server/Cargo/CargoOrderDatabase.cs @@ -1,7 +1,7 @@ -using Content.Shared.Prototypes.Cargo; -using Robust.Shared.Localization; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; +using Content.Shared.Prototypes.Cargo; +using Robust.Shared.Localization; namespace Content.Server.Cargo { diff --git a/Content.Server/Cargo/ICargoOrderDataManager.cs b/Content.Server/Cargo/ICargoOrderDataManager.cs index 2eefea9f9d..118a4e1f9d 100644 --- a/Content.Server/Cargo/ICargoOrderDataManager.cs +++ b/Content.Server/Cargo/ICargoOrderDataManager.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using Content.Server.GameObjects.Components.Cargo; using Content.Shared.Prototypes.Cargo; diff --git a/Content.Server/Chat/ChatCommands.cs b/Content.Server/Chat/ChatCommands.cs index eed35957da..9d3ff7c995 100644 --- a/Content.Server/Chat/ChatCommands.cs +++ b/Content.Server/Chat/ChatCommands.cs @@ -1,18 +1,18 @@ -using Content.Server.GameObjects; +using System.Linq; +using Content.Server.GameObjects.Components.Damage; +using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Observer; using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameObjects; using Content.Server.Players; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; using Robust.Shared.Enums; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; -using System.Linq; -using Content.Server.GameObjects.Components; -using Content.Server.GameObjects.Components.GUI; namespace Content.Server.Chat { diff --git a/Content.Server/Chat/ChatManager.cs b/Content.Server/Chat/ChatManager.cs index 6f79bb9d29..1a035fbb5c 100644 --- a/Content.Server/Chat/ChatManager.cs +++ b/Content.Server/Chat/ChatManager.cs @@ -1,5 +1,6 @@ using System.Linq; using Content.Server.GameObjects.Components.Observer; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; using Content.Shared.Chat; @@ -10,15 +11,6 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.IoC; using Robust.Shared.Localization; -using Robust.Shared.Log; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using System; -using Content.Server.GameObjects.Components; -using System.Collections.Generic; -using Content.Server.GameObjects.Components.Interactable; -using Content.Server.GameObjects.EntitySystems; -using Microsoft.CodeAnalysis.CSharp.Syntax; -using Robust.Shared.Interfaces.Map; namespace Content.Server.Chat { @@ -52,6 +44,15 @@ namespace Content.Server.Chat _netManager.ServerSendToAll(msg); } + public void DispatchStationAnnouncement(string message) + { + var msg = _netManager.CreateNetMessage(); + msg.Channel = ChatChannel.Radio; + msg.Message = message; + msg.MessageWrap = "Station: {0}"; + _netManager.ServerSendToAll(msg); + } + public void DispatchServerMessage(IPlayerSession player, string message) { var msg = _netManager.CreateNetMessage(); diff --git a/Content.Server/Chemistry/Metabolism/DefaultDrink.cs b/Content.Server/Chemistry/Metabolism/DefaultDrink.cs index 232ea1e108..d604f46fa8 100644 --- a/Content.Server/Chemistry/Metabolism/DefaultDrink.cs +++ b/Content.Server/Chemistry/Metabolism/DefaultDrink.cs @@ -1,5 +1,4 @@ -using System; -using Content.Server.GameObjects.Components.Nutrition; +using Content.Server.GameObjects.Components.Nutrition; using Content.Shared.Chemistry; using Content.Shared.Interfaces.Chemistry; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/Chemistry/Metabolism/DefaultFood.cs b/Content.Server/Chemistry/Metabolism/DefaultFood.cs index bbf83bc5d8..e240b661b1 100644 --- a/Content.Server/Chemistry/Metabolism/DefaultFood.cs +++ b/Content.Server/Chemistry/Metabolism/DefaultFood.cs @@ -3,7 +3,6 @@ using Content.Shared.Chemistry; using Content.Shared.Interfaces.Chemistry; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Serialization; -using Robust.Shared.IoC; using Robust.Shared.Serialization; namespace Content.Server.Chemistry.Metabolism diff --git a/Content.Server/Chemistry/ReactionEffects/ExplosionReactionEffect.cs b/Content.Server/Chemistry/ReactionEffects/ExplosionReactionEffect.cs index 1996e287a6..3e46751ab2 100644 --- a/Content.Server/Chemistry/ReactionEffects/ExplosionReactionEffect.cs +++ b/Content.Server/Chemistry/ReactionEffects/ExplosionReactionEffect.cs @@ -1,12 +1,9 @@ using System; using Content.Server.Explosions; using Content.Server.GameObjects.Components.Chemistry; -using Content.Shared.Interfaces; +using Content.Server.Interfaces.Chemistry; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Serialization; -using CannyFastMath; -using Math = CannyFastMath.Math; -using MathF = CannyFastMath.MathF; namespace Content.Server.Chemistry.ReactionEffects { diff --git a/Content.Server/Chemistry/ReactionPrototype.cs b/Content.Server/Chemistry/ReactionPrototype.cs index 36e2304b16..3cfef8c4d9 100644 --- a/Content.Server/Chemistry/ReactionPrototype.cs +++ b/Content.Server/Chemistry/ReactionPrototype.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; +using Content.Server.Interfaces.Chemistry; using Content.Shared.Chemistry; -using Content.Shared.Interfaces; using Robust.Shared.Interfaces.Serialization; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; diff --git a/Content.Server/EntryPoint.cs b/Content.Server/EntryPoint.cs index 0f9a6bd624..e83771204d 100644 --- a/Content.Server/EntryPoint.cs +++ b/Content.Server/EntryPoint.cs @@ -1,8 +1,7 @@ using Content.Server.AI.Utility.Considerations; - using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; +using Content.Server.AI.WorldState; +using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; using Content.Server.Interfaces; -using Content.Server.AI.WorldState; using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameTicking; using Content.Server.Interfaces.PDA; diff --git a/Content.Server/Explosions/ExplosionHelper.cs b/Content.Server/Explosions/ExplosionHelper.cs index 4ca487317d..277713bf28 100644 --- a/Content.Server/Explosions/ExplosionHelper.cs +++ b/Content.Server/Explosions/ExplosionHelper.cs @@ -1,7 +1,7 @@ using System; using System.Linq; using Content.Server.GameObjects.Components.Mobs; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.Maps; using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; diff --git a/Content.Server/GameObjects/Components/Access/AccessReaderComponent.cs b/Content.Server/GameObjects/Components/Access/AccessReaderComponent.cs index 194c4e9b65..4ebfcd20bd 100644 --- a/Content.Server/GameObjects/Components/Access/AccessReaderComponent.cs +++ b/Content.Server/GameObjects/Components/Access/AccessReaderComponent.cs @@ -2,9 +2,9 @@ using System; using System.Collections.Generic; using System.Linq; +using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.Interfaces; -using Content.Server.Interfaces.GameObjects; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Shared.GameObjects.Components.Inventory; using JetBrains.Annotations; diff --git a/Content.Server/GameObjects/Components/Access/IdCardConsoleComponent.cs b/Content.Server/GameObjects/Components/Access/IdCardConsoleComponent.cs index 9a799c7716..841b4dd176 100644 --- a/Content.Server/GameObjects/Components/Access/IdCardConsoleComponent.cs +++ b/Content.Server/GameObjects/Components/Access/IdCardConsoleComponent.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Shared.Access; diff --git a/Content.Server/GameObjects/Components/Access/PresetIdCardComponent.cs b/Content.Server/GameObjects/Components/Access/PresetIdCardComponent.cs index 67c6d08a76..fef2f41022 100644 --- a/Content.Server/GameObjects/Components/Access/PresetIdCardComponent.cs +++ b/Content.Server/GameObjects/Components/Access/PresetIdCardComponent.cs @@ -1,5 +1,5 @@ #nullable enable -using Content.Shared.Jobs; +using Content.Shared.Roles; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/GameObjects/Components/Atmos/AirtightComponent.cs b/Content.Server/GameObjects/Components/Atmos/AirtightComponent.cs index 649d3dd34e..07c6ed66e9 100644 --- a/Content.Server/GameObjects/Components/Atmos/AirtightComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/AirtightComponent.cs @@ -1,11 +1,9 @@ using System; -using Content.Server.Atmos; using Content.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.Transform; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.IoC; using Robust.Shared.Map; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; @@ -42,7 +40,7 @@ namespace Content.Server.GameObjects.Components.Atmos base.ExposeData(serializer); serializer.DataField(ref _airBlocked, "airBlocked", true); - serializer.DataField(ref _fixVacuum, "fixVacuum", false); + serializer.DataField(ref _fixVacuum, "fixVacuum", true); } public override void Initialize() @@ -59,15 +57,6 @@ namespace Content.Server.GameObjects.Components.Atmos UpdatePosition(); } - public override void OnRemove() - { - base.OnRemove(); - - _airBlocked = false; - - UpdatePosition(); - } - public void MapInit() { _snapGrid.OnPositionChanged += OnTransformMove; @@ -82,6 +71,11 @@ namespace Content.Server.GameObjects.Components.Atmos _airBlocked = false; _snapGrid.OnPositionChanged -= OnTransformMove; + + if(_fixVacuum) + EntitySystem.Get().GetGridAtmosphere(Owner.Transform.GridID)? + .FixVacuum(_snapGrid.Position); + UpdatePosition(); } diff --git a/Content.Server/GameObjects/Components/Atmos/BarotraumaComponent.cs b/Content.Server/GameObjects/Components/Atmos/BarotraumaComponent.cs index 0f35468ae7..4beaa374b1 100644 --- a/Content.Server/GameObjects/Components/Atmos/BarotraumaComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/BarotraumaComponent.cs @@ -1,10 +1,11 @@ -using System.Runtime.CompilerServices; -using CannyFastMath; +using System; +using System.Runtime.CompilerServices; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces.GameObjects; using Content.Shared.Atmos; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Mobs; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; diff --git a/Content.Server/GameObjects/Components/Atmos/GasAnalyzerComponent.cs b/Content.Server/GameObjects/Components/Atmos/GasAnalyzerComponent.cs index 777d238060..066bc0940a 100644 --- a/Content.Server/GameObjects/Components/Atmos/GasAnalyzerComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/GasAnalyzerComponent.cs @@ -1,8 +1,8 @@ #nullable enable +using System.Collections.Generic; using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects.Components.Items; -using Content.Server.Utility; using Content.Shared.Atmos; using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.EntitySystems; @@ -16,8 +16,6 @@ using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Map; -using Robust.Shared.Maths; -using System.Collections.Generic; namespace Content.Server.GameObjects.Components.Atmos { diff --git a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs index ea05c19642..05ba999b0b 100644 --- a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs @@ -28,7 +28,6 @@ namespace Content.Server.GameObjects.Components.Atmos [RegisterComponent, Serializable] public class GridAtmosphereComponent : Component, IGridAtmosphereComponent { - [Robust.Shared.IoC.Dependency] private IGameTiming _gameTiming = default!; [Robust.Shared.IoC.Dependency] private IMapManager _mapManager = default!; /// @@ -65,6 +64,9 @@ namespace Content.Server.GameObjects.Components.Atmos [ViewVariables] private readonly HashSet _hotspotTiles = new HashSet(1000); + [ViewVariables] + private readonly HashSet _superconductivityTiles = new HashSet(1000); + [ViewVariables] private readonly HashSet _invalidatedCoords = new HashSet(1000); @@ -81,6 +83,7 @@ namespace Content.Server.GameObjects.Components.Atmos ExcitedGroups, HighPressureDelta, Hotspots, + Superconductivity, } /// @@ -150,13 +153,14 @@ namespace Content.Server.GameObjects.Components.Atmos if (tile == null) { tile = new TileAtmosphere(this, _grid.Index, indices, new GasMixture(GetVolumeForCells(1)){Temperature = Atmospherics.T20C}); - _tiles.Add(indices, tile); + _tiles[indices] = tile; } if (IsSpace(indices)) { tile.Air = new GasMixture(GetVolumeForCells(1)); tile.Air.MarkImmutable(); + _tiles[indices] = tile; } else if (IsAirBlocked(indices)) { @@ -170,17 +174,7 @@ namespace Content.Server.GameObjects.Components.Atmos { if (tile.Air == null && obs.FixVacuum) { - var adjacent = GetAdjacentTiles(indices); - tile.Air = new GasMixture(GetVolumeForCells(1)){Temperature = Atmospherics.T20C}; - - var ratio = 1f / adjacent.Count; - - foreach (var (direction, adj) in adjacent) - { - var mix = adj.Air.RemoveRatio(ratio); - tile.Air.Merge(mix); - adj.Air.Merge(mix); - } + FixVacuum(tile.GridIndices); } } @@ -202,6 +196,25 @@ namespace Content.Server.GameObjects.Components.Atmos _invalidatedCoords.Clear(); } + /// + public void FixVacuum(MapIndices indices) + { + var tile = GetTile(indices); + if (tile?.GridIndex != _grid.Index) return; + var adjacent = GetAdjacentTiles(indices); + tile.Air = new GasMixture(GetVolumeForCells(1)){Temperature = Atmospherics.T20C}; + _tiles[indices] = tile; + + var ratio = 1f / adjacent.Count; + + foreach (var (direction, adj) in adjacent) + { + var mix = adj.Air.RemoveRatio(ratio); + tile.Air.Merge(mix); + adj.Air.Merge(mix); + } + } + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public void AddActiveTile(TileAtmosphere tile) @@ -237,6 +250,18 @@ namespace Content.Server.GameObjects.Components.Atmos _hotspotTiles.Remove(tile); } + public void AddSuperconductivityTile(TileAtmosphere tile) + { + if (tile?.GridIndex != _grid.Index) return; + _superconductivityTiles.Add(tile); + } + + public void RemoveSuperconductivityTile(TileAtmosphere tile) + { + if (tile == null) return; + _superconductivityTiles.Remove(tile); + } + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public void AddHighPressureDelta(TileAtmosphere tile) @@ -302,14 +327,14 @@ namespace Content.Server.GameObjects.Components.Atmos return _grid.GetTileRef(indices).Tile.IsEmpty; } - public Dictionary GetAdjacentTiles(MapIndices indices) + public Dictionary GetAdjacentTiles(MapIndices indices, bool includeAirBlocked = false) { var sides = new Dictionary(); foreach (var dir in Cardinal) { var side = indices.Offset(dir); var tile = GetTile(side); - if(tile?.Air != null) + if(tile?.Air != null || includeAirBlocked) sides[dir] = tile; } @@ -361,6 +386,10 @@ namespace Content.Server.GameObjects.Components.Atmos break; case ProcessState.Hotspots: ProcessHotspots(); + _state = ProcessState.Superconductivity; + break; + case ProcessState.Superconductivity: + ProcessSuperconductivity(); _state = ProcessState.TileEqualize; break; } @@ -463,6 +492,23 @@ namespace Content.Server.GameObjects.Components.Atmos } } + private void ProcessSuperconductivity() + { + _stopwatch.Restart(); + + var number = 0; + foreach (var superconductivity in _superconductivityTiles.ToArray()) + { + superconductivity.Superconduct(); + + if (number++ < LagCheckIterations) continue; + number = 0; + // Process the rest next time. + if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds) + return; + } + } + private AirtightComponent GetObstructingComponent(MapIndices indices) { foreach (var v in _grid.GetSnapGridCell(indices, SnapGridOffset.Center)) diff --git a/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs b/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs index 87bf2ca6ab..5c9870c53f 100644 --- a/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs +++ b/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs @@ -7,11 +7,11 @@ using Content.Server.GameObjects.Components.Strap; using Content.Server.Interfaces; using Content.Server.Mobs; using Content.Server.Utility; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Buckle; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Strap; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.EntitySystemMessages; diff --git a/Content.Server/GameObjects/Components/Cargo/GalacticMarketComponent.cs b/Content.Server/GameObjects/Components/Cargo/GalacticMarketComponent.cs index 5f4ff15e26..2bbbcc2618 100644 --- a/Content.Server/GameObjects/Components/Cargo/GalacticMarketComponent.cs +++ b/Content.Server/GameObjects/Components/Cargo/GalacticMarketComponent.cs @@ -1,10 +1,5 @@ using Content.Shared.GameObjects.Components.Cargo; using Robust.Shared.GameObjects; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Content.Server.GameObjects.Components.Cargo { diff --git a/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs b/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs index 4f20a0c4e9..68551cc0e2 100644 --- a/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs @@ -1,30 +1,30 @@ using System; using System.Linq; using Content.Server.GameObjects.Components.GUI; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; -using Content.Server.Interfaces.GameObjects; +using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Shared.Chemistry; -using Content.Shared.GameObjects.Components.Chemistry; +using Content.Shared.GameObjects.Components.Chemistry.ChemMaster; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects.Components.Container; using Robust.Server.GameObjects.Components.UserInterface; +using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.Audio; using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Localization; -using Robust.Shared.Serialization; -using Robust.Shared.ViewVariables; -using Robust.Server.GameObjects.EntitySystems; -using Robust.Shared.GameObjects.Systems; -using Content.Server.GameObjects.Components.Power.ApcNetComponents; -using Content.Server.Interfaces.GameObjects.Components.Items; -using Content.Shared.Interfaces.GameObjects.Components; -using Robust.Shared.Interfaces.Random; using Robust.Shared.Maths; using Robust.Shared.Random; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Chemistry { diff --git a/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs b/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs index a9c384dafb..ea864a4b40 100644 --- a/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs @@ -1,27 +1,28 @@ using System; using System.Linq; using Content.Server.GameObjects.Components.GUI; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; +using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Shared.Chemistry; -using Content.Shared.GameObjects.Components.Chemistry; +using Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects.Components.Container; using Robust.Server.GameObjects.Components.UserInterface; +using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.Audio; using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using Robust.Server.GameObjects.EntitySystems; -using Robust.Shared.GameObjects.Systems; -using Content.Server.GameObjects.Components.Power.ApcNetComponents; -using Content.Shared.Interfaces.GameObjects.Components; -using Content.Server.Interfaces.GameObjects.Components.Items; namespace Content.Server.GameObjects.Components.Chemistry { diff --git a/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs b/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs index ed4d9df3f6..5218f996ce 100644 --- a/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs @@ -1,12 +1,17 @@ -using Content.Server.Chemistry; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using System.Collections.Generic; +using System.Linq; +using Content.Server.Chemistry; +using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.Chemistry; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Chemistry; +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Utility; using Robust.Server.GameObjects; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; @@ -15,12 +20,6 @@ using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; -using System.Collections.Generic; -using System.Linq; -using Content.Server.GameObjects.Components.GUI; -using Content.Shared.GameObjects.EntitySystems; -using Robust.Shared.GameObjects.Systems; -using Content.Server.GameObjects.EntitySystems.Click; namespace Content.Server.GameObjects.Components.Chemistry { diff --git a/Content.Server/GameObjects/Components/Chemistry/TransformableContainerComponent.cs b/Content.Server/GameObjects/Components/Chemistry/TransformableContainerComponent.cs index 048eb685a1..94d18c734e 100644 --- a/Content.Server/GameObjects/Components/Chemistry/TransformableContainerComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/TransformableContainerComponent.cs @@ -1,4 +1,4 @@ -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.Chemistry; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; diff --git a/Content.Server/GameObjects/Components/Chemistry/VaporComponent.cs b/Content.Server/GameObjects/Components/Chemistry/VaporComponent.cs index dd5fea942b..066cf21836 100644 --- a/Content.Server/GameObjects/Components/Chemistry/VaporComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/VaporComponent.cs @@ -1,36 +1,22 @@ -using Content.Server.GameObjects.Components.Fluids; +using System.Linq; +using Content.Server.GameObjects.Components.Fluids; using Content.Shared.Chemistry; using Content.Shared.Physics; -using Microsoft.CodeAnalysis.CSharp.Syntax; -using Microsoft.EntityFrameworkCore.Update.Internal; -using Robust.Server.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; -using Robust.Shared.Map; using Robust.Shared.Maths; -using Robust.Shared.Physics; using Robust.Shared.Serialization; -using Robust.Shared.Timers; using Robust.Shared.ViewVariables; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading; -using Timer = Robust.Shared.Timers.Timer; namespace Content.Server.GameObjects.Components.Chemistry { [RegisterComponent] class VaporComponent : Component, ICollideBehavior { -#pragma warning disable 649 [Dependency] private readonly IMapManager _mapManager = default!; -#pragma warning enable 649 public override string Name => "Vapor"; [ViewVariables] @@ -78,7 +64,7 @@ namespace Content.Server.GameObjects.Components.Chemistry { var worldBounds = collidable.WorldAABB; var mapGrid = _mapManager.GetGrid(Owner.Transform.GridID); - + var tiles = mapGrid.GetTilesIntersecting(worldBounds); var amount = _transferAmount / ReagentUnit.New(tiles.Count()); foreach (var tile in tiles) diff --git a/Content.Server/GameObjects/Components/Command/CommunicationsConsoleComponent.cs b/Content.Server/GameObjects/Components/Command/CommunicationsConsoleComponent.cs index 53b2fa5675..d982b1fb06 100644 --- a/Content.Server/GameObjects/Components/Command/CommunicationsConsoleComponent.cs +++ b/Content.Server/GameObjects/Components/Command/CommunicationsConsoleComponent.cs @@ -1,5 +1,5 @@ using Content.Server.GameObjects.Components.Power.ApcNetComponents; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.GameObjects.Components.Command; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects.Components.UserInterface; diff --git a/Content.Server/GameObjects/Components/Construction/ConstructionComponent.cs b/Content.Server/GameObjects/Components/Construction/ConstructionComponent.cs index 49cd4cbeb8..d29c7d93c9 100644 --- a/Content.Server/GameObjects/Components/Construction/ConstructionComponent.cs +++ b/Content.Server/GameObjects/Components/Construction/ConstructionComponent.cs @@ -1,10 +1,7 @@ -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Shared.Construction; +using Content.Shared.Construction; using Content.Shared.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.IoC; -using Robust.Shared.Localization; using Robust.Shared.Serialization; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; @@ -17,9 +14,6 @@ namespace Content.Server.GameObjects.Components.Construction [RegisterComponent] public class ConstructionComponent : Component, IExamine { -#pragma warning disable 649 - [Dependency] private readonly ILocalizationManager _loc; -#pragma warning restore 649 /// public override string Name => "Construction"; diff --git a/Content.Server/GameObjects/Components/Conveyor/ConveyorComponent.cs b/Content.Server/GameObjects/Components/Conveyor/ConveyorComponent.cs index 13314712cb..6d6a192359 100644 --- a/Content.Server/GameObjects/Components/Conveyor/ConveyorComponent.cs +++ b/Content.Server/GameObjects/Components/Conveyor/ConveyorComponent.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.Interactable; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Power.ApcNetComponents; using Content.Server.GameObjects.EntitySystems; using Content.Shared.GameObjects.Components.Conveyor; diff --git a/Content.Server/GameObjects/Components/Damage/BreakableComponent.cs b/Content.Server/GameObjects/Components/Damage/BreakableComponent.cs index 226abbc3ab..0a9e53e03a 100644 --- a/Content.Server/GameObjects/Components/Damage/BreakableComponent.cs +++ b/Content.Server/GameObjects/Components/Damage/BreakableComponent.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; -using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Server.Interfaces; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.EntitySystems; +using Content.Server.Interfaces.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; diff --git a/Content.Server/GameObjects/Components/Damage/DamageOnHighSpeedImpactComponent.cs b/Content.Server/GameObjects/Components/Damage/DamageOnHighSpeedImpactComponent.cs index 2d5fc7cfdc..0dff2a90f2 100644 --- a/Content.Server/GameObjects/Components/Damage/DamageOnHighSpeedImpactComponent.cs +++ b/Content.Server/GameObjects/Components/Damage/DamageOnHighSpeedImpactComponent.cs @@ -1,14 +1,14 @@ -using Content.Server.GameObjects.Components.Mobs; -using Content.Server.Interfaces.GameObjects; +using System; +using Content.Server.GameObjects.Components.Mobs; using Content.Shared.Audio; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Robust.Server.GameObjects.EntitySystems; -using Robust.Shared.Audio; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; +using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Random; using Robust.Shared.Serialization; @@ -19,6 +19,7 @@ namespace Content.Server.GameObjects.Components.Damage public class DamageOnHighSpeedImpactComponent : Component, ICollideBehavior { [Dependency] private IRobustRandom _robustRandom = default!; + [Dependency] private IGameTiming _gameTiming = default!; public override string Name => "DamageOnHighSpeedImpact"; @@ -29,7 +30,9 @@ namespace Content.Server.GameObjects.Components.Damage public string SoundHit { get; set; } = ""; public float StunChance { get; set; } = 0.25f; public int StunMinimumDamage { get; set; } = 10; - public float StunSeconds { get; set; } + public float StunSeconds { get; set; } = 1f; + public float DamageCooldown { get; set; } = 2f; + private TimeSpan _lastHit = TimeSpan.Zero; public override void ExposeData(ObjectSerializer serializer) { @@ -42,6 +45,7 @@ namespace Content.Server.GameObjects.Components.Damage serializer.DataField(this, x => SoundHit, "soundHit", ""); serializer.DataField(this, x => StunChance, "stunChance", 0.25f); serializer.DataField(this, x => StunSeconds, "stunSeconds", 1f); + serializer.DataField(this, x => DamageCooldown, "damageCooldown", 2f); serializer.DataField(this, x => StunMinimumDamage, "stunMinimumDamage", 10); } @@ -53,11 +57,16 @@ namespace Content.Server.GameObjects.Components.Damage if (speed < MinimumSpeed) return; - var damage = (int) (BaseDamage * (speed / MinimumSpeed) * Factor); - if(!string.IsNullOrEmpty(SoundHit)) EntitySystem.Get().PlayFromEntity(SoundHit, collidedWith, AudioHelpers.WithVariation(0.125f).WithVolume(-0.125f)); + if ((_gameTiming.CurTime - _lastHit).TotalSeconds < DamageCooldown) + return; + + _lastHit = _gameTiming.CurTime; + + var damage = (int) (BaseDamage * (speed / MinimumSpeed) * Factor); + if (Owner.TryGetComponent(out StunnableComponent stun) && _robustRandom.Prob(StunChance)) stun.Stun(StunSeconds); diff --git a/Content.Server/GameObjects/Components/Damage/DamageOnToolInteractComponent.cs b/Content.Server/GameObjects/Components/Damage/DamageOnToolInteractComponent.cs index fb3a546d7e..836dd9d000 100644 --- a/Content.Server/GameObjects/Components/Damage/DamageOnToolInteractComponent.cs +++ b/Content.Server/GameObjects/Components/Damage/DamageOnToolInteractComponent.cs @@ -1,9 +1,10 @@ -using Content.Server.GameObjects.Components.Interactable; +using System.Collections.Generic; +using Content.Server.GameObjects.Components.Interactable; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Interactable; +using Content.Shared.Interfaces.GameObjects.Components; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; -using System.Collections.Generic; -using Content.Shared.Interfaces.GameObjects.Components; namespace Content.Server.GameObjects.Components.Damage { @@ -56,9 +57,9 @@ namespace Content.Server.GameObjects.Components.Damage { if (eventArgs.Target.TryGetComponent(out var damageable)) { - if(tool.HasQuality(ToolQuality.Welding)) damageable.TakeDamage(Shared.GameObjects.DamageType.Heat, Damage, eventArgs.Using, eventArgs.User); + if(tool.HasQuality(ToolQuality.Welding)) damageable.TakeDamage(DamageType.Heat, Damage, eventArgs.Using, eventArgs.User); else - damageable.TakeDamage(Shared.GameObjects.DamageType.Brute, Damage, eventArgs.Using, eventArgs.User); + damageable.TakeDamage(DamageType.Brute, Damage, eventArgs.Using, eventArgs.User); return true; } return false; diff --git a/Content.Server/GameObjects/Components/Damage/DamageThreshold.cs b/Content.Server/GameObjects/Components/Damage/DamageThreshold.cs index 8cf06a9103..1efd2ba7a4 100644 --- a/Content.Server/GameObjects/Components/Damage/DamageThreshold.cs +++ b/Content.Server/GameObjects/Components/Damage/DamageThreshold.cs @@ -1,9 +1,8 @@ using System; -using Content.Shared.GameObjects; -using JetBrains.Annotations; +using Content.Shared.GameObjects.Components.Damage; using Robust.Shared.Interfaces.GameObjects; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Damage { /// /// Triggers an event when values rise above or drop below this threshold diff --git a/Content.Server/GameObjects/Components/Damage/DamageableComponent.cs b/Content.Server/GameObjects/Components/Damage/DamageableComponent.cs index dd378cfdee..613355bce2 100644 --- a/Content.Server/GameObjects/Components/Damage/DamageableComponent.cs +++ b/Content.Server/GameObjects/Components/Damage/DamageableComponent.cs @@ -1,15 +1,15 @@ using System; using System.Collections.Generic; using System.Linq; -using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects; -using Content.Shared.GameObjects; +using Content.Server.Interfaces.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Damage; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Damage { //TODO: add support for component add/remove diff --git a/Content.Server/GameObjects/Components/Damage/DestructibleComponent.cs b/Content.Server/GameObjects/Components/Damage/DestructibleComponent.cs index 4a34bc35a0..86a7abb03f 100644 --- a/Content.Server/GameObjects/Components/Damage/DestructibleComponent.cs +++ b/Content.Server/GameObjects/Components/Damage/DestructibleComponent.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; -using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Server.Interfaces; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.EntitySystems; +using Content.Server.Interfaces.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; @@ -12,7 +12,7 @@ using Robust.Shared.Random; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects.Components.Destructible +namespace Content.Server.GameObjects.Components.Damage { /// /// Deletes the entity once a certain damage threshold has been reached. diff --git a/Content.Server/GameObjects/Components/Damage/ResistanceSet.cs b/Content.Server/GameObjects/Components/Damage/ResistanceSet.cs index 982e614a15..e9a5e941a1 100644 --- a/Content.Server/GameObjects/Components/Damage/ResistanceSet.cs +++ b/Content.Server/GameObjects/Components/Damage/ResistanceSet.cs @@ -1,11 +1,11 @@ using System; using System.Collections.Generic; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Robust.Shared.Interfaces.Serialization; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Damage { /// /// Resistance set used by damageable objects. @@ -35,7 +35,7 @@ namespace Content.Server.GameObjects { _resistances[damageType] = resistanceSetting; }); - } + } } /// diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalCommands.cs b/Content.Server/GameObjects/Components/Disposal/DisposalCommands.cs index 51020360a7..5401182b5b 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalCommands.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalCommands.cs @@ -1,5 +1,4 @@ #nullable enable -using Content.Server.Interfaces; using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalHolderComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalHolderComponent.cs index 8099c291a0..f74eecb284 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalHolderComponent.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalHolderComponent.cs @@ -1,5 +1,7 @@ #nullable enable using System.Linq; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.Components.Mobs; using Robust.Server.GameObjects.Components.Container; using Robust.Shared.Containers; using Robust.Shared.GameObjects; diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs index ed953b4e70..29d5132925 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs @@ -1,9 +1,9 @@ #nullable enable using System; using System.Linq; -using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.GameObjects.Components.Disposal; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Robust.Server.Console; using Robust.Server.GameObjects; @@ -217,7 +217,7 @@ namespace Content.Server.GameObjects.Components.Disposal public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); - serializer.DataField(ref _clangSound, "clangSound", "/Audio/effects/clang.ogg"); + serializer.DataField(ref _clangSound, "clangSound", "/Audio/Effects/clang.ogg"); } public override void Initialize() diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs index ffc177fd15..89a6049b66 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs @@ -4,12 +4,14 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Power.ApcNetComponents; using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects.Components.Items; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Disposal; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.Container; @@ -92,7 +94,7 @@ namespace Content.Server.GameObjects.Components.Disposal collidable.Anchored; [ViewVariables] - private State State => _pressure >= 1 ? State.Ready : State.Pressurizing; + private PressureState State => _pressure >= 1 ? PressureState.Ready : PressureState.Pressurizing; [ViewVariables] private bool Engaged diff --git a/Content.Server/GameObjects/Components/DoAfterComponent.cs b/Content.Server/GameObjects/Components/DoAfterComponent.cs index 4222363af8..d77fc080d0 100644 --- a/Content.Server/GameObjects/Components/DoAfterComponent.cs +++ b/Content.Server/GameObjects/Components/DoAfterComponent.cs @@ -1,6 +1,6 @@ #nullable enable using System.Collections.Generic; -using Content.Server.GameObjects.EntitySystems; +using Content.Server.GameObjects.EntitySystems.DoAfter; using Content.Shared.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.Interfaces.GameObjects; @@ -38,20 +38,20 @@ namespace Content.Server.GameObjects.Components { return; } - + foreach (var (doAfter, id) in _doAfters) { // THE ALMIGHTY PYRAMID var message = new DoAfterMessage( - id, + id, doAfter.UserGrid, doAfter.TargetGrid, - doAfter.StartTime, - doAfter.EventArgs.Delay, - doAfter.EventArgs.BreakOnUserMove, + doAfter.StartTime, + doAfter.EventArgs.Delay, + doAfter.EventArgs.BreakOnUserMove, doAfter.EventArgs.BreakOnTargetMove, doAfter.EventArgs.Target?.Uid ?? EntityUid.Invalid); - + SendNetworkMessage(message, connectedClient); } } @@ -59,7 +59,7 @@ namespace Content.Server.GameObjects.Components private bool TryGetConnectedClient(out INetChannel? connectedClient) { connectedClient = null; - + if (!Owner.TryGetComponent(out IActorComponent actorComponent)) { return false; @@ -81,15 +81,15 @@ namespace Content.Server.GameObjects.Components if (TryGetConnectedClient(out var connectedClient)) { var message = new DoAfterMessage( - _runningIndex, + _runningIndex, doAfter.UserGrid, doAfter.TargetGrid, - doAfter.StartTime, - doAfter.EventArgs.Delay, - doAfter.EventArgs.BreakOnUserMove, + doAfter.StartTime, + doAfter.EventArgs.Delay, + doAfter.EventArgs.BreakOnUserMove, doAfter.EventArgs.BreakOnTargetMove, doAfter.EventArgs.Target?.Uid ?? EntityUid.Invalid); - + SendNetworkMessage(message, connectedClient); } @@ -108,7 +108,7 @@ namespace Content.Server.GameObjects.Components var message = new CancelledDoAfterMessage(index); SendNetworkMessage(message, connectedClient); } - + _doAfters.Remove(doAfter); } @@ -127,4 +127,4 @@ namespace Content.Server.GameObjects.Components _doAfters.Remove(doAfter); } } -} \ No newline at end of file +} diff --git a/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs b/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs index 8b1ab391c7..bcd49e5c89 100644 --- a/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs +++ b/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs @@ -1,10 +1,12 @@ using System; using System.Linq; +using System.Threading; using Content.Server.GameObjects.Components.Access; using Content.Server.GameObjects.Components.Atmos; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Mobs; -using Content.Server.Interfaces.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Doors; using Content.Shared.GameObjects.Components.Movement; using Content.Shared.Interfaces.GameObjects.Components; @@ -17,11 +19,10 @@ using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Maths; using Robust.Shared.Serialization; -using Robust.Shared.Timers; using Robust.Shared.ViewVariables; -using CancellationTokenSource = System.Threading.CancellationTokenSource; +using Timer = Robust.Shared.Timers.Timer; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Doors { [RegisterComponent] [ComponentReference(typeof(IActivate))] @@ -237,7 +238,7 @@ namespace Content.Server.GameObjects if (percentage < 0.1f) continue; - damage.TakeDamage(Shared.GameObjects.DamageType.Brute, DoorCrushDamage); + damage.TakeDamage(DamageType.Brute, DoorCrushDamage); stun.Paralyze(DoorStunTime); hitSomeone = true; } diff --git a/Content.Server/GameObjects/Components/Explosion/ExplosiveComponent.cs b/Content.Server/GameObjects/Components/Explosion/ExplosiveComponent.cs index 96b7f19202..f23c611e24 100644 --- a/Content.Server/GameObjects/Components/Explosion/ExplosiveComponent.cs +++ b/Content.Server/GameObjects/Components/Explosion/ExplosiveComponent.cs @@ -1,5 +1,5 @@ using Content.Server.Explosions; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; diff --git a/Content.Server/GameObjects/Components/Explosion/FlashExplosiveComponent.cs b/Content.Server/GameObjects/Components/Explosion/FlashExplosiveComponent.cs index 4aec5f7fbc..a547e5f0b3 100644 --- a/Content.Server/GameObjects/Components/Explosion/FlashExplosiveComponent.cs +++ b/Content.Server/GameObjects/Components/Explosion/FlashExplosiveComponent.cs @@ -1,6 +1,6 @@ using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Weapon; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.Containers; using Robust.Shared.GameObjects; diff --git a/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs b/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs index e52172a4cd..24b56c876f 100644 --- a/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs +++ b/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs @@ -1,9 +1,7 @@ -using System; using Content.Server.GameObjects.Components.Chemistry; -using Content.Server.GameObjects.EntitySystems; using Content.Shared.Chemistry; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs b/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs index 8b89efc673..598ee20754 100644 --- a/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs +++ b/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs @@ -2,10 +2,10 @@ using System.Collections.Generic; using System.Linq; using System.Threading; -using Content.Server.GameObjects.Components.Movement; using Content.Server.GameObjects.Components.Chemistry; -using Content.Server.GameObjects.EntitySystems.Click; +using Content.Server.GameObjects.Components.Movement; using Content.Shared.Chemistry; +using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Physics; using Robust.Server.GameObjects; using Robust.Server.GameObjects.EntitySystems; @@ -24,7 +24,6 @@ using Robust.Shared.Serialization; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; using Timer = Robust.Shared.Timers.Timer; -using Content.Shared.GameObjects.EntitySystems; namespace Content.Server.GameObjects.Components.Fluids { diff --git a/Content.Server/GameObjects/Components/Fluids/SpillHelper.cs b/Content.Server/GameObjects/Components/Fluids/SpillHelper.cs index 493da11ffa..5b85924b8d 100644 --- a/Content.Server/GameObjects/Components/Fluids/SpillHelper.cs +++ b/Content.Server/GameObjects/Components/Fluids/SpillHelper.cs @@ -1,7 +1,6 @@ #nullable enable using Content.Shared.Chemistry; using Robust.Server.Interfaces.GameObjects; - using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; diff --git a/Content.Server/GameObjects/Components/Fluids/SprayComponent.cs b/Content.Server/GameObjects/Components/Fluids/SprayComponent.cs index 11c450f391..ffb9cbdaa0 100644 --- a/Content.Server/GameObjects/Components/Fluids/SprayComponent.cs +++ b/Content.Server/GameObjects/Components/Fluids/SprayComponent.cs @@ -1,21 +1,13 @@ -using System; -using System.Collections.Generic; -using Content.Server.GameObjects.Components.Chemistry; +using Content.Server.GameObjects.Components.Chemistry; using Content.Server.Interfaces; using Content.Shared.Chemistry; using Content.Shared.Interfaces.GameObjects.Components; -using Microsoft.EntityFrameworkCore.Update.Internal; using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Components; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Localization; -using Robust.Shared.Map; -using Robust.Shared.Maths; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; diff --git a/Content.Server/GameObjects/Components/GUI/HandsComponent.cs b/Content.Server/GameObjects/Components/GUI/HandsComponent.cs index c25fc442d2..ea75c7f382 100644 --- a/Content.Server/GameObjects/Components/GUI/HandsComponent.cs +++ b/Content.Server/GameObjects/Components/GUI/HandsComponent.cs @@ -3,14 +3,15 @@ using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Movement; -using Content.Server.Interfaces.GameObjects.Components.Items; -using Content.Shared.GameObjects.Components.Items; using Content.Server.GameObjects.EntitySystems.Click; using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Shared.BodySystem; +using Content.Server.Interfaces.GameObjects.Components.Items; +using Content.Shared.GameObjects.Components.Items; using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.Health.BodySystem; using Content.Shared.Physics; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.Container; @@ -41,6 +42,8 @@ namespace Content.Server.GameObjects.Components.GUI private string? _activeHand; private uint _nextHand; + public event Action? OnItemChanged; + [ViewVariables(VVAccess.ReadWrite)] public string? ActiveHand { @@ -59,6 +62,8 @@ namespace Content.Server.GameObjects.Components.GUI [ViewVariables] private readonly List _hands = new List(); + public IEnumerable Hands => _hands.Select(h => h.Name); + // Mostly arbitrary. public const float PickupRange = 2; @@ -104,6 +109,12 @@ namespace Content.Server.GameObjects.Components.GUI return GetHand(handName)?.Entity?.GetComponent(); } + public bool TryGetItem(string handName, [MaybeNullWhen(false)] out ItemComponent item) + { + item = GetItem(handName); + return item != null; + } + public ItemComponent? GetActiveHand => ActiveHand == null ? null : GetItem(ActiveHand); @@ -135,6 +146,8 @@ namespace Content.Server.GameObjects.Components.GUI { if (PutInHand(item, hand, false)) { + OnItemChanged?.Invoke(); + return true; } } @@ -155,6 +168,7 @@ namespace Content.Server.GameObjects.Components.GUI if (success) { item.Owner.Transform.LocalPosition = Vector2.Zero; + OnItemChanged?.Invoke(); } _entitySystemManager.GetEntitySystem().HandSelectedInteraction(Owner, item.Owner); @@ -202,7 +216,7 @@ namespace Content.Server.GameObjects.Components.GUI if (!interactionSystem.TryDroppedInteraction(Owner, item.Owner)) return false; } - + interactionSystem.DroppedInteraction(Owner, item.Owner); return true; } @@ -249,6 +263,8 @@ namespace Content.Server.GameObjects.Components.GUI container.Insert(item.Owner); } + OnItemChanged?.Invoke(); + Dirty(); return true; } @@ -299,6 +315,8 @@ namespace Content.Server.GameObjects.Components.GUI container.Insert(item.Owner); } + OnItemChanged?.Invoke(); + Dirty(); return true; } @@ -363,6 +381,8 @@ namespace Content.Server.GameObjects.Components.GUI throw new InvalidOperationException(); } + OnItemChanged?.Invoke(); + Dirty(); return true; } @@ -414,6 +434,8 @@ namespace Content.Server.GameObjects.Components.GUI ActiveHand ??= name; + OnItemChanged?.Invoke(); + Dirty(); } @@ -434,6 +456,8 @@ namespace Content.Server.GameObjects.Components.GUI _activeHand = _hands.FirstOrDefault()?.Name; } + OnItemChanged?.Invoke(); + Dirty(); } @@ -644,13 +668,13 @@ namespace Content.Server.GameObjects.Components.GUI Dirty(); - if (!message.Entity.TryGetComponent(out IPhysicsComponent physics)) + if (!message.Entity.TryGetComponent(out ICollidableComponent collidable)) { return; } // set velocity to zero - physics.Stop(); + collidable.Stop(); return; } } diff --git a/Content.Server/GameObjects/Components/GUI/HumanInventoryControllerComponent.cs b/Content.Server/GameObjects/Components/GUI/HumanInventoryControllerComponent.cs index 0bfe3b1c04..80eb1e9d75 100644 --- a/Content.Server/GameObjects/Components/GUI/HumanInventoryControllerComponent.cs +++ b/Content.Server/GameObjects/Components/GUI/HumanInventoryControllerComponent.cs @@ -1,4 +1,3 @@ -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Items.Storage; using Robust.Server.GameObjects.Components.Container; using Robust.Shared.GameObjects; @@ -7,7 +6,7 @@ using Robust.Shared.Localization; using Robust.Shared.Timers; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.GUI { // Handles the special behavior of pockets/ID card slot and their relation to uniforms. [RegisterComponent] diff --git a/Content.Server/GameObjects/Components/GUI/IInventoryController.cs b/Content.Server/GameObjects/Components/GUI/IInventoryController.cs index af6ddc9725..e3071e2d6a 100644 --- a/Content.Server/GameObjects/Components/GUI/IInventoryController.cs +++ b/Content.Server/GameObjects/Components/GUI/IInventoryController.cs @@ -1,7 +1,7 @@ using Robust.Shared.Interfaces.GameObjects; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.GUI { /// /// Allows for overriding inventory-related behavior on an entity. diff --git a/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs b/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs index 5a9ed13f6a..1d1e52b6a2 100644 --- a/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs +++ b/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using Content.Server.GameObjects.Components; -using Content.Server.GameObjects.Components.GUI; -using Content.Shared.GameObjects.Components.Inventory; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.EntitySystems; using Content.Server.GameObjects.EntitySystems.Click; -using Content.Server.Interfaces.GameObjects.Components.Interaction; using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Inventory; using Content.Shared.GameObjects.EntitySystems; using Robust.Server.GameObjects.Components.Container; using Robust.Shared.GameObjects; @@ -22,9 +20,9 @@ using Robust.Shared.Map; using Robust.Shared.Players; using Robust.Shared.ViewVariables; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; -using static Content.Shared.GameObjects.SharedInventoryComponent.ClientInventoryMessage; +using static Content.Shared.GameObjects.Components.Inventory.SharedInventoryComponent.ClientInventoryMessage; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.GUI { [RegisterComponent] public class InventoryComponent : SharedInventoryComponent, IExAct, IEffectBlocker, IPressureProtection @@ -35,9 +33,13 @@ namespace Content.Server.GameObjects #pragma warning restore 649 [ViewVariables] - private readonly Dictionary SlotContainers = new Dictionary(); + private readonly Dictionary _slotContainers = new Dictionary(); - private KeyValuePair? HoverEntity; + private KeyValuePair? _hoverEntity; + + public IEnumerable Slots => _slotContainers.Keys; + + public event Action OnItemChanged; public override void Initialize() { @@ -45,7 +47,7 @@ namespace Content.Server.GameObjects foreach (var slotName in InventoryInstance.SlotMasks) { - if (slotName != Slots.NONE) + if (slotName != EquipmentSlotDefines.Slots.NONE) { AddSlot(slotName); } @@ -60,7 +62,7 @@ namespace Content.Server.GameObjects { var multiplier = 1f; - foreach (var (slot, containerSlot) in SlotContainers) + foreach (var (slot, containerSlot) in _slotContainers) { foreach (var entity in containerSlot.ContainedEntities) { @@ -83,7 +85,7 @@ namespace Content.Server.GameObjects { var multiplier = 1f; - foreach (var (slot, containerSlot) in SlotContainers) + foreach (var (slot, containerSlot) in _slotContainers) { foreach (var entity in containerSlot.ContainedEntities) { @@ -112,7 +114,7 @@ namespace Content.Server.GameObjects public override void OnRemove() { - var slots = SlotContainers.Keys.ToList(); + var slots = _slotContainers.Keys.ToList(); foreach (var slot in slots) { RemoveSlot(slot); @@ -142,15 +144,15 @@ namespace Content.Server.GameObjects } public T GetSlotItem(Slots slot) where T : ItemComponent { - if (!SlotContainers.ContainsKey(slot)) + if (!_slotContainers.ContainsKey(slot)) { return null; } - var containedEntity = SlotContainers[slot].ContainedEntity; + var containedEntity = _slotContainers[slot].ContainedEntity; if (containedEntity?.Deleted == true) { - SlotContainers[slot] = null; + _slotContainers[slot] = null; containedEntity = null; Dirty(); } @@ -171,7 +173,7 @@ namespace Content.Server.GameObjects /// /// The slot to put the item in. /// The item to insert into the slot. - /// The translated reason why the item cannot be equiped, if this function returns false. Can be null. + /// The translated reason why the item cannot be equipped, if this function returns false. Can be null. /// True if the item was successfully inserted, false otherwise. public bool Equip(Slots slot, ItemComponent item, out string reason) { @@ -186,7 +188,7 @@ namespace Content.Server.GameObjects return false; } - var inventorySlot = SlotContainers[slot]; + var inventorySlot = _slotContainers[slot]; if (!inventorySlot.Insert(item.Owner)) { return false; @@ -194,6 +196,8 @@ namespace Content.Server.GameObjects _entitySystemManager.GetEntitySystem().EquippedInteraction(Owner, item.Owner, slot); + OnItemChanged?.Invoke(); + Dirty(); return true; @@ -241,7 +245,7 @@ namespace Content.Server.GameObjects reason = Loc.GetString("You can't equip this!"); } - return pass && SlotContainers[slot].CanInsert(item.Owner); + return pass && _slotContainers[slot].CanInsert(item.Owner); } public bool CanEquip(Slots slot, ItemComponent item) => CanEquip(slot, item, out var _); @@ -260,7 +264,7 @@ namespace Content.Server.GameObjects return false; } - var inventorySlot = SlotContainers[slot]; + var inventorySlot = _slotContainers[slot]; var item = inventorySlot.ContainedEntity.GetComponent(); if (!inventorySlot.Remove(inventorySlot.ContainedEntity)) { @@ -273,6 +277,8 @@ namespace Content.Server.GameObjects _entitySystemManager.GetEntitySystem().UnequippedInteraction(Owner, item.Owner, slot); + OnItemChanged?.Invoke(); + Dirty(); return true; @@ -290,7 +296,7 @@ namespace Content.Server.GameObjects if (!ActionBlockerSystem.CanUnequip(Owner)) return false; - var InventorySlot = SlotContainers[slot]; + var InventorySlot = _slotContainers[slot]; return InventorySlot.ContainedEntity != null && InventorySlot.CanRemove(InventorySlot.ContainedEntity); } @@ -309,7 +315,12 @@ namespace Content.Server.GameObjects } Dirty(); - return SlotContainers[slot] = ContainerManagerComponent.Create(GetSlotString(slot), Owner); + + _slotContainers[slot] = ContainerManagerComponent.Create(GetSlotString(slot), Owner); + + OnItemChanged?.Invoke(); + + return _slotContainers[slot]; } /// @@ -333,7 +344,10 @@ namespace Content.Server.GameObjects "Unable to remove slot as the contained clothing could not be dropped"); } - SlotContainers.Remove(slot); + _slotContainers.Remove(slot); + + OnItemChanged?.Invoke(); + Dirty(); } @@ -344,7 +358,7 @@ namespace Content.Server.GameObjects /// True if the slot exists, false otherwise. public bool HasSlot(Slots slot) { - return SlotContainers.ContainsKey(slot); + return _slotContainers.ContainsKey(slot); } /// @@ -356,7 +370,7 @@ namespace Content.Server.GameObjects // make sure this is one of our containers. // Technically the correct way would be to enumerate the possible slot names // comparing with this container, but I might as well put the dictionary to good use. - if (!(container is ContainerSlot slot) || !SlotContainers.ContainsValue(slot)) + if (!(container is ContainerSlot slot) || !_slotContainers.ContainsValue(slot)) return; if (entity.TryGetComponent(out ItemComponent itemComp)) @@ -364,6 +378,8 @@ namespace Content.Server.GameObjects itemComp.RemovedFromSlot(); } + OnItemChanged?.Invoke(); + Dirty(); } @@ -419,7 +435,7 @@ namespace Content.Server.GameObjects if (activeHand != null && GetSlotItem(msg.Inventoryslot) == null) { var canEquip = CanEquip(msg.Inventoryslot, activeHand, out var reason); - HoverEntity = new KeyValuePair(msg.Inventoryslot, (activeHand.Owner.Uid, canEquip)); + _hoverEntity = new KeyValuePair(msg.Inventoryslot, (activeHand.Owner.Uid, canEquip)); Dirty(); } @@ -478,7 +494,7 @@ namespace Content.Server.GameObjects public override ComponentState GetComponentState() { var list = new List>(); - foreach (var (slot, container) in SlotContainers) + foreach (var (slot, container) in _slotContainers) { if (container.ContainedEntity != null) { @@ -486,8 +502,8 @@ namespace Content.Server.GameObjects } } - var hover = HoverEntity; - HoverEntity = null; + var hover = _hoverEntity; + _hoverEntity = null; return new InventoryComponentState(list, hover); } @@ -499,7 +515,7 @@ namespace Content.Server.GameObjects return; } - foreach (var slot in SlotContainers.Values.ToList()) + foreach (var slot in _slotContainers.Values.ToList()) { foreach (var entity in slot.ContainedEntities) { diff --git a/Content.Server/GameObjects/Components/GUI/StrippableComponent.cs b/Content.Server/GameObjects/Components/GUI/StrippableComponent.cs new file mode 100644 index 0000000000..e045fd2b5a --- /dev/null +++ b/Content.Server/GameObjects/Components/GUI/StrippableComponent.cs @@ -0,0 +1,372 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.EntitySystems.DoAfter; +using Content.Server.Interfaces; +using Content.Shared.GameObjects.Components.GUI; +using Content.Shared.GameObjects.Components.Inventory; +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Server.GameObjects.Components.UserInterface; +using Robust.Server.Interfaces.GameObjects; +using Robust.Server.Interfaces.Player; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Log; +using Robust.Shared.ViewVariables; +using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; + +namespace Content.Server.GameObjects.Components.GUI +{ + [RegisterComponent] + public sealed class StrippableComponent : SharedStrippableComponent, IDragDrop + { + [Dependency] private IServerNotifyManager _notifyManager = default!; + + public const float StripDelay = 2f; + + [ViewVariables] + private BoundUserInterface _userInterface; + + private InventoryComponent _inventoryComponent; + private HandsComponent _handsComponent; + + public override void Initialize() + { + base.Initialize(); + + _userInterface = Owner.GetComponent().GetBoundUserInterface(StrippingUiKey.Key); + _userInterface.OnReceiveMessage += HandleUserInterfaceMessage; + + _inventoryComponent = Owner.GetComponent(); + _handsComponent = Owner.GetComponent(); + + _inventoryComponent.OnItemChanged += UpdateSubscribed; + + // Initial update. + UpdateSubscribed(); + } + + private void UpdateSubscribed() + { + var inventory = GetInventorySlots(); + var hands = GetHandSlots(); + + _userInterface.SetState(new StrippingBoundUserInterfaceState(inventory, hands)); + } + + public bool CanDragDrop(DragDropEventArgs eventArgs) + { + return eventArgs.User.HasComponent() + && eventArgs.Target != eventArgs.Dropped && eventArgs.Target == eventArgs.User; + } + + public bool DragDrop(DragDropEventArgs eventArgs) + { + if (!eventArgs.User.TryGetComponent(out IActorComponent actor)) return false; + + OpenUserInterface(actor.playerSession); + return true; + } + + private Dictionary GetInventorySlots() + { + var dictionary = new Dictionary(); + + foreach (var slot in _inventoryComponent.Slots) + { + dictionary[slot] = _inventoryComponent.GetSlotItem(slot)?.Owner.Name ?? "None"; + } + + return dictionary; + } + + private Dictionary GetHandSlots() + { + var dictionary = new Dictionary(); + + foreach (var hand in _handsComponent.Hands) + { + dictionary[hand] = _handsComponent.GetItem(hand)?.Owner.Name ?? "None"; + } + + return dictionary; + } + + private void OpenUserInterface(IPlayerSession session) + { + _userInterface.Open(session); + } + + /// + /// Places item in user's active hand to an inventory slot. + /// + private async void PlaceActiveHandItemInInventory(IEntity user, Slots slot) + { + var inventory = Owner.GetComponent(); + var userHands = user.GetComponent(); + var item = userHands.GetActiveHand; + + bool Check() + { + if (!ActionBlockerSystem.CanInteract(user)) + return false; + + if (item == null) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("You aren't holding anything!")); + return false; + } + + if (!userHands.CanDrop(userHands.ActiveHand!)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("You can't drop that!")); + return false; + } + + if (!inventory.HasSlot(slot)) + return false; + + if (inventory.TryGetSlotItem(slot, out ItemComponent _)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} already {0:have} something there!", Owner)); + return false; + } + + if (!inventory.CanEquip(slot, item)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} cannot equip that there!", Owner)); + return false; + } + + return true; + } + + var doAfterSystem = EntitySystem.Get(); + + var doAfterArgs = new DoAfterEventArgs(user, StripDelay, CancellationToken.None, Owner) + { + ExtraCheck = Check, + BreakOnStun = true, + BreakOnDamage = true, + BreakOnTargetMove = true, + BreakOnUserMove = true, + NeedHand = true, + }; + + var result = await doAfterSystem.DoAfter(doAfterArgs); + if (result != DoAfterStatus.Finished) return; + + userHands.Drop(item!.Owner, false); + inventory.Equip(slot, item!.Owner); + + UpdateSubscribed(); + } + + /// + /// Places item in user's active hand in one of the entity's hands. + /// + private async void PlaceActiveHandItemInHands(IEntity user, string hand) + { + var hands = Owner.GetComponent(); + var userHands = user.GetComponent(); + var item = userHands.GetActiveHand; + + bool Check() + { + if (!ActionBlockerSystem.CanInteract(user)) + return false; + + if (item == null) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("You aren't holding anything!")); + return false; + } + + if (!userHands.CanDrop(userHands.ActiveHand!)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("You can't drop that!")); + return false; + } + + if (!hands.HasHand(hand)) + return false; + + if (hands.TryGetItem(hand, out var _)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} already {0:have} something there!", Owner)); + return false; + } + + if (!hands.CanPutInHand(item, hand)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} cannot put that there!", Owner)); + return false; + } + + return true; + } + + var doAfterSystem = EntitySystem.Get(); + + var doAfterArgs = new DoAfterEventArgs(user, StripDelay, CancellationToken.None, Owner) + { + ExtraCheck = Check, + BreakOnStun = true, + BreakOnDamage = true, + BreakOnTargetMove = true, + BreakOnUserMove = true, + NeedHand = true, + }; + + var result = await doAfterSystem.DoAfter(doAfterArgs); + if (result != DoAfterStatus.Finished) return; + + userHands.Drop(hand, false); + hands.PutInHand(item, hand, false); + UpdateSubscribed(); + } + + /// + /// Takes an item from the inventory and places it in the user's active hand. + /// + private async void TakeItemFromInventory(IEntity user, Slots slot) + { + var inventory = Owner.GetComponent(); + var userHands = user.GetComponent(); + + bool Check() + { + if (!ActionBlockerSystem.CanInteract(user)) + return false; + + if (!inventory.HasSlot(slot)) + return false; + + if (!inventory.TryGetSlotItem(slot, out ItemComponent itemToTake)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} {0:have} nothing there!", Owner)); + return false; + } + + if (!inventory.CanUnequip(slot)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} cannot unequip that!", Owner)); + return false; + } + + return true; + } + + var doAfterSystem = EntitySystem.Get(); + + var doAfterArgs = new DoAfterEventArgs(user, StripDelay, CancellationToken.None, Owner) + { + ExtraCheck = Check, + BreakOnStun = true, + BreakOnDamage = true, + BreakOnTargetMove = true, + BreakOnUserMove = true, + }; + + var result = await doAfterSystem.DoAfter(doAfterArgs); + if (result != DoAfterStatus.Finished) return; + + var item = inventory.GetSlotItem(slot); + inventory.Unequip(slot); + userHands.PutInHandOrDrop(item); + UpdateSubscribed(); + } + + /// + /// Takes an item from a hand and places it in the user's active hand. + /// + private async void TakeItemFromHands(IEntity user, string hand) + { + var hands = Owner.GetComponent(); + var userHands = user.GetComponent(); + + bool Check() + { + if (!ActionBlockerSystem.CanInteract(user)) + return false; + + if (!hands.HasHand(hand)) + return false; + + if (!hands.TryGetItem(hand, out var heldItem)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} {0:have} nothing there!", Owner)); + return false; + } + + if (!hands.CanDrop(hand)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} cannot drop that!", Owner)); + return false; + } + + return true; + } + + var doAfterSystem = EntitySystem.Get(); + + var doAfterArgs = new DoAfterEventArgs(user, StripDelay, CancellationToken.None, Owner) + { + ExtraCheck = Check, + BreakOnStun = true, + BreakOnDamage = true, + BreakOnTargetMove = true, + BreakOnUserMove = true, + }; + + var result = await doAfterSystem.DoAfter(doAfterArgs); + if (result != DoAfterStatus.Finished) return; + + var item = hands.GetItem(hand); + hands.Drop(hand, false); + userHands.PutInHandOrDrop(item); + UpdateSubscribed(); + } + + private void HandleUserInterfaceMessage(ServerBoundUserInterfaceMessage obj) + { + var user = obj.Session.AttachedEntity; + if (user == null || !(user.TryGetComponent(out HandsComponent userHands))) return; + + var placingItem = userHands.GetActiveHand != null; + + switch (obj.Message) + { + case StrippingInventoryButtonPressed inventoryMessage: + var inventory = Owner.GetComponent(); + + if (inventory.TryGetSlotItem(inventoryMessage.Slot, out ItemComponent _)) + placingItem = false; + + if(placingItem) + PlaceActiveHandItemInInventory(user, inventoryMessage.Slot); + else + TakeItemFromInventory(user, inventoryMessage.Slot); + break; + case StrippingHandButtonPressed handMessage: + var hands = Owner.GetComponent(); + + if (hands.TryGetItem(handMessage.Hand, out _)) + placingItem = false; + + if(placingItem) + PlaceActiveHandItemInHands(user, handMessage.Hand); + else + TakeItemFromHands(user, handMessage.Hand); + break; + default: + break; + } + } + } +} diff --git a/Content.Server/GameObjects/Components/Gravity/GravityGeneratorComponent.cs b/Content.Server/GameObjects/Components/Gravity/GravityGeneratorComponent.cs index 4db51104f3..637933dd06 100644 --- a/Content.Server/GameObjects/Components/Gravity/GravityGeneratorComponent.cs +++ b/Content.Server/GameObjects/Components/Gravity/GravityGeneratorComponent.cs @@ -1,7 +1,7 @@ using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.Interactable; using Content.Server.GameObjects.Components.Power.ApcNetComponents; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; using Content.Shared.GameObjects.Components.Gravity; using Content.Shared.GameObjects.Components.Interactable; diff --git a/Content.Server/GameObjects/Components/Healing/HealingComponent.cs b/Content.Server/GameObjects/Components/Healing/HealingComponent.cs index d9beaa3916..65bbf4154a 100644 --- a/Content.Server/GameObjects/Components/Healing/HealingComponent.cs +++ b/Content.Server/GameObjects/Components/Healing/HealingComponent.cs @@ -1,11 +1,12 @@ -using Content.Server.GameObjects.Components.Stack; +using Content.Server.GameObjects.Components.Damage; +using Content.Server.GameObjects.Components.Stack; using Content.Server.Utility; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; -namespace Content.Server.GameObjects.Components.Weapon.Melee +namespace Content.Server.GameObjects.Components.Healing { [RegisterComponent] public class HealingComponent : Component, IAfterInteract, IUse diff --git a/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs b/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs index 143b3e340c..f8b7bf1d47 100644 --- a/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs +++ b/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs @@ -1,10 +1,11 @@ using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Clothing; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Power; -using Content.Server.GameObjects.EntitySystems.Click; using Content.Server.Interfaces.GameObjects.Components.Items; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs index fdaa204f91..f85e7b64ea 100644 --- a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs +++ b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs @@ -2,9 +2,8 @@ using System; using Content.Server.Atmos; using Content.Server.GameObjects.Components.Chemistry; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.EntitySystems; -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Server.Interfaces.GameObjects.Components.Interaction; using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameObjects; @@ -21,7 +20,6 @@ using Robust.Shared.Utility; using Robust.Shared.ViewVariables; using Robust.Shared.Serialization; using Content.Shared.GameObjects.EntitySystems; -using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.Components.Interactable { @@ -212,13 +210,22 @@ namespace Content.Server.GameObjects.Components.Interactable } } + protected override void Shutdown() + { + base.Shutdown(); + _welderSystem.Unsubscribe(this); + } + public void OnUpdate(float frameTime) { - if (!HasQuality(ToolQuality.Welding) || !WelderLit) + if (!HasQuality(ToolQuality.Welding) || !WelderLit || Owner.Deleted) return; _solutionComponent?.TryRemoveReagent("chem.WeldingFuel", ReagentUnit.New(FuelLossRate * frameTime)); + Owner.Transform.GridPosition + .GetTileAtmosphere()?.HotspotExpose(700f, 50f, true); + if (Fuel == 0) ToggleWelderStatus(); diff --git a/Content.Server/GameObjects/Components/Items/Clothing/ClothingComponent.cs b/Content.Server/GameObjects/Components/Items/Clothing/ClothingComponent.cs index 290b25279a..a94c5982bc 100644 --- a/Content.Server/GameObjects/Components/Items/Clothing/ClothingComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Clothing/ClothingComponent.cs @@ -1,19 +1,18 @@ using System; using System.Collections.Generic; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.Interfaces; using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Items; using Content.Shared.Interfaces.GameObjects.Components; -using Robust.Shared.IoC; using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; using Robust.Shared.Serialization; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; -using Robust.Shared.Interfaces.GameObjects; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Items.Clothing { [RegisterComponent] [ComponentReference(typeof(ItemComponent))] diff --git a/Content.Server/GameObjects/Components/Items/DiceComponent.cs b/Content.Server/GameObjects/Components/Items/DiceComponent.cs index f916f15464..227c0e3c4e 100644 --- a/Content.Server/GameObjects/Components/Items/DiceComponent.cs +++ b/Content.Server/GameObjects/Components/Items/DiceComponent.cs @@ -1,5 +1,4 @@ -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Shared.Audio; +using Content.Shared.Audio; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Items/RCD/RCDAmmoComponent.cs b/Content.Server/GameObjects/Components/Items/RCD/RCDAmmoComponent.cs new file mode 100644 index 0000000000..16d2e5557e --- /dev/null +++ b/Content.Server/GameObjects/Components/Items/RCD/RCDAmmoComponent.cs @@ -0,0 +1,61 @@ +using System; +using Content.Server.Interfaces; +using Content.Server.Interfaces.GameObjects.Components.Items; +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Serialization; +using Robust.Shared.Utility; +using Robust.Shared.ViewVariables; + +namespace Content.Server.GameObjects.Components.Items.RCD +{ + [RegisterComponent] + public class RCDAmmoComponent : Component, IAfterInteract, IExamine + { + +#pragma warning disable 649 + [Dependency] private IServerNotifyManager _serverNotifyManager; +#pragma warning restore 649 + public override string Name => "RCDAmmo"; + + //How much ammo we refill + [ViewVariables(VVAccess.ReadWrite)] private int refillAmmo = 5; + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + + serializer.DataField(ref refillAmmo, "refillAmmo", 5); + } + + public void Examine(FormattedMessage message, bool inDetailsRange) + { + message.AddMarkup(Loc.GetString("It holds {0} charges.", refillAmmo)); + } + + void IAfterInteract.AfterInteract(AfterInteractEventArgs eventArgs) + { + if (eventArgs.Target == null || !eventArgs.Target.TryGetComponent(out RCDComponent rcdComponent) || !eventArgs.User.TryGetComponent(out IHandsComponent hands)) + { + return; + } + + if (rcdComponent.maxAmmo - rcdComponent._ammo < refillAmmo) + { + _serverNotifyManager.PopupMessage(rcdComponent.Owner, eventArgs.User, "The RCD is full!"); + return; + } + + rcdComponent._ammo = Math.Min(rcdComponent.maxAmmo, rcdComponent._ammo + refillAmmo); + _serverNotifyManager.PopupMessage(rcdComponent.Owner, eventArgs.User, "You refill the RCD."); + + //Deleting a held item causes a lot of errors + hands.Drop(Owner, false); + Owner.Delete(); + + } + } +} diff --git a/Content.Server/GameObjects/Components/Items/RCD/RCDComponent.cs b/Content.Server/GameObjects/Components/Items/RCD/RCDComponent.cs new file mode 100644 index 0000000000..d479c31d02 --- /dev/null +++ b/Content.Server/GameObjects/Components/Items/RCD/RCDComponent.cs @@ -0,0 +1,241 @@ +using System; +using System.Threading; +using Content.Server.GameObjects.EntitySystems.DoAfter; +using Content.Server.Interfaces; +using Content.Server.Utility; +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Maps; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Server.Interfaces.GameObjects; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.Transform; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Map; +using Robust.Shared.Serialization; +using Robust.Shared.Utility; +using Robust.Shared.ViewVariables; + +namespace Content.Server.GameObjects.Components.Items.RCD +{ + [RegisterComponent] + public class RCDComponent : Component, IAfterInteract, IUse, IExamine + { + +#pragma warning disable 649 + [Dependency] private readonly ITileDefinitionManager _tileDefinitionManager; + [Dependency] private readonly IEntitySystemManager _entitySystemManager; + [Dependency] private readonly IMapManager _mapManager; + [Dependency] private readonly IServerEntityManager _serverEntityManager; + [Dependency] private IServerNotifyManager _serverNotifyManager; +#pragma warning restore 649 + public override string Name => "RCD"; + private RcdMode _mode = 0; //What mode are we on? Can be floors, walls, deconstruct. + private readonly RcdMode[] _modes = (RcdMode[]) Enum.GetValues(typeof(RcdMode)); + [ViewVariables(VVAccess.ReadWrite)] public int maxAmmo; + public int _ammo; //How much "ammo" we have left. You can refill this with RCD ammo. + [ViewVariables(VVAccess.ReadWrite)] private float _delay; + private DoAfterSystem doAfterSystem; + + + ///Enum to store the different mode states for clarity. + private enum RcdMode + { + Floors, + Walls, + Airlock, + Deconstruct + } + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + + serializer.DataField(ref maxAmmo, "maxAmmo", 5); + serializer.DataField(ref _delay, "delay", 2f); + } + + public override void Initialize() + { + base.Initialize(); + _ammo = maxAmmo; + doAfterSystem = EntitySystem.Get(); + } + + /// + /// Method called when the RCD is clicked in-hand, this will cycle the RCD mode. + /// + + public bool UseEntity(UseEntityEventArgs eventArgs) + { + SwapMode(eventArgs); + return true; + } + + /// + ///Method to allow the user to swap the mode of the RCD by clicking it in hand, the actual in hand clicking bit is done over on UseEntity() + ///@param UseEntityEventArgs = The entity which triggered this method call, used to know where to play the "click" sound. + /// + + public void SwapMode(UseEntityEventArgs eventArgs) + { + _entitySystemManager.GetEntitySystem().PlayFromEntity("/Audio/Items/genhit.ogg", Owner); + int mode = (int) _mode; //Firstly, cast our RCDmode mode to an int (enums are backed by ints anyway by default) + mode = (++mode) % _modes.Length; //Then, do a rollover on the value so it doesnt hit an invalid state + _mode = (RcdMode) mode; //Finally, cast the newly acquired int mode to an RCDmode so we can use it. + _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"The RCD is now set to {this._mode} mode."); //Prints an overhead message above the RCD + } + + public void Examine(FormattedMessage message, bool inDetailsRange) + { + message.AddMarkup(Loc.GetString("It's currently on {0} mode, and holds {1} charges.",_mode.ToString(), this._ammo)); + } + + public async void AfterInteract(AfterInteractEventArgs eventArgs) + { + //No changing mode mid-RCD + var startingMode = _mode; + + var mapGrid = _mapManager.GetGrid(eventArgs.ClickLocation.GridID); + var tile = mapGrid.GetTileRef(eventArgs.ClickLocation); + var snapPos = mapGrid.SnapGridCellFor(eventArgs.ClickLocation, SnapGridOffset.Center); + + //Using an RCD isn't instantaneous + var cancelToken = new CancellationTokenSource(); + var doAfterEventArgs = new DoAfterEventArgs(eventArgs.User, _delay, cancelToken.Token, eventArgs.Target) + { + BreakOnDamage = true, + BreakOnStun = true, + NeedHand = true, + ExtraCheck = () => IsRCDStillValid(eventArgs, mapGrid, tile, snapPos, startingMode) //All of the sanity checks are here + }; + + var result = await doAfterSystem.DoAfter(doAfterEventArgs); + if (result == DoAfterStatus.Cancelled) + { + return; + } + + switch (_mode) + { + //Floor mode just needs the tile to be a space tile (subFloor) + case RcdMode.Floors: + mapGrid.SetTile(eventArgs.ClickLocation, new Tile(_tileDefinitionManager["floor_steel"].TileId)); + break; + //We don't want to place a space tile on something that's already a space tile. Let's do the inverse of the last check. + case RcdMode.Deconstruct: + if (!tile.IsBlockedTurf(true)) //Delete the turf + { + mapGrid.SetTile(snapPos, Tile.Empty); + } + else //Delete what the user targeted + { + eventArgs.Target.Delete(); + } + break; + //Walls are a special behaviour, and require us to build a new object with a transform rather than setting a grid tile, thus we early return to avoid the tile set code. + case RcdMode.Walls: + var ent = _serverEntityManager.SpawnEntity("solid_wall", mapGrid.GridTileToLocal(snapPos)); + ent.Transform.LocalRotation = Owner.Transform.LocalRotation; //Now apply icon smoothing. + break; + case RcdMode.Airlock: + var airlock = _serverEntityManager.SpawnEntity("Airlock", mapGrid.GridTileToLocal(snapPos)); + airlock.Transform.LocalRotation = Owner.Transform.LocalRotation; //Now apply icon smoothing. + break; + default: + return; //I don't know why this would happen, but sure I guess. Get out of here invalid state! + } + + _entitySystemManager.GetEntitySystem().PlayFromEntity("/Audio/Items/deconstruct.ogg", Owner); + _ammo--; + + } + + private bool IsRCDStillValid(AfterInteractEventArgs eventArgs, IMapGrid mapGrid, TileRef tile, MapIndices snapPos, RcdMode startingMode) + { + //Less expensive checks first. Failing those ones, we need to check that the tile isn't obstructed. + if (_ammo <= 0) + { + _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"The RCD is out of ammo!"); + return false; + } + + if (_mode != startingMode) + { + return false; + } + + var coordinates = mapGrid.GridTileToLocal(tile.GridIndices); + if (coordinates == GridCoordinates.InvalidGrid || !InteractionChecks.InRangeUnobstructed(eventArgs)) + { + return false; + } + + switch (_mode) + { + //Floor mode just needs the tile to be a space tile (subFloor) + case RcdMode.Floors: + if (!tile.Tile.IsEmpty) + { + _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"You can only build a floor on space!"); + return false; + } + + return true; + //We don't want to place a space tile on something that's already a space tile. Let's do the inverse of the last check. + case RcdMode.Deconstruct: + if (tile.Tile.IsEmpty) + { + return false; + } + + //They tried to decon a turf but the turf is blocked + if (eventArgs.Target == null && tile.IsBlockedTurf(true)) + { + _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"That tile is obstructed!"); + return false; + } + //They tried to decon a non-turf but it's not in the whitelist + if (eventArgs.Target != null && !eventArgs.Target.TryGetComponent(out RCDDeconstructWhitelist rcd_decon)) + { + _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"You can't deconstruct that!"); + return false; + } + + return true; + //Walls are a special behaviour, and require us to build a new object with a transform rather than setting a grid tile, thus we early return to avoid the tile set code. + case RcdMode.Walls: + if (tile.Tile.IsEmpty) + { + _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"Cannot build a wall on space!"); + return false; + } + + if (tile.IsBlockedTurf(true)) + { + _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"That tile is obstructed!"); + return false; + } + return true; + case RcdMode.Airlock: + if (tile.Tile.IsEmpty) + { + _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"Cannot build an airlock on space!"); + return false; + } + if (tile.IsBlockedTurf(true)) + { + _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"That tile is obstructed!"); + return false; + } + return true; + default: + return false; //I don't know why this would happen, but sure I guess. Get out of here invalid state! + } + } + } +} diff --git a/Content.Server/GameObjects/Components/Items/RCD/RCDDeconstructWhitelistComponent.cs b/Content.Server/GameObjects/Components/Items/RCD/RCDDeconstructWhitelistComponent.cs new file mode 100644 index 0000000000..7fb18a45cd --- /dev/null +++ b/Content.Server/GameObjects/Components/Items/RCD/RCDDeconstructWhitelistComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameObjects; + +namespace Content.Server.GameObjects.Components.Items.RCD +{ + [RegisterComponent] + public class RCDDeconstructWhitelist : Component + { + public override string Name => "RCDDeconstructWhitelist"; + } +} diff --git a/Content.Server/GameObjects/Components/Items/RCDComponent.cs b/Content.Server/GameObjects/Components/Items/RCDComponent.cs deleted file mode 100644 index 59dbc706c8..0000000000 --- a/Content.Server/GameObjects/Components/Items/RCDComponent.cs +++ /dev/null @@ -1,151 +0,0 @@ -using System; -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Server.Interfaces; -using Content.Server.Utility; -using Content.Shared.GameObjects.EntitySystems; -using Content.Shared.Interfaces.GameObjects.Components; -using Content.Shared.Maps; -using Robust.Server.GameObjects.EntitySystems; -using Robust.Server.Interfaces.GameObjects; -using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Components.Transform; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Map; -using Robust.Shared.IoC; -using Robust.Shared.Localization; -using Robust.Shared.Map; -using Robust.Shared.Serialization; -using Robust.Shared.Utility; - -namespace Content.Server.GameObjects.Components.Items -{ - [RegisterComponent] - public class RCDComponent : Component, IAfterInteract, IUse, IExamine - { - -#pragma warning disable 649 - [Dependency] private readonly ITileDefinitionManager _tileDefinitionManager; - [Dependency] private readonly IEntitySystemManager _entitySystemManager; - [Dependency] private readonly IMapManager _mapManager; - [Dependency] private readonly IServerEntityManager _serverEntityManager; - [Dependency] private IServerNotifyManager _serverNotifyManager; -#pragma warning restore 649 - public override string Name => "RCD"; - private string _outputTile = "floor_steel"; - private RcdMode _mode = 0; //What mode are we on? Can be floors, walls, deconstruct. - private readonly RcdMode[] _modes = (RcdMode[]) Enum.GetValues(typeof(RcdMode)); - private int _ammo = 5; //How much "ammo" we have left. You can refille this with RCD ammo. - - ///Enum to store the different mode states for clarity. - private enum RcdMode - { - Floors, - Walls, - Deconstruct - } - - public override void ExposeData(ObjectSerializer serializer) - { - base.ExposeData(serializer); - serializer.DataField(ref _outputTile, "output", "floor_steel"); - } - - - /// - /// Method called when the RCD is clicked in-hand, this will swap the RCD's mode from "floors" to "walls". - /// - - public bool UseEntity(UseEntityEventArgs eventArgs) - { - SwapMode(eventArgs); - return true; - } - - /// - ///Method to allow the user to swap the mode of the RCD by clicking it in hand, the actual in hand clicking bit is done over on UseEntity() - ///@param UseEntityEventArgs = The entity which triggered this method call, used to know where to play the "click" sound. - /// - - public void SwapMode(UseEntityEventArgs eventArgs) - { - _entitySystemManager.GetEntitySystem().PlayFromEntity("/Audio/Items/genhit.ogg", Owner); - int mode = (int) this._mode; //Firstly, cast our RCDmode mode to an int (enums are backed by ints anyway by default) - mode = (++mode) % _modes.Length; //Then, do a rollover on the value so it doesnt hit an invalid state - this._mode = (RcdMode) mode; //Finally, cast the newly acquired int mode to an RCDmode so we can use it. - switch (this._mode) - { - case RcdMode.Floors: - _outputTile = "floor_steel"; - break; - case RcdMode.Walls: - _outputTile = "base_wall"; - break; - case RcdMode.Deconstruct: - _outputTile = "space"; - break; - } - _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"The RCD is now set to {this._mode} mode."); //Prints an overhead message above the RCD - } - - /// - ///Method called when the user examines this object, it'll simply add the mode that it's in to the object's description - ///@params message = The original message from examining, like ..() in BYOND's examine - /// - - public void Examine(FormattedMessage message, bool inDetailsRange) - { - message.AddMarkup(Loc.GetString("It's currently on {0} mode, and holds {1} charges.",_mode.ToString(), this._ammo)); - } - - /// - /// Method to handle clicking on a tile to then appropriately RCD it. This can have several behaviours depending on mode. - /// @param eventAargs = An action event telling us what tile was clicked on. We use this to exrapolate where to place the new tile / remove the old one etc. - /// - - public void AfterInteract(AfterInteractEventArgs eventArgs) - { - var mapGrid = _mapManager.GetGrid(eventArgs.ClickLocation.GridID); - var tile = mapGrid.GetTileRef(eventArgs.ClickLocation); - var coordinates = mapGrid.GridTileToLocal(tile.GridIndices); - //Less expensive checks first. Failing those ones, we need to check that the tile isn't obstructed. - if (_ammo <= 0 || coordinates == GridCoordinates.InvalidGrid || !InteractionChecks.InRangeUnobstructed(eventArgs)) - { - return; - } - - var targetTile = (ContentTileDefinition) _tileDefinitionManager[tile.Tile.TypeId]; - - var canPlaceTile = targetTile.IsSubFloor; //Boolean to check if we're able to build the desired tile. This defaults to checking for subfloors, but is overridden by "deconstruct" which sets it to the inverse. - - switch (this._mode) - { - //Floor mode just needs the tile to be a space tile (subFloor) - case RcdMode.Floors: - break; - //We don't want to place a space tile on something that's already a space tile. Let's do the inverse of the last check. - case RcdMode.Deconstruct: - canPlaceTile = !targetTile.IsSubFloor; - break; - //Walls are a special behaviour, and require us to build a new object with a transform rather than setting a grid tile, thus we early return to avoid the tile set code. - case RcdMode.Walls: - var snapPos = mapGrid.SnapGridCellFor(eventArgs.ClickLocation, SnapGridOffset.Center); - var ent = _serverEntityManager.SpawnEntity("solid_wall", mapGrid.GridTileToLocal(snapPos)); - ent.Transform.LocalRotation = Owner.Transform.LocalRotation; //Now apply icon smoothing. - _entitySystemManager.GetEntitySystem().PlayFromEntity("/Audio/Items/deconstruct.ogg", Owner); - _ammo--; - return; //Alright we're done here - default: - return; //I don't know why this would happen, but sure I guess. Get out of here invalid state! - } - - ITileDefinition desiredTile = null; - desiredTile = _tileDefinitionManager[_outputTile]; - if (canPlaceTile) //If desiredTile is null by this point, something has gone horribly wrong and you need to fix it. - { - mapGrid.SetTile(eventArgs.ClickLocation, new Tile(desiredTile.TileId)); - _entitySystemManager.GetEntitySystem().PlayFromEntity("/Audio/Items/deconstruct.ogg", Owner); - _ammo--; - } - } - } -} diff --git a/Content.Server/GameObjects/Components/Items/Storage/CursedEntityStorageComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/CursedEntityStorageComponent.cs index 7f2c5ab711..f3068de5ce 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/CursedEntityStorageComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/CursedEntityStorageComponent.cs @@ -1,16 +1,12 @@ using System.Linq; -using Content.Server.Interfaces.GameObjects.Components.Interaction; using Content.Shared.Audio; -using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces.GameObjects.Components; -using Microsoft.EntityFrameworkCore.Internal; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; -using Robust.Shared.Log; using Robust.Shared.Random; namespace Content.Server.GameObjects.Components.Items.Storage diff --git a/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs index 5a22ddd354..73d1fd09ca 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs @@ -2,14 +2,14 @@ using System.Linq; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Interactable; -using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.Components.Mobs; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.GameObjects.Components.Interactable; using Content.Shared.GameObjects.Components.Storage; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; -using Content.Shared.Physics; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.Container; using Robust.Server.GameObjects.EntitySystems; @@ -49,8 +49,6 @@ namespace Content.Server.GameObjects.Components.Items.Storage private bool _occludesLight; private bool _open; private bool _isWeldedShut; - private int _collisionMaskStorage; - private int _collisionLayerStorage; [ViewVariables] protected Container Contents; @@ -201,18 +199,13 @@ namespace Content.Server.GameObjects.Components.Items.Storage { if (!_isCollidableWhenOpen && Owner.TryGetComponent(out var collidableComponent)) { - var physShape = collidableComponent.PhysicsShapes[0]; if (Open) { - _collisionMaskStorage = physShape.CollisionMask; - physShape.CollisionMask = (int)CollisionGroup.Impassable; - _collisionLayerStorage = physShape.CollisionLayer; - physShape.CollisionLayer = (int)CollisionGroup.None; + collidableComponent.Hard = false; } else { - physShape.CollisionMask = _collisionMaskStorage; - physShape.CollisionLayer = _collisionLayerStorage; + collidableComponent.Hard = true; } } diff --git a/Content.Server/GameObjects/Components/Items/Storage/Fill/CustodialClosetFill.cs b/Content.Server/GameObjects/Components/Items/Storage/Fill/CustodialClosetFill.cs index a8a65b3fb8..db89fb1798 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/Fill/CustodialClosetFill.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/Fill/CustodialClosetFill.cs @@ -2,7 +2,6 @@ using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; -using Robust.Shared.Random; namespace Content.Server.GameObjects.Components.Items.Storage.Fill { diff --git a/Content.Server/GameObjects/Components/Items/Storage/Fill/MedkitFillComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/Fill/MedkitFillComponent.cs index 50221e238f..713154661c 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/Fill/MedkitFillComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/Fill/MedkitFillComponent.cs @@ -1,9 +1,7 @@ using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; -using Robust.Shared.Map; namespace Content.Server.GameObjects.Components.Items.Storage.Fill { diff --git a/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolLockerFillComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolLockerFillComponent.cs index 0a49b6fdbd..c3b1feca9f 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolLockerFillComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolLockerFillComponent.cs @@ -1,6 +1,5 @@ using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; -using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Random; diff --git a/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxElectricalFillComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxElectricalFillComponent.cs index bd48fd78c9..ca3516f5fd 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxElectricalFillComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxElectricalFillComponent.cs @@ -3,7 +3,6 @@ using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; -using Robust.Shared.Map; using Robust.Shared.Random; namespace Content.Server.GameObjects.Components.Items.Storage.Fill diff --git a/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxEmergencyFillComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxEmergencyFillComponent.cs index 349ccb01b9..31af8f5f8d 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxEmergencyFillComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxEmergencyFillComponent.cs @@ -3,7 +3,6 @@ using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; -using Robust.Shared.Map; using Robust.Shared.Random; namespace Content.Server.GameObjects.Components.Items.Storage.Fill diff --git a/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxGoldFillComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxGoldFillComponent.cs index 595babd5ca..8f6dfdf5ee 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxGoldFillComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxGoldFillComponent.cs @@ -3,7 +3,6 @@ using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; -using Robust.Shared.Map; using Robust.Shared.Random; namespace Content.Server.GameObjects.Components.Items.Storage.Fill diff --git a/Content.Server/GameObjects/Components/Items/Storage/Fill/UtilityBeltClothingFillComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/Fill/UtilityBeltClothingFillComponent.cs index b99f03464c..876d5c9a84 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/Fill/UtilityBeltClothingFillComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/Fill/UtilityBeltClothingFillComponent.cs @@ -1,7 +1,6 @@ using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; namespace Content.Server.GameObjects.Components.Items.Storage.Fill diff --git a/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs index a9ca9e4c78..67eca347f2 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs @@ -1,12 +1,12 @@ using Content.Server.GameObjects.Components.GUI; -using Content.Server.GameObjects.Components.Items.Storage; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Server.Throw; using Content.Server.Utility; using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Items; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.Containers; @@ -14,11 +14,10 @@ using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; -using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Serialization; -namespace Content.Server.GameObjects.Components +namespace Content.Server.GameObjects.Components.Items.Storage { [RegisterComponent] [ComponentReference(typeof(StorableComponent))] @@ -29,7 +28,6 @@ namespace Content.Server.GameObjects.Components public override uint? NetID => ContentNetIDs.ITEM; #pragma warning disable 649 - [Dependency] private readonly IRobustRandom _robustRandom; [Dependency] private readonly IMapManager _mapManager; #pragma warning restore 649 @@ -93,7 +91,7 @@ namespace Content.Server.GameObjects.Components return false; } - if (Owner.TryGetComponent(out PhysicsComponent physics) && + if (Owner.TryGetComponent(out CollidableComponent physics) && physics.Anchored) { return false; diff --git a/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs index b2436cd3d2..dcdab4725b 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs @@ -1,8 +1,8 @@ using Content.Server.GameObjects.Components.Access; using Content.Server.Interfaces; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Storage; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Items/Storage/ServerStorageComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/ServerStorageComponent.cs index dc0c325a25..5359953f39 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/ServerStorageComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/ServerStorageComponent.cs @@ -3,7 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.GUI; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Server.Utility; using Content.Shared.GameObjects.Components.Storage; diff --git a/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs b/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs index 4acc5f5954..51b79141f9 100644 --- a/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs +++ b/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs @@ -1,34 +1,36 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; -using Content.Server.BodySystem; -using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.ViewVariables; using Content.Server.GameObjects.Components.Chemistry; using Content.Server.GameObjects.Components.GUI; -using Content.Shared.Chemistry; -using Robust.Shared.Serialization; -using Robust.Shared.Interfaces.GameObjects; -using Content.Shared.Prototypes.Kitchen; -using Content.Shared.Kitchen; -using Robust.Shared.Timers; -using Robust.Server.GameObjects; -using Content.Shared.GameObjects.Components.Power; -using Robust.Server.GameObjects.EntitySystems; -using Robust.Server.GameObjects.Components.Container; -using Robust.Server.GameObjects.Components.UserInterface; -using Robust.Server.Interfaces.GameObjects; -using Robust.Shared.Localization; -using Content.Server.Interfaces; -using Robust.Shared.Audio; -using Content.Server.Interfaces.GameObjects; -using Content.Server.Interfaces.Chat; -using Content.Shared.BodySystem; -using Robust.Shared.GameObjects.Systems; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.EntitySystems; +using Content.Server.Health.BodySystem; +using Content.Server.Interfaces; +using Content.Server.Interfaces.Chat; +using Content.Server.Interfaces.GameObjects; +using Content.Shared.Chemistry; +using Content.Shared.GameObjects.Components.Power; +using Content.Shared.Health.BodySystem; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Kitchen; +using Content.Shared.Prototypes.Kitchen; +using Robust.Server.GameObjects; +using Robust.Server.GameObjects.Components.Container; +using Robust.Server.GameObjects.Components.UserInterface; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Server.Interfaces.GameObjects; +using Robust.Shared.Audio; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Serialization; +using Robust.Shared.Timers; +using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Kitchen { @@ -311,7 +313,7 @@ namespace Content.Server.GameObjects.Components.Kitchen (_currentCookTimerTime == (uint)recipeToCook.CookTime); SetAppearance(MicrowaveVisualState.Cooking); _audioSystem.PlayFromEntity(_startCookingSound, Owner, AudioParams.Default); - Timer.Spawn((int)(_currentCookTimerTime * _cookTimeMultiplier), (System.Action)(() => + Timer.Spawn((int)(_currentCookTimerTime * _cookTimeMultiplier), (Action)(() => { if (_lostPower) { diff --git a/Content.Server/GameObjects/Components/ListeningComponent.cs b/Content.Server/GameObjects/Components/ListeningComponent.cs index 655e594bef..90bfb36ea1 100644 --- a/Content.Server/GameObjects/Components/ListeningComponent.cs +++ b/Content.Server/GameObjects/Components/ListeningComponent.cs @@ -1,14 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Content.Server.GameObjects.Components.Interactable; -using Content.Server.GameObjects.EntitySystems; -using Content.Server.Interfaces; +using Content.Server.Interfaces; using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; namespace Content.Server.GameObjects.Components { diff --git a/Content.Server/GameObjects/Components/Markers/ConditionalSpawnerComponent.cs b/Content.Server/GameObjects/Components/Markers/ConditionalSpawnerComponent.cs index 820803140a..7521a25650 100644 --- a/Content.Server/GameObjects/Components/Markers/ConditionalSpawnerComponent.cs +++ b/Content.Server/GameObjects/Components/Markers/ConditionalSpawnerComponent.cs @@ -8,10 +8,10 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.Interfaces.Reflection; using Robust.Shared.IoC; +using Robust.Shared.Log; using Robust.Shared.Random; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using Logger = Robust.Shared.Log.Logger; namespace Content.Server.GameObjects.Components.Markers { diff --git a/Content.Server/GameObjects/Components/Markers/SpawnPointComponent.cs b/Content.Server/GameObjects/Components/Markers/SpawnPointComponent.cs index 77b01c34a1..c1eed02761 100644 --- a/Content.Server/GameObjects/Components/Markers/SpawnPointComponent.cs +++ b/Content.Server/GameObjects/Components/Markers/SpawnPointComponent.cs @@ -1,5 +1,5 @@ using Content.Shared.GameObjects.Components.Markers; -using Content.Shared.Jobs; +using Content.Shared.Roles; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Prototypes; diff --git a/Content.Server/GameObjects/Components/Markers/TrashSpawnerComponent.cs b/Content.Server/GameObjects/Components/Markers/TrashSpawnerComponent.cs index 24403ad67c..0476fb8b99 100644 --- a/Content.Server/GameObjects/Components/Markers/TrashSpawnerComponent.cs +++ b/Content.Server/GameObjects/Components/Markers/TrashSpawnerComponent.cs @@ -1,18 +1,13 @@ -using System; -using Content.Server.GameObjects.Components.Markers; using System.Collections.Generic; -using Content.Server.GameTicking; -using Content.Server.Interfaces.GameTicking; -using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; -using Robust.Shared.Maths; using Robust.Shared.IoC; +using Robust.Shared.Log; +using Robust.Shared.Maths; using Robust.Shared.Random; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using Logger = Robust.Shared.Log.Logger; namespace Content.Server.GameObjects.Components.Markers { diff --git a/Content.Server/GameObjects/Components/Markers/WarpPointComponent.cs b/Content.Server/GameObjects/Components/Markers/WarpPointComponent.cs index 6301aa67dd..f67e91ab82 100644 --- a/Content.Server/GameObjects/Components/Markers/WarpPointComponent.cs +++ b/Content.Server/GameObjects/Components/Markers/WarpPointComponent.cs @@ -1,5 +1,4 @@ -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.Localization; using Robust.Shared.Serialization; diff --git a/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs b/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs index 7f80981f17..c6a051b2c4 100644 --- a/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs +++ b/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs @@ -1,8 +1,13 @@ using System; using System.Collections.Generic; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.Components.Damage; +using Content.Server.GameObjects.Components.Mobs; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Medical; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; +using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.Container; using Robust.Server.GameObjects.Components.UserInterface; @@ -11,8 +16,6 @@ using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Maths; using Robust.Shared.Utility; -using Content.Server.GameObjects.Components.Power.ApcNetComponents; -using Content.Shared.Interfaces.GameObjects.Components; namespace Content.Server.GameObjects.Components.Medical { diff --git a/Content.Server/GameObjects/Components/Metabolism/BloodstreamComponent.cs b/Content.Server/GameObjects/Components/Metabolism/BloodstreamComponent.cs index f1f9656f4f..e428c72f17 100644 --- a/Content.Server/GameObjects/Components/Metabolism/BloodstreamComponent.cs +++ b/Content.Server/GameObjects/Components/Metabolism/BloodstreamComponent.cs @@ -1,6 +1,6 @@ using System.Linq; using Content.Server.GameObjects.Components.Chemistry; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.Chemistry; using Robust.Shared.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/GameObjects/Components/Mining/AsteroidRockComponent.cs b/Content.Server/GameObjects/Components/Mining/AsteroidRockComponent.cs index f390604b38..a7fee5d76b 100644 --- a/Content.Server/GameObjects/Components/Mining/AsteroidRockComponent.cs +++ b/Content.Server/GameObjects/Components/Mining/AsteroidRockComponent.cs @@ -1,5 +1,6 @@ -using Content.Server.GameObjects.Components.Weapon.Melee; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.Components.Damage; +using Content.Server.GameObjects.Components.Weapon.Melee; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.EntitySystems; diff --git a/Content.Server/GameObjects/Components/Mobs/DamageStates.cs b/Content.Server/GameObjects/Components/Mobs/DamageStates.cs index 69e354e7bc..89aea5beb8 100644 --- a/Content.Server/GameObjects/Components/Mobs/DamageStates.cs +++ b/Content.Server/GameObjects/Components/Mobs/DamageStates.cs @@ -1,12 +1,11 @@ -using Content.Server.GameObjects.Components.Mobs; -using Content.Server.Mobs; +using Content.Server.Mobs; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.EntitySystems; using Robust.Server.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Mobs { /// /// Defines the blocking effect of each damage state, and what effects to apply upon entering or exiting the state diff --git a/Content.Server/GameObjects/Components/Mobs/DamageThresholdTemplates/DamageThresholdTemplates.cs b/Content.Server/GameObjects/Components/Mobs/DamageThresholdTemplates/DamageThresholdTemplates.cs index ce50ed1eef..80295df021 100644 --- a/Content.Server/GameObjects/Components/Mobs/DamageThresholdTemplates/DamageThresholdTemplates.cs +++ b/Content.Server/GameObjects/Components/Mobs/DamageThresholdTemplates/DamageThresholdTemplates.cs @@ -1,7 +1,8 @@ using System.Collections.Generic; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Damage; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Mobs.DamageThresholdTemplates { /// /// Defines the threshold values for each damage state for any kind of species diff --git a/Content.Server/GameObjects/Components/Mobs/DamageThresholdTemplates/HumanTemplate.cs b/Content.Server/GameObjects/Components/Mobs/DamageThresholdTemplates/HumanTemplate.cs index c5ec0e5f8e..8045758b89 100644 --- a/Content.Server/GameObjects/Components/Mobs/DamageThresholdTemplates/HumanTemplate.cs +++ b/Content.Server/GameObjects/Components/Mobs/DamageThresholdTemplates/HumanTemplate.cs @@ -1,11 +1,11 @@ using System; using System.Collections.Generic; -using Content.Server.GameObjects.Components.Mobs; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Mobs; using JetBrains.Annotations; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Mobs.DamageThresholdTemplates { [UsedImplicitly] public class Human : DamageTemplates diff --git a/Content.Server/GameObjects/Components/Mobs/HeatResistanceComponent.cs b/Content.Server/GameObjects/Components/Mobs/HeatResistanceComponent.cs index 760aea0caf..7d21ba3124 100644 --- a/Content.Server/GameObjects/Components/Mobs/HeatResistanceComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/HeatResistanceComponent.cs @@ -1,8 +1,10 @@ -using Content.Shared.GameObjects.Components.Inventory; +using System; +using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Clothing; +using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.GameObjects; -using Math = CannyFastMath.Math; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Mobs { [RegisterComponent] public class HeatResistanceComponent : Component diff --git a/Content.Server/GameObjects/Components/Mobs/MindComponent.cs b/Content.Server/GameObjects/Components/Mobs/MindComponent.cs index 1528b37615..d148490bd9 100644 --- a/Content.Server/GameObjects/Components/Mobs/MindComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/MindComponent.cs @@ -1,19 +1,18 @@ #nullable enable using Content.Server.GameObjects.Components.Observer; -using Content.Server.GameObjects.EntitySystems.Click; using Content.Server.Interfaces.GameTicking; using Content.Server.Mobs; +using Content.Shared.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; -using Robust.Shared.Map; using Robust.Shared.Localization; +using Robust.Shared.Map; using Robust.Shared.Serialization; using Robust.Shared.Timers; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; -using Content.Shared.GameObjects.EntitySystems; namespace Content.Server.GameObjects.Components.Mobs { @@ -133,12 +132,12 @@ namespace Content.Server.GameObjects.Components.Mobs if (!HasMind) { message.AddMarkup(!dead - ? $"[color=red]" + Loc.GetString("{0:They} are totally catatonic. The stresses of life in deep-space must have been too much for {0:them}. Any recovery is unlikely.", Owner) + "[/color]" + ? $"[color=red]" + Loc.GetString("{0:They} {0:are} totally catatonic. The stresses of life in deep-space must have been too much for {0:them}. Any recovery is unlikely.", Owner) + "[/color]" : $"[color=purple]" + Loc.GetString("{0:Their} soul has departed.", Owner) + "[/color]"); } else if (Mind?.Session == null) { - message.AddMarkup("[color=yellow]" + Loc.GetString("{0:They} have a blank, absent-minded stare and appears completely unresponsive to anything. {0:They} may snap out of it soon.", Owner) + "[/color]"); + message.AddMarkup("[color=yellow]" + Loc.GetString("{0:They} {0:have} a blank, absent-minded stare and appears completely unresponsive to anything. {0:They} may snap out of it soon.", Owner) + "[/color]"); } } } diff --git a/Content.Server/GameObjects/Components/Mobs/ServerOverlayEffectsComponent.cs b/Content.Server/GameObjects/Components/Mobs/ServerOverlayEffectsComponent.cs index edc74e61cd..20a284d90b 100644 --- a/Content.Server/GameObjects/Components/Mobs/ServerOverlayEffectsComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/ServerOverlayEffectsComponent.cs @@ -1,14 +1,10 @@ using System; using System.Collections.Generic; -using System.Linq; using Content.Shared.GameObjects.Components.Mobs; using Robust.Server.Interfaces.GameObjects; -using Robust.Server.Player; -using Robust.Shared.Enums; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.Players; -using Robust.Shared.Timers; using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Mobs diff --git a/Content.Server/GameObjects/Components/Mobs/SpeciesComponent.cs b/Content.Server/GameObjects/Components/Mobs/SpeciesComponent.cs index ed64d334b6..61e1f671fe 100644 --- a/Content.Server/GameObjects/Components/Mobs/SpeciesComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/SpeciesComponent.cs @@ -1,10 +1,11 @@ using System; using System.Collections.Generic; -using Content.Server.GameObjects.Components.Mobs; -using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Server.Interfaces; +using Content.Server.GameObjects.Components.Damage; +using Content.Server.GameObjects.Components.Mobs.DamageThresholdTemplates; +using Content.Server.GameObjects.EntitySystems; +using Content.Server.Interfaces.GameObjects; using Content.Server.Observer; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Movement; using Content.Shared.GameObjects.EntitySystems; @@ -15,7 +16,7 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Players; using Robust.Shared.Serialization; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Mobs { [RegisterComponent] [ComponentReference(typeof(SharedSpeciesComponent))] @@ -50,7 +51,7 @@ namespace Content.Server.GameObjects serializer.DataField(ref templatename, "Template", "Human"); - var type = typeof(SpeciesComponent).Assembly.GetType("Content.Server.GameObjects." + templatename); + var type = typeof(SpeciesComponent).Assembly.GetType("Content.Server.GameObjects.Components.Mobs.DamageThresholdTemplates." + templatename); DamageTemplate = (DamageTemplates) Activator.CreateInstance(type); serializer.DataFieldCached(ref _heatResistance, "HeatResistance", 323); } diff --git a/Content.Server/GameObjects/Components/Mobs/StunnableComponent.cs b/Content.Server/GameObjects/Components/Mobs/StunnableComponent.cs index 16000c292b..1a29536a5f 100644 --- a/Content.Server/GameObjects/Components/Mobs/StunnableComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/StunnableComponent.cs @@ -1,11 +1,10 @@ using Content.Server.Mobs; using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.Components.Movement; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; -using Robust.Shared.ViewVariables; -using Timer = Robust.Shared.Timers.Timer; -using Content.Shared.GameObjects.Components.Movement; +using Robust.Shared.Timers; namespace Content.Server.GameObjects.Components.Mobs { diff --git a/Content.Server/GameObjects/Components/Movement/AiControllerComponent.cs b/Content.Server/GameObjects/Components/Movement/AiControllerComponent.cs index 0c89727f0c..26b450ca47 100644 --- a/Content.Server/GameObjects/Components/Movement/AiControllerComponent.cs +++ b/Content.Server/GameObjects/Components/Movement/AiControllerComponent.cs @@ -42,9 +42,9 @@ namespace Content.Server.GameObjects.Components.Movement { base.Initialize(); - // This component requires a physics component. - if (!Owner.HasComponent()) - Owner.AddComponent(); + // This component requires a collidable component. + if (!Owner.HasComponent()) + Owner.AddComponent(); } /// diff --git a/Content.Server/GameObjects/Components/Movement/NoSlipComponent.cs b/Content.Server/GameObjects/Components/Movement/NoSlipComponent.cs index 5812dce344..c541377f4b 100644 --- a/Content.Server/GameObjects/Components/Movement/NoSlipComponent.cs +++ b/Content.Server/GameObjects/Components/Movement/NoSlipComponent.cs @@ -1,5 +1,5 @@ -using Robust.Shared.GameObjects; using Content.Shared.GameObjects.EntitySystems; +using Robust.Shared.GameObjects; namespace Content.Server.GameObjects.Components.Movement { diff --git a/Content.Server/GameObjects/Components/Movement/ServerPortalComponent.cs b/Content.Server/GameObjects/Components/Movement/ServerPortalComponent.cs index 87495abe8e..1c5abcdfe0 100644 --- a/Content.Server/GameObjects/Components/Movement/ServerPortalComponent.cs +++ b/Content.Server/GameObjects/Components/Movement/ServerPortalComponent.cs @@ -12,7 +12,6 @@ using Robust.Shared.IoC; using Robust.Shared.Serialization; using Robust.Shared.Timers; using Robust.Shared.ViewVariables; -using Robust.Shared.Utility; namespace Content.Server.GameObjects.Components.Movement { diff --git a/Content.Server/GameObjects/Components/Movement/ShuttleControllerComponent.cs b/Content.Server/GameObjects/Components/Movement/ShuttleControllerComponent.cs index 62063854f2..85bb04b84b 100644 --- a/Content.Server/GameObjects/Components/Movement/ShuttleControllerComponent.cs +++ b/Content.Server/GameObjects/Components/Movement/ShuttleControllerComponent.cs @@ -71,22 +71,15 @@ namespace Content.Server.GameObjects.Components.Movement _entityManager.TryGetEntity(grid.GridEntityId, out var gridEntity)) { //TODO: Switch to shuttle component - if (!gridEntity.TryGetComponent(out IPhysicsComponent physComp)) + if (!gridEntity.TryGetComponent(out ICollidableComponent collidable)) { - physComp = gridEntity.AddComponent(); - physComp.Mass = 1; + collidable = gridEntity.AddComponent(); + collidable.Mass = 1; + collidable.CanCollide = true; + collidable.PhysicsShapes.Add(new PhysShapeGrid(grid)); } - //TODO: Is this always true? - if (!gridEntity.HasComponent()) - { - var collideComp = gridEntity.AddComponent(); - collideComp.CanCollide = true; - //collideComp.IsHardCollidable = true; - collideComp.PhysicsShapes.Add(new PhysShapeGrid(grid)); - } - - var controller = physComp.EnsureController(); + var controller = collidable.EnsureController(); controller.Push(CalcNewVelocity(direction, enabled), CurrentWalkSpeed); } } diff --git a/Content.Server/GameObjects/Components/NodeContainer/NodeContainerComponent.cs b/Content.Server/GameObjects/Components/NodeContainer/NodeContainerComponent.cs index 100e1d67ed..23a2d1be45 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/NodeContainerComponent.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/NodeContainerComponent.cs @@ -1,8 +1,8 @@ -using Content.Server.GameObjects.Components.NodeContainer.Nodes; +using System.Collections.Generic; +using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using System.Collections.Generic; namespace Content.Server.GameObjects.Components.NodeContainer { diff --git a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/ApcNetNodeGroup.cs b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/ApcNetNodeGroup.cs index 310fa35dba..ff80b1a74f 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/ApcNetNodeGroup.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/ApcNetNodeGroup.cs @@ -1,9 +1,9 @@ -using Content.Server.GameObjects.Components.Power; -using Content.Server.GameObjects.Components.Power.ApcNetComponents; -using Robust.Shared.ViewVariables; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using Content.Server.GameObjects.Components.Power; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.NodeContainer.NodeGroups { diff --git a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/BaseNetConnectorNodeGroup.cs b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/BaseNetConnectorNodeGroup.cs index 789d9ce466..58a07022e7 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/BaseNetConnectorNodeGroup.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/BaseNetConnectorNodeGroup.cs @@ -1,7 +1,7 @@ -using Content.Server.GameObjects.Components.Power; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; +using Content.Server.GameObjects.Components.NodeContainer.Nodes; +using Content.Server.GameObjects.Components.Power; namespace Content.Server.GameObjects.Components.NodeContainer.NodeGroups { diff --git a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/INodeGroup.cs b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/INodeGroup.cs index 940025d002..b019cbf4ea 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/INodeGroup.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/INodeGroup.cs @@ -1,7 +1,7 @@ -using Content.Server.GameObjects.Components.NodeContainer.Nodes; +using System.Collections.Generic; +using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Robust.Shared.IoC; using Robust.Shared.ViewVariables; -using System.Collections.Generic; namespace Content.Server.GameObjects.Components.NodeContainer.NodeGroups { diff --git a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/NodeGroupFactory.cs b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/NodeGroupFactory.cs index 49cda47a7f..7c8963544c 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/NodeGroupFactory.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/NodeGroupFactory.cs @@ -1,8 +1,8 @@ -using Robust.Shared.Interfaces.Reflection; -using Robust.Shared.IoC; -using System; +using System; using System.Collections.Generic; using System.Reflection; +using Robust.Shared.Interfaces.Reflection; +using Robust.Shared.IoC; namespace Content.Server.GameObjects.Components.NodeContainer.NodeGroups { diff --git a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/PowerNetNodeGroup.cs b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/PowerNetNodeGroup.cs index 8ebcc7794b..69c39b1ec9 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/PowerNetNodeGroup.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/PowerNetNodeGroup.cs @@ -1,9 +1,9 @@ -using Content.Server.GameObjects.Components.Power.PowerNetComponents; -using Robust.Shared.IoC; -using Robust.Shared.ViewVariables; -using System; +using System; using System.Collections.Generic; using System.Diagnostics; +using Content.Server.GameObjects.Components.Power.PowerNetComponents; +using Robust.Shared.IoC; +using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.NodeContainer.NodeGroups { diff --git a/Content.Server/GameObjects/Components/NodeContainer/Nodes/AdjacentNode.cs b/Content.Server/GameObjects/Components/NodeContainer/Nodes/AdjacentNode.cs index 097bf8ca74..3bb66265ea 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/Nodes/AdjacentNode.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/Nodes/AdjacentNode.cs @@ -1,6 +1,6 @@ -using Robust.Shared.GameObjects.Components.Transform; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; +using Robust.Shared.GameObjects.Components.Transform; namespace Content.Server.GameObjects.Components.NodeContainer.Nodes { diff --git a/Content.Server/GameObjects/Components/NodeContainer/Nodes/Node.cs b/Content.Server/GameObjects/Components/NodeContainer/Nodes/Node.cs index 98374bc2af..291d681df4 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/Nodes/Node.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/Nodes/Node.cs @@ -1,13 +1,13 @@ -using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.ViewVariables; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; using Robust.Shared.GameObjects.Components; +using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Serialization; +using Robust.Shared.IoC; using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.NodeContainer.Nodes { diff --git a/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs b/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs index 49e2b8b03b..482d460886 100644 --- a/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs @@ -1,7 +1,6 @@ using Content.Server.GameObjects.Components.Chemistry; using Content.Server.GameObjects.Components.Fluids; -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.Audio; using Content.Shared.Chemistry; using Content.Shared.GameObjects.Components.Nutrition; diff --git a/Content.Server/GameObjects/Components/Nutrition/FoodComponent.cs b/Content.Server/GameObjects/Components/Nutrition/FoodComponent.cs index 9d6681c776..3354839430 100644 --- a/Content.Server/GameObjects/Components/Nutrition/FoodComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/FoodComponent.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using Content.Server.GameObjects.Components.Chemistry; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Utensil; using Content.Server.Utility; using Content.Shared.Chemistry; diff --git a/Content.Server/GameObjects/Components/Nutrition/FoodContainerComponent.cs b/Content.Server/GameObjects/Components/Nutrition/FoodContainerComponent.cs index c7735cc2b4..7769fbba05 100644 --- a/Content.Server/GameObjects/Components/Nutrition/FoodContainerComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/FoodContainerComponent.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Shared.GameObjects.Components.Nutrition; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs b/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs index 4fb6b6d2f3..47643417bb 100644 --- a/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.Mobs; -using Content.Server.GameObjects.Components.Movement; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Movement; using Content.Shared.GameObjects.Components.Nutrition; @@ -40,7 +40,7 @@ namespace Content.Server.GameObjects.Components.Nutrition [ViewVariables(VVAccess.ReadOnly)] public override HungerThreshold CurrentHungerThreshold => _currentHungerThreshold; private HungerThreshold _currentHungerThreshold; - + private HungerThreshold _lastHungerThreshold; [ViewVariables(VVAccess.ReadWrite)] diff --git a/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs b/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs index 12b7d7ae9f..94f7b5e022 100644 --- a/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.Mobs; -using Content.Server.GameObjects.Components.Movement; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Movement; using Content.Shared.GameObjects.Components.Nutrition; @@ -40,7 +40,7 @@ namespace Content.Server.GameObjects.Components.Nutrition [ViewVariables(VVAccess.ReadOnly)] public override ThirstThreshold CurrentThirstThreshold => _currentThirstThreshold; private ThirstThreshold _currentThirstThreshold; - + private ThirstThreshold _lastThirstThreshold; [ViewVariables(VVAccess.ReadWrite)] @@ -72,7 +72,7 @@ namespace Content.Server.GameObjects.Components.Nutrition "/Textures/Interface/StatusEffects/Thirst/Parched.png", "/Textures/Interface/StatusEffects/Thirst/Dead.png", }; - + public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); diff --git a/Content.Server/GameObjects/Components/PDA/PDAComponent.cs b/Content.Server/GameObjects/Components/PDA/PDAComponent.cs index 3edd592e37..b3edacdfac 100644 --- a/Content.Server/GameObjects/Components/PDA/PDAComponent.cs +++ b/Content.Server/GameObjects/Components/PDA/PDAComponent.cs @@ -5,11 +5,12 @@ using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.Access; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.Interfaces; using Content.Server.Interfaces.PDA; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.PDA; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.Container; diff --git a/Content.Server/GameObjects/Components/Paper/PaperComponent.cs b/Content.Server/GameObjects/Components/Paper/PaperComponent.cs index 025df877c9..0f2b48b905 100644 --- a/Content.Server/GameObjects/Components/Paper/PaperComponent.cs +++ b/Content.Server/GameObjects/Components/Paper/PaperComponent.cs @@ -1,5 +1,4 @@ -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Shared.GameObjects.Components; +using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; @@ -8,7 +7,7 @@ using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Utility; -namespace Content.Server.GameObjects.Components.Interactable +namespace Content.Server.GameObjects.Components.Paper { [RegisterComponent] public class PaperComponent : SharedPaperComponent, IExamine, IInteractUsing, IUse diff --git a/Content.Server/GameObjects/Components/Paper/WriteComponent.cs b/Content.Server/GameObjects/Components/Paper/WriteComponent.cs index d154a388fc..1385fd4e97 100644 --- a/Content.Server/GameObjects/Components/Paper/WriteComponent.cs +++ b/Content.Server/GameObjects/Components/Paper/WriteComponent.cs @@ -1,7 +1,6 @@ -using Content.Shared.GameObjects.Components; using Robust.Shared.GameObjects; -namespace Content.Server.GameObjects.Components.Interactable +namespace Content.Server.GameObjects.Components.Paper { [RegisterComponent] public class WriteComponent : Component diff --git a/Content.Server/GameObjects/Components/Pointing/RoguePointingArrowComponent.cs b/Content.Server/GameObjects/Components/Pointing/RoguePointingArrowComponent.cs index 5865bb1f82..35706da030 100644 --- a/Content.Server/GameObjects/Components/Pointing/RoguePointingArrowComponent.cs +++ b/Content.Server/GameObjects/Components/Pointing/RoguePointingArrowComponent.cs @@ -1,5 +1,4 @@ #nullable enable -using System; using System.Linq; using Content.Server.Explosions; using Content.Shared.GameObjects.Components.Pointing; diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/ApcComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/ApcComponent.cs index 78efb7927c..f55ded352a 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/ApcComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/ApcComponent.cs @@ -1,6 +1,8 @@ -using Content.Server.GameObjects.Components.Power.PowerNetComponents; +using System; using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; +using Content.Server.GameObjects.Components.Power.PowerNetComponents; using Content.Shared.GameObjects.Components.Power; +using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.UserInterface; using Robust.Server.GameObjects.EntitySystems; @@ -8,11 +10,9 @@ using Robust.Server.Interfaces.GameObjects; using Robust.Shared.Audio; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.ViewVariables; -using System; -using Content.Shared.Interfaces.GameObjects.Components; -using Robust.Shared.IoC; using Robust.Shared.Interfaces.Timing; +using Robust.Shared.IoC; +using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Power.ApcNetComponents { diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerProviderComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerProviderComponent.cs index 69cf10e6f9..5541a2a875 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerProviderComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerProviderComponent.cs @@ -1,13 +1,13 @@ -using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; +using System; +using System.Collections.Generic; +using System.Linq; +using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using System; -using System.Collections.Generic; -using System.Linq; namespace Content.Server.GameObjects.Components.Power.ApcNetComponents { diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverComponent.cs index bcc67552e2..01f6dbd787 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverComponent.cs @@ -1,18 +1,17 @@ -using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; +using System; +using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; using Content.Shared.GameObjects.Components.Power; +using Content.Shared.GameObjects.EntitySystems; using Robust.Server.GameObjects; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; -using Robust.Shared.Serialization; -using Robust.Shared.ViewVariables; -using System; -using Content.Server.GameObjects.EntitySystems.Click; -using Robust.Shared.GameObjects.Components; using Robust.Shared.Localization; +using Robust.Shared.Serialization; using Robust.Shared.Utility; -using Content.Shared.GameObjects.EntitySystems; +using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Power.ApcNetComponents { diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/BaseCharger.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/BaseCharger.cs index 70be130114..0bfc844474 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/BaseCharger.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/BaseCharger.cs @@ -1,10 +1,10 @@ using System; using Content.Server.GameObjects.Components.GUI; -using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Weapon.Ranged.Barrels; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Power; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; @@ -16,7 +16,7 @@ using Robust.Shared.Localization; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects.Components.Power.Chargers +namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerReceiverUsers { [ComponentReference(typeof(IActivate))] [ComponentReference(typeof(IInteractUsing))] diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/LightBulbComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/LightBulbComponent.cs index d704c5b545..b33be166af 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/LightBulbComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/LightBulbComponent.cs @@ -13,7 +13,7 @@ using Robust.Shared.Random; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects.Components.Power +namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerReceiverUsers { public enum LightBulbState { diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PowerCellChargerComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PowerCellChargerComponent.cs index efec4b9ca2..8c71ff18c0 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PowerCellChargerComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PowerCellChargerComponent.cs @@ -2,7 +2,7 @@ using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -namespace Content.Server.GameObjects.Components.Power.Chargers +namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerReceiverUsers { /// /// Recharges an entity with a . diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs index 2c50fde2c2..a8d60ea43d 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs @@ -1,9 +1,11 @@ using System; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.GUI; -using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.Container; @@ -18,7 +20,7 @@ using Robust.Shared.IoC; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects.Components.Power +namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerReceiverUsers { /// /// Component that represents a wall light. It has a light bulb that can be replaced when broken. diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/WeaponCapacitorChargerComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/WeaponCapacitorChargerComponent.cs index 6ca31fef73..e54cf3578f 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/WeaponCapacitorChargerComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/WeaponCapacitorChargerComponent.cs @@ -3,7 +3,7 @@ using Content.Shared.Interfaces.GameObjects.Components; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -namespace Content.Server.GameObjects.Components.Power.Chargers +namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerReceiverUsers { /// /// Recharges the battery in a . diff --git a/Content.Server/GameObjects/Components/Power/BaseNetConnectorComponent.cs b/Content.Server/GameObjects/Components/Power/BaseNetConnectorComponent.cs index d6d4362da0..fc2148f85f 100644 --- a/Content.Server/GameObjects/Components/Power/BaseNetConnectorComponent.cs +++ b/Content.Server/GameObjects/Components/Power/BaseNetConnectorComponent.cs @@ -1,9 +1,9 @@ -using Content.Server.GameObjects.Components.NodeContainer; +using System.Linq; +using Content.Server.GameObjects.Components.NodeContainer; using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using System.Linq; namespace Content.Server.GameObjects.Components.Power { diff --git a/Content.Server/GameObjects/Components/Power/BatteryComponent.cs b/Content.Server/GameObjects/Components/Power/BatteryComponent.cs index 2b52388c18..77ce70f0d4 100644 --- a/Content.Server/GameObjects/Components/Power/BatteryComponent.cs +++ b/Content.Server/GameObjects/Components/Power/BatteryComponent.cs @@ -1,8 +1,8 @@ -using Robust.Shared.GameObjects; +using System; +using Robust.Shared.GameObjects; using Robust.Shared.Maths; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using System; namespace Content.Server.GameObjects.Components.Power { diff --git a/Content.Server/GameObjects/Components/Power/PowerNetComponents/IPowerNetManager.cs b/Content.Server/GameObjects/Components/Power/PowerNetComponents/IPowerNetManager.cs index 125695e582..18ad79003a 100644 --- a/Content.Server/GameObjects/Components/Power/PowerNetComponents/IPowerNetManager.cs +++ b/Content.Server/GameObjects/Components/Power/PowerNetComponents/IPowerNetManager.cs @@ -1,5 +1,5 @@ -using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; -using System.Collections.Generic; +using System.Collections.Generic; +using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; namespace Content.Server.GameObjects.Components.Power.PowerNetComponents { diff --git a/Content.Server/GameObjects/Components/Power/PowerNetComponents/PowerConsumerComponent.cs b/Content.Server/GameObjects/Components/Power/PowerNetComponents/PowerConsumerComponent.cs index 15d31d9d05..28e37ad789 100644 --- a/Content.Server/GameObjects/Components/Power/PowerNetComponents/PowerConsumerComponent.cs +++ b/Content.Server/GameObjects/Components/Power/PowerNetComponents/PowerConsumerComponent.cs @@ -1,8 +1,8 @@ -using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; +using System.Diagnostics; +using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using System.Diagnostics; namespace Content.Server.GameObjects.Components.Power.PowerNetComponents { diff --git a/Content.Server/GameObjects/Components/Power/PowerNetComponents/SmesComponent.cs b/Content.Server/GameObjects/Components/Power/PowerNetComponents/SmesComponent.cs index 4bd35df847..666befcf28 100644 --- a/Content.Server/GameObjects/Components/Power/PowerNetComponents/SmesComponent.cs +++ b/Content.Server/GameObjects/Components/Power/PowerNetComponents/SmesComponent.cs @@ -1,13 +1,12 @@ -using Content.Server.GameObjects.Components.Power.PowerNetComponents; +using System; using Content.Shared.GameObjects.Components.Power; using Content.Shared.Utility; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; -using System; -namespace Content.Server.GameObjects.Components.Power +namespace Content.Server.GameObjects.Components.Power.PowerNetComponents { /// /// Handles the "user-facing" side of the actual SMES object. @@ -60,7 +59,7 @@ namespace Content.Server.GameObjects.Components.Power _lastChargeState = newChargeState; _lastChargeStateChange = _gameTiming.CurTime; _appearance.SetData(SmesVisuals.LastChargeState, newChargeState); - } + } } private int GetNewChargeLevel() diff --git a/Content.Server/GameObjects/Components/Power/PowerNetComponents/SolarControlConsoleComponent.cs b/Content.Server/GameObjects/Components/Power/PowerNetComponents/SolarControlConsoleComponent.cs index 19ed2c9629..6c6d63203c 100644 --- a/Content.Server/GameObjects/Components/Power/PowerNetComponents/SolarControlConsoleComponent.cs +++ b/Content.Server/GameObjects/Components/Power/PowerNetComponents/SolarControlConsoleComponent.cs @@ -1,5 +1,5 @@ -using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.GameObjects.Components.Power; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects.Components.UserInterface; @@ -8,7 +8,7 @@ using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; -namespace Content.Server.GameObjects.Components.Power +namespace Content.Server.GameObjects.Components.Power.PowerNetComponents { [RegisterComponent] [ComponentReference(typeof(IActivate))] diff --git a/Content.Server/GameObjects/Components/Power/PowerNetComponents/SolarPanelComponent.cs b/Content.Server/GameObjects/Components/Power/PowerNetComponents/SolarPanelComponent.cs index 04d8982e78..a86dff1b87 100644 --- a/Content.Server/GameObjects/Components/Power/PowerNetComponents/SolarPanelComponent.cs +++ b/Content.Server/GameObjects/Components/Power/PowerNetComponents/SolarPanelComponent.cs @@ -1,13 +1,12 @@ using System; -using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Server.GameObjects.Components.Power.PowerNetComponents; +using Content.Server.GameObjects.EntitySystems; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Timing; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects.Components.Power +namespace Content.Server.GameObjects.Components.Power.PowerNetComponents { /// diff --git a/Content.Server/GameObjects/Components/Power/WirePlacerComponent.cs b/Content.Server/GameObjects/Components/Power/WirePlacerComponent.cs index 3b009891af..81333b2e07 100644 --- a/Content.Server/GameObjects/Components/Power/WirePlacerComponent.cs +++ b/Content.Server/GameObjects/Components/Power/WirePlacerComponent.cs @@ -1,5 +1,6 @@ using Content.Server.GameObjects.Components.Stack; using Content.Server.Utility; +using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.Transform; @@ -7,7 +8,6 @@ using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using Content.Shared.Interfaces.GameObjects.Components; namespace Content.Server.GameObjects.Components.Power { diff --git a/Content.Server/GameObjects/Components/Projectiles/FlashProjectileComponent.cs b/Content.Server/GameObjects/Components/Projectiles/FlashProjectileComponent.cs index 756a37a44f..d4e8dab9eb 100644 --- a/Content.Server/GameObjects/Components/Projectiles/FlashProjectileComponent.cs +++ b/Content.Server/GameObjects/Components/Projectiles/FlashProjectileComponent.cs @@ -1,10 +1,8 @@ using System; -using System.Collections.Generic; using Content.Server.GameObjects.Components.Weapon; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Physics; using Robust.Shared.Serialization; namespace Content.Server.GameObjects.Components.Projectiles diff --git a/Content.Server/GameObjects/Components/Projectiles/HitscanComponent.cs b/Content.Server/GameObjects/Components/Projectiles/HitscanComponent.cs index b845614bdd..4d0bde9372 100644 --- a/Content.Server/GameObjects/Components/Projectiles/HitscanComponent.cs +++ b/Content.Server/GameObjects/Components/Projectiles/HitscanComponent.cs @@ -1,19 +1,18 @@ using System; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.Physics; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.EntitySystemMessages; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Serialization; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Map; using Robust.Shared.Maths; using Robust.Shared.Physics; using Robust.Shared.Serialization; -using Timer = Robust.Shared.Timers.Timer; +using Robust.Shared.Timers; namespace Content.Server.GameObjects.Components.Projectiles { @@ -26,7 +25,7 @@ namespace Content.Server.GameObjects.Components.Projectiles public override string Name => "Hitscan"; public CollisionGroup CollisionMask => (CollisionGroup) _collisionMask; private int _collisionMask; - + public float Damage { get => _damage; @@ -92,7 +91,7 @@ namespace Content.Server.GameObjects.Components.Projectiles var offset = angle.ToVec().Normalized / 2; EntitySystem.Get().PlayAtCoords(_soundHitWall, user.Transform.GridPosition.Translated(offset)); } - + Timer.Spawn((int) _deathTime.TotalMilliseconds, () => { if (!Owner.Deleted) @@ -101,16 +100,16 @@ namespace Content.Server.GameObjects.Components.Projectiles } }); } - + private EffectSystemMessage MuzzleFlash(GridCoordinates grid, Angle angle) { if (_muzzleFlash == null) { return null; } - + var offset = angle.ToVec().Normalized / 2; - + var message = new EffectSystemMessage { EffectSprite = _muzzleFlash, @@ -123,7 +122,7 @@ namespace Content.Server.GameObjects.Components.Projectiles ColorDelta = new Vector4(0, 0, 0, -1500f), Shaded = false }; - + return message; } @@ -144,7 +143,7 @@ namespace Content.Server.GameObjects.Components.Projectiles Shaded = false }; - + return message; } diff --git a/Content.Server/GameObjects/Components/Projectiles/ProjectileComponent.cs b/Content.Server/GameObjects/Components/Projectiles/ProjectileComponent.cs index 9ae3d114ec..9b633dc688 100644 --- a/Content.Server/GameObjects/Components/Projectiles/ProjectileComponent.cs +++ b/Content.Server/GameObjects/Components/Projectiles/ProjectileComponent.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.Mobs; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Projectiles; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; @@ -91,9 +92,9 @@ namespace Content.Server.GameObjects.Components.Projectiles } if (!entity.Deleted && entity.TryGetComponent(out CameraRecoilComponent recoilComponent) - && Owner.TryGetComponent(out IPhysicsComponent physicsComponent)) + && Owner.TryGetComponent(out ICollidableComponent collidableComponent)) { - var direction = physicsComponent.LinearVelocity.Normalized; + var direction = collidableComponent.LinearVelocity.Normalized; recoilComponent.Kick(direction); } } diff --git a/Content.Server/GameObjects/Components/Projectiles/ThrownItemComponent.cs b/Content.Server/GameObjects/Components/Projectiles/ThrownItemComponent.cs index d1b9a4d2c0..b072072bc5 100644 --- a/Content.Server/GameObjects/Components/Projectiles/ThrownItemComponent.cs +++ b/Content.Server/GameObjects/Components/Projectiles/ThrownItemComponent.cs @@ -1,6 +1,7 @@ -using Content.Server.GameObjects.Components.Projectiles; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.EntitySystems.Click; using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.Physics; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; @@ -11,7 +12,7 @@ using Robust.Shared.IoC; using Robust.Shared.Maths; using Robust.Shared.Timers; -namespace Content.Server.GameObjects.Components +namespace Content.Server.GameObjects.Components.Projectiles { [RegisterComponent] internal class ThrownItemComponent : ProjectileComponent, ICollideBehavior @@ -87,7 +88,7 @@ namespace Content.Server.GameObjects.Components public void StartThrow(Vector2 direction, float speed) { - var comp = Owner.GetComponent(); + var comp = Owner.GetComponent(); comp.Status = BodyStatus.InAir; var controller = comp.EnsureController(); diff --git a/Content.Server/GameObjects/Components/RadioComponent.cs b/Content.Server/GameObjects/Components/RadioComponent.cs index e5e7661a5b..daef1622b0 100644 --- a/Content.Server/GameObjects/Components/RadioComponent.cs +++ b/Content.Server/GameObjects/Components/RadioComponent.cs @@ -1,19 +1,13 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Content.Server.GameObjects.EntitySystems; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; -using Content.Server.Interfaces.GameObjects.Components.Interaction; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; -using Robust.Shared.Localization; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects.Components.Interactable +namespace Content.Server.GameObjects.Components { [RegisterComponent] class RadioComponent : Component, IUse, IListen diff --git a/Content.Server/GameObjects/Components/Recycling/RecyclerComponent.cs b/Content.Server/GameObjects/Components/Recycling/RecyclerComponent.cs index 45b428d216..8b2f31c6c4 100644 --- a/Content.Server/GameObjects/Components/Recycling/RecyclerComponent.cs +++ b/Content.Server/GameObjects/Components/Recycling/RecyclerComponent.cs @@ -1,5 +1,7 @@ using System.Diagnostics.CodeAnalysis; using Content.Server.GameObjects.Components.Conveyor; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Power.ApcNetComponents; using Content.Server.GameObjects.EntitySystems; using Content.Shared.Construction; diff --git a/Content.Server/GameObjects/Components/Research/LatheComponent.cs b/Content.Server/GameObjects/Components/Research/LatheComponent.cs index 486b1af9b6..e848cb66ee 100644 --- a/Content.Server/GameObjects/Components/Research/LatheComponent.cs +++ b/Content.Server/GameObjects/Components/Research/LatheComponent.cs @@ -1,10 +1,12 @@ using System; using System.Collections.Generic; using System.Linq; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; using Content.Server.GameObjects.Components.Stack; using Content.Shared.GameObjects.Components.Materials; using Content.Shared.GameObjects.Components.Power; using Content.Shared.GameObjects.Components.Research; +using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.Research; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.UserInterface; @@ -13,8 +15,6 @@ using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; using Robust.Shared.Timers; using Robust.Shared.ViewVariables; -using Content.Server.GameObjects.Components.Power.ApcNetComponents; -using Content.Shared.Interfaces.GameObjects.Components; namespace Content.Server.GameObjects.Components.Research { diff --git a/Content.Server/GameObjects/Components/Research/ResearchClientComponent.cs b/Content.Server/GameObjects/Components/Research/ResearchClientComponent.cs index f901b5ae64..b57d249d3b 100644 --- a/Content.Server/GameObjects/Components/Research/ResearchClientComponent.cs +++ b/Content.Server/GameObjects/Components/Research/ResearchClientComponent.cs @@ -1,4 +1,4 @@ -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.GameObjects.Components.Research; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects.Components.UserInterface; diff --git a/Content.Server/GameObjects/Components/Research/ResearchServerComponent.cs b/Content.Server/GameObjects/Components/Research/ResearchServerComponent.cs index e636a0d3d2..cf3811f8f2 100644 --- a/Content.Server/GameObjects/Components/Research/ResearchServerComponent.cs +++ b/Content.Server/GameObjects/Components/Research/ResearchServerComponent.cs @@ -1,11 +1,11 @@ using System.Collections.Generic; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.Research; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using Content.Server.GameObjects.Components.Power.ApcNetComponents; namespace Content.Server.GameObjects.Components.Research { diff --git a/Content.Server/GameObjects/Components/Rotatable/FlippableComponent.cs b/Content.Server/GameObjects/Components/Rotatable/FlippableComponent.cs index 6ee4765153..c986fe04dd 100644 --- a/Content.Server/GameObjects/Components/Rotatable/FlippableComponent.cs +++ b/Content.Server/GameObjects/Components/Rotatable/FlippableComponent.cs @@ -1,7 +1,7 @@ #nullable enable using Content.Server.Interfaces; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs b/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs index 074da1aecb..ffbcfbe4cc 100644 --- a/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs +++ b/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs @@ -1,6 +1,6 @@ using Content.Server.Interfaces; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; @@ -21,9 +21,9 @@ namespace Content.Server.GameObjects.Components.Rotatable private void TryRotate(IEntity user, Angle angle) { - if (Owner.TryGetComponent(out IPhysicsComponent physics)) + if (Owner.TryGetComponent(out ICollidableComponent collidable)) { - if (physics.Anchored) + if (collidable.Anchored) { _notifyManager.PopupMessage(Owner.Transform.GridPosition, user, _localizationManager.GetString("It's stuck.")); return; diff --git a/Content.Server/GameObjects/Components/Sound/FootstepModifierComponent.cs b/Content.Server/GameObjects/Components/Sound/FootstepModifierComponent.cs index 812a08fec5..56e8eb19ce 100644 --- a/Content.Server/GameObjects/Components/Sound/FootstepModifierComponent.cs +++ b/Content.Server/GameObjects/Components/Sound/FootstepModifierComponent.cs @@ -3,7 +3,6 @@ using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.Audio; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Prototypes; diff --git a/Content.Server/GameObjects/Components/Stack/StackComponent.cs b/Content.Server/GameObjects/Components/Stack/StackComponent.cs index 53020796c5..aedff7d2df 100644 --- a/Content.Server/GameObjects/Components/Stack/StackComponent.cs +++ b/Content.Server/GameObjects/Components/Stack/StackComponent.cs @@ -1,5 +1,4 @@ using System; -using Content.Server.GameObjects.EntitySystems.Click; using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces; diff --git a/Content.Server/GameObjects/Components/StationEvents/RadiationPulseComponent.cs b/Content.Server/GameObjects/Components/StationEvents/RadiationPulseComponent.cs new file mode 100644 index 0000000000..c0fd604f92 --- /dev/null +++ b/Content.Server/GameObjects/Components/StationEvents/RadiationPulseComponent.cs @@ -0,0 +1,62 @@ +using System; +using Content.Shared.GameObjects.Components; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.Random; +using Robust.Shared.Interfaces.Timing; +using Robust.Shared.IoC; +using Robust.Shared.Random; +using Robust.Shared.Serialization; +using Robust.Shared.Timers; + +namespace Content.Server.GameObjects.Components.StationEvents +{ + [RegisterComponent] + public sealed class RadiationPulseComponent : SharedRadiationPulseComponent + { + private const float MinPulseLifespan = 0.8f; + private const float MaxPulseLifespan = 2.5f; + + public float DPS => _dps; + private float _dps; + + private TimeSpan _endTime; + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + serializer.DataField(ref _dps, "dps", 40.0f); + } + + public override void Initialize() + { + base.Initialize(); + + var currentTime = IoCManager.Resolve().CurTime; + var duration = + TimeSpan.FromSeconds( + IoCManager.Resolve().NextFloat() * (MaxPulseLifespan - MinPulseLifespan) + + MinPulseLifespan); + + _endTime = currentTime + duration; + + Timer.Spawn(duration, + () => + { + if (!Owner.Deleted) + { + Owner.Delete(); + } + }); + + EntitySystem.Get().PlayAtCoords("/Audio/Weapons/Guns/Gunshots/laser3.ogg", Owner.Transform.GridPosition); + Dirty(); + } + + public override ComponentState GetComponentState() + { + return new RadiationPulseMessage(_endTime); + } + } +} \ No newline at end of file diff --git a/Content.Server/GameObjects/Components/Strap/StrapComponent.cs b/Content.Server/GameObjects/Components/Strap/StrapComponent.cs index 773d8f1aff..420837f29e 100644 --- a/Content.Server/GameObjects/Components/Strap/StrapComponent.cs +++ b/Content.Server/GameObjects/Components/Strap/StrapComponent.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; using Content.Server.GameObjects.Components.Buckle; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Strap; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; diff --git a/Content.Server/GameObjects/Components/Temperature/TemperatureComponent.cs b/Content.Server/GameObjects/Components/Temperature/TemperatureComponent.cs index 9987f29093..4e7e901ff2 100644 --- a/Content.Server/GameObjects/Components/Temperature/TemperatureComponent.cs +++ b/Content.Server/GameObjects/Components/Temperature/TemperatureComponent.cs @@ -1,12 +1,13 @@ using System; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.Maths; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Temperature { public interface ITemperatureComponent : IComponent { diff --git a/Content.Server/GameObjects/Components/Timing/UseDelayComponent.cs b/Content.Server/GameObjects/Components/Timing/UseDelayComponent.cs index 66d79c8d5a..a5bdbcb6aa 100644 --- a/Content.Server/GameObjects/Components/Timing/UseDelayComponent.cs +++ b/Content.Server/GameObjects/Components/Timing/UseDelayComponent.cs @@ -1,11 +1,11 @@ using System; -using CancellationTokenSource = System.Threading.CancellationTokenSource; +using System.Threading; using Content.Shared.GameObjects.Components.Items; using Robust.Shared.GameObjects; -using Robust.Shared.Serialization; -using Robust.Shared.Timers; -using Robust.Shared.IoC; using Robust.Shared.Interfaces.Timing; +using Robust.Shared.IoC; +using Robust.Shared.Serialization; +using Timer = Robust.Shared.Timers.Timer; namespace Content.Server.GameObjects.Components.Timing { diff --git a/Content.Server/GameObjects/Components/Trigger/TimerTrigger/OnUseTimerTriggerComponent.cs b/Content.Server/GameObjects/Components/Trigger/TimerTrigger/OnUseTimerTriggerComponent.cs index d65a7bdaae..406e7d0535 100644 --- a/Content.Server/GameObjects/Components/Trigger/TimerTrigger/OnUseTimerTriggerComponent.cs +++ b/Content.Server/GameObjects/Components/Trigger/TimerTrigger/OnUseTimerTriggerComponent.cs @@ -1,6 +1,6 @@ using System; -using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Shared.GameObjects.Components.Triggers; +using Content.Server.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Components.Trigger; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; @@ -8,7 +8,7 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Serialization; -namespace Content.Server.GameObjects.Components.Triggers +namespace Content.Server.GameObjects.Components.Trigger.TimerTrigger { [RegisterComponent] public class OnUseTimerTriggerComponent : Component, IUse diff --git a/Content.Server/GameObjects/Components/VendingMachines/VendingMachineComponent.cs b/Content.Server/GameObjects/Components/VendingMachines/VendingMachineComponent.cs index b395675156..6929d9f981 100644 --- a/Content.Server/GameObjects/Components/VendingMachines/VendingMachineComponent.cs +++ b/Content.Server/GameObjects/Components/VendingMachines/VendingMachineComponent.cs @@ -2,16 +2,18 @@ using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.Power.ApcNetComponents; -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.GameObjects.Components.VendingMachines; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.VendingMachines; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.UserInterface; +using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; +using Robust.Shared.Audio; using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Prototypes; @@ -43,6 +45,8 @@ namespace Content.Server.GameObjects.Components.VendingMachines private bool Powered => _powerReceiver.Powered; private bool _broken = false; + private string _soundVend; + public void Activate(ActivateEventArgs eventArgs) { if(!eventArgs.User.TryGetComponent(out IActorComponent actor)) @@ -67,6 +71,8 @@ namespace Content.Server.GameObjects.Components.VendingMachines base.ExposeData(serializer); serializer.DataField(ref _packPrototypeId, "pack", string.Empty); + // Grabbed from: https://github.com/discordia-space/CEV-Eris/blob/f702afa271136d093ddeb415423240a2ceb212f0/sound/machines/vending_drop.ogg + serializer.DataField(ref _soundVend, "soundVend", "/Audio/Machines/machine_vend.ogg"); } private void InitializeFromPrototype() @@ -178,6 +184,8 @@ namespace Content.Server.GameObjects.Components.VendingMachines TrySetVisualState(VendingMachineVisualState.Normal); Owner.EntityManager.SpawnEntity(id, Owner.Transform.GridPosition); }); + + EntitySystem.Get().PlayFromEntity(_soundVend, Owner, AudioParams.Default.WithVolume(-2f)); } private void FlickDenyAnimation() diff --git a/Content.Server/GameObjects/Components/Weapon/FlashableComponent.cs b/Content.Server/GameObjects/Components/Weapon/FlashableComponent.cs index 11499017b3..d94e9b87ae 100644 --- a/Content.Server/GameObjects/Components/Weapon/FlashableComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/FlashableComponent.cs @@ -1,16 +1,11 @@ using System; -using System.Linq; using Content.Server.Utility; using Content.Shared.GameObjects.Components.Weapons; -using Content.Shared.GameObjects.EntitySystems; -using Content.Shared.Physics; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Physics; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; -using Robust.Shared.Maths; namespace Content.Server.GameObjects.Components.Weapon { diff --git a/Content.Server/GameObjects/Components/Weapon/Melee/FlashComponent.cs b/Content.Server/GameObjects/Components/Weapon/Melee/FlashComponent.cs index ab46cf1139..9d12014cda 100644 --- a/Content.Server/GameObjects/Components/Weapon/Melee/FlashComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Melee/FlashComponent.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using Content.Server.GameObjects.Components.Mobs; -using Content.Server.GameObjects.EntitySystems.Click; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces; @@ -14,9 +13,9 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Serialization; +using Robust.Shared.Timers; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; -using Timer = Robust.Shared.Timers.Timer; namespace Content.Server.GameObjects.Components.Weapon.Melee { diff --git a/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs b/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs index 8faffa150d..e0dc32b98f 100644 --- a/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs @@ -1,8 +1,11 @@ using System; using System.Collections.Generic; using System.Linq; +using Content.Server.GameObjects.Components.Damage; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces.GameObjects.Components.Interaction; using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Items; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; @@ -15,10 +18,7 @@ using Robust.Shared.IoC; using Robust.Shared.Maths; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using CannyFastMath; using Content.Shared.Interfaces.GameObjects.Components; -using Math = CannyFastMath.Math; -using MathF = CannyFastMath.MathF; namespace Content.Server.GameObjects.Components.Weapon.Melee { diff --git a/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs b/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs index 952593c3e2..4d52c9382e 100644 --- a/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs @@ -1,12 +1,12 @@ using System.Collections.Generic; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Power; -using Content.Server.GameObjects.EntitySystems.Click; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Shared.Audio; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoBoxComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoBoxComponent.cs index f39e8101bd..14d433e616 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoBoxComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoBoxComponent.cs @@ -1,10 +1,11 @@ using System; using System.Collections.Generic; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Weapon.Ranged.Barrels; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs index 2939c6a6a3..e293e690d5 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs @@ -1,5 +1,4 @@ using System; -using System.Timers; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; using Robust.Server.GameObjects; using Robust.Server.GameObjects.EntitySystems; @@ -9,12 +8,11 @@ using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; +using Robust.Shared.Log; using Robust.Shared.Map; using Robust.Shared.Maths; using Robust.Shared.Serialization; using Robust.Shared.Utility; -using Logger = Robust.Shared.Log.Logger; -using Timer = Robust.Shared.Timers.Timer; namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition { diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/RangedMagazineComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/RangedMagazineComponent.cs index c299fcfcbe..594d1d6689 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/RangedMagazineComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/RangedMagazineComponent.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Weapon.Ranged.Barrels; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; using Content.Shared.Interfaces; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/SpeedLoaderComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/SpeedLoaderComponent.cs index 3e8e86e2e7..25696a9e0d 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/SpeedLoaderComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/SpeedLoaderComponent.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Weapon.Ranged.Barrels; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; using Content.Shared.Interfaces; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs index 2d584cc840..75130f5246 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; using Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs index ee28884cdc..fe8488952c 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs @@ -1,8 +1,8 @@ using System; using Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerBatteryBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerBatteryBarrelComponent.cs index 88a887b6de..bdb9b88761 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerBatteryBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerBatteryBarrelComponent.cs @@ -1,9 +1,10 @@ using System; using System.Collections.Generic; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Power; using Content.Server.GameObjects.Components.Projectiles; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs index ff56ec7f76..3623c4b5db 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs @@ -1,12 +1,13 @@ using System; using System.Collections.Generic; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition; -using Content.Server.GameObjects.EntitySystems.Click; using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Weapons.Ranged; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs index ce2349aea0..4b0553fe2b 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs @@ -1,12 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Projectiles; using Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition; -using Content.Server.GameObjects.EntitySystems.Click; using Content.Shared.Audio; using Content.Shared.GameObjects.Components.Weapons.Ranged; +using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.Physics; using Robust.Server.GameObjects.EntitySystems; @@ -27,8 +28,6 @@ using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Serialization; using Robust.Shared.Utility; -using Content.Server.Interfaces; -using Content.Shared.GameObjects.EntitySystems; namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels { @@ -43,7 +42,6 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels #pragma warning disable 649 [Dependency] private IGameTiming _gameTiming; [Dependency] private IRobustRandom _robustRandom; - [Dependency] private readonly IServerNotifyManager _notifyManager; #pragma warning restore 649 public override FireRateSelector FireRateSelector => _fireRateSelector; @@ -112,14 +110,14 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels serializer.DataReadWriteFunction( "angleIncrease", 40 / _fireRate, - angle => _angleIncrease = angle * (float) Math.PI / 180, - () => _angleIncrease / (float) Math.PI / 180); + angle => _angleIncrease = angle * (float) Math.PI / 180f, + () => MathF.Round(_angleIncrease / ((float) Math.PI / 180f), 2)); serializer.DataReadWriteFunction( "angleDecay", 20f, - angle => _angleDecay = angle * (float) Math.PI / 180, - () => _angleDecay / (float) Math.PI / 180); + angle => _angleDecay = angle * (float) Math.PI / 180f, + () => MathF.Round(_angleDecay / ((float) Math.PI / 180f), 2)); serializer.DataField(ref _spreadRatio, "ammoSpreadRatio", 1.0f); @@ -180,7 +178,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels { var currentTime = _gameTiming.CurTime; var timeSinceLastFire = (currentTime - _lastFire).TotalSeconds; - var newTheta = Math.Clamp(_currentAngle.Theta + _angleIncrease - _angleDecay * timeSinceLastFire, _minAngle.Theta, _maxAngle.Theta); + var newTheta = FloatMath.Clamp(_currentAngle.Theta + _angleIncrease - _angleDecay * timeSinceLastFire, _minAngle.Theta, _maxAngle.Theta); _currentAngle = new Angle(newTheta); var random = (_robustRandom.NextDouble() - 0.5) * 2; @@ -385,15 +383,15 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels projectileAngle = angle; } - var physicsComponent = projectile.GetComponent(); - physicsComponent.Status = BodyStatus.InAir; + var collidableComponent = projectile.GetComponent(); + collidableComponent.Status = BodyStatus.InAir; projectile.Transform.GridPosition = Owner.Transform.GridPosition; var projectileComponent = projectile.GetComponent(); projectileComponent.IgnoreEntity(shooter); projectile - .GetComponent() + .GetComponent() .EnsureController() .LinearVelocity = projectileAngle.ToVec() * velocity; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/ServerRangedWeaponComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/ServerRangedWeaponComponent.cs index a2e0ea57c4..e87bacbe71 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/ServerRangedWeaponComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/ServerRangedWeaponComponent.cs @@ -1,8 +1,10 @@ using System; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Weapon.Ranged.Barrels; using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Weapons.Ranged; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces; diff --git a/Content.Server/GameObjects/Components/WiresComponent.cs b/Content.Server/GameObjects/Components/WiresComponent.cs index f39d297b6d..cc9b0aba06 100644 --- a/Content.Server/GameObjects/Components/WiresComponent.cs +++ b/Content.Server/GameObjects/Components/WiresComponent.cs @@ -4,10 +4,8 @@ using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.Interactable; using Content.Server.GameObjects.Components.VendingMachines; -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; -using Content.Server.Interfaces.GameObjects; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.Components.Interactable; diff --git a/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs b/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs index 0c1a8d1c68..01139bf7af 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using Content.Server.AI.Utility.AiLogic; using Content.Server.GameObjects.Components.Movement; using Content.Shared.GameObjects.Components.Movement; using JetBrains.Annotations; @@ -33,9 +32,6 @@ namespace Content.Server.GameObjects.EntitySystems.AI { base.Initialize(); - // register entity query - EntityQuery = new TypeEntityQuery(typeof(AiControllerComponent)); - var processors = _reflectionManager.GetAllChildren(); foreach (var processor in processors) { @@ -49,18 +45,16 @@ namespace Content.Server.GameObjects.EntitySystems.AI /// public override void Update(float frameTime) { - var entities = EntityManager.GetEntities(EntityQuery); - foreach (var entity in entities) + foreach (var comp in ComponentManager.EntityQuery()) { - if (_pauseManager.IsEntityPaused(entity)) + if (_pauseManager.IsEntityPaused(comp.Owner)) { continue; } + + ProcessorInitialize(comp); - var aiComp = entity.GetComponent(); - ProcessorInitialize(aiComp); - - var processor = aiComp.Processor; + var processor = comp.Processor; processor.Update(frameTime); } @@ -111,7 +105,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI var processorId = args[0]; var entId = new EntityUid(int.Parse(args[1])); var ent = IoCManager.Resolve().GetEntity(entId); - var aiSystem = EntitySystem.Get(); + var aiSystem = Get(); if (!aiSystem.ProcessorTypeExists(processorId)) { diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/AiReachableSystem.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/AiReachableSystem.cs index 8ad08996c8..3531dcdde1 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/AiReachableSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/AiReachableSystem.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; -using System.Linq; using Content.Server.GameObjects.Components.Access; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders; -using Content.Server.GameObjects.EntitySystems.Pathfinding; using Content.Shared.AI; using JetBrains.Annotations; using Robust.Server.GameObjects; @@ -75,7 +73,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible // Plus this way we can check if everything is equal except for vision so an entity with a lower vision radius can use an entity with a higher vision radius' cached result private Dictionary Regions)>> _cachedAccessible = new Dictionary)>>(); - + private readonly List _queuedCacheDeletions = new List(); #if DEBUG @@ -91,7 +89,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible #endif _mapmanager.OnGridRemoved += GridRemoved; } - + private void GridRemoved(GridId gridId) { _regions.Remove(gridId); @@ -457,7 +455,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible /// This is already calculated in advance so may as well re-use it /// private PathfindingRegion CalculateNode( - PathfindingNode node, + PathfindingNode node, Dictionary existingRegions, HashSet chunkRegions, int x, int y) @@ -497,15 +495,15 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible !leftRegion.IsDoor) { // We'll try and connect the left node's region to the bottom region if they're separate (yay merge) - if (bottomNeighbor != null && + if (bottomNeighbor != null && existingRegions.TryGetValue(bottomNeighbor, out bottomRegion) && - bottomRegion != leftRegion && + bottomRegion != leftRegion && !bottomRegion.IsDoor) { bottomRegion.Add(node); existingRegions.Add(node, bottomRegion); MergeInto(leftRegion, bottomRegion, existingRegions); - + // Cleanup leftRegion // MergeInto will remove it from the overall region chunk cache while we need to remove it from // our short-term ones (chunkRegions and existingRegions) @@ -515,7 +513,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible { existingRegions[leftNode] = bottomRegion; } - + return bottomRegion; } @@ -549,7 +547,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible /// /// /// - private void MergeInto(PathfindingRegion source, PathfindingRegion target, Dictionary existingRegions = null) + private void MergeInto(PathfindingRegion source, PathfindingRegion target, Dictionary existingRegions = null) { DebugTools.AssertNotNull(source); DebugTools.AssertNotNull(target); @@ -586,7 +584,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible private void ClearCache(PathfindingRegion region) { DebugTools.Assert(region.Deleted); - + // Need to forcibly clear cache for ourself and anything that includes us foreach (var (_, cachedRegions) in _cachedAccessible) { @@ -599,7 +597,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible // We could just have GetVisionAccessible remove us if it can tell we're deleted but that // seems like it could be unreliable var regionsToClear = new List(); - + foreach (var (otherRegion, cache) in cachedRegions) { if (cache.Regions.Contains(region)) @@ -613,9 +611,9 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible cachedRegions.Remove(otherRegion); } } - + #if DEBUG - if (_regions.TryGetValue(region.ParentChunk.GridId, out var chunks) && + if (_regions.TryGetValue(region.ParentChunk.GridId, out var chunks) && chunks.TryGetValue(region.ParentChunk, out var regions)) { DebugTools.Assert(!regions.Contains(region)); @@ -642,7 +640,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible _queuedCacheDeletions.Add(region); region.Shutdown(); } - + _regions[chunk.GridId].Remove(chunk); } @@ -673,7 +671,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible { DebugTools.Assert(!region.Deleted); } - + DebugTools.Assert(chunkRegions.Count < Math.Pow(PathfindingChunk.ChunkSize, 2)); SendRegionsDebugMessage(chunk.GridId); #endif diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/BFSPathfinder.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/BFSPathfinder.cs index ddb5628a02..28e01bd0c8 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/BFSPathfinder.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/BFSPathfinder.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders; -using Content.Server.GameObjects.EntitySystems.Pathfinding; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Map; @@ -36,7 +35,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible { startNode = pathfindingSystem.GetNode(pathfindingArgs.End); } - + PathfindingNode currentNode; openTiles.Enqueue(startNode); @@ -49,13 +48,13 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible // No distances stored so can just check closed tiles here if (closedTiles.Contains(neighbor.TileRef)) continue; closedTiles.Add(currentNode.TileRef); - + // So currently tileCost gets the octile distance between the 2 so we'll also use that for our range check var tileCost = PathfindingHelpers.GetTileCost(pathfindingArgs, startNode, neighbor); var direction = PathfindingHelpers.RelativeDirection(neighbor, currentNode); - - if (tileCost == null || - tileCost > pathfindingArgs.Proximity || + + if (tileCost == null || + tileCost > pathfindingArgs.Proximity || !PathfindingHelpers.DirectionTraversable(pathfindingArgs.CollisionMask, pathfindingArgs.Access, currentNode, direction)) { continue; @@ -67,4 +66,4 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible } } } -} \ No newline at end of file +} diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/PathfindingRegion.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/PathfindingRegion.cs index 5de05ee925..d3e7fba401 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/PathfindingRegion.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/PathfindingRegion.cs @@ -1,8 +1,5 @@ using System; using System.Collections.Generic; -using System.Diagnostics; -using Content.Server.GameObjects.EntitySystems.Pathfinding; -using Robust.Shared.Utility; namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible { @@ -16,7 +13,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible /// Bottom-left reference node of the region /// public PathfindingNode OriginNode { get; } - + // The shape may be anything within the bounds of a chunk, this is just a quick way to do a bounds-check /// @@ -49,13 +46,13 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible { // Tell our neighbors we no longer exist ;-/ var neighbors = new List(Neighbors); - + for (var i = 0; i < neighbors.Count; i++) { var neighbor = neighbors[i]; neighbor.Neighbors.Remove(this); } - + _nodes.Clear(); Neighbors.Clear(); @@ -81,7 +78,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible { xDistance = Math.Abs(xDistance + otherRegion.Width); } - + if (yDistance > 0) { yDistance -= Height; @@ -90,7 +87,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible { yDistance = Math.Abs(yDistance + otherRegion.Height); } - + return PathfindingHelpers.OctileDistance(xDistance, yDistance); } @@ -121,10 +118,10 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible { Height = yHeight; } - + _nodes.Add(node); } - + // HashSet wasn't working correctly so uhh we got this. public bool Equals(PathfindingRegion other) { @@ -141,4 +138,4 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible return OriginNode.GetHashCode(); } } -} \ No newline at end of file +} diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/AStarPathfindingJob.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/AStarPathfindingJob.cs index 0f9f4deacc..f7aa32d3e2 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/AStarPathfindingJob.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/AStarPathfindingJob.cs @@ -1,10 +1,8 @@ using System; -using System.Collections; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Content.Server.GameObjects.EntitySystems.JobQueues; -using Content.Server.GameObjects.EntitySystems.Pathfinding; using Content.Shared.AI; using Robust.Shared.Map; using Robust.Shared.Utility; @@ -55,7 +53,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders costSoFar[_startNode] = 0.0f; var routeFound = false; var count = 0; - + while (frontier.Count > 0) { // Handle whether we need to pause if we've taken too long @@ -69,7 +67,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders return null; } } - + // Actual pathfinding here (_, currentNode) = frontier.Take(); if (currentNode.Equals(_endNode)) diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/JpsPathfindingJob.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/JpsPathfindingJob.cs index 0d47f0671b..db3639e513 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/JpsPathfindingJob.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/JpsPathfindingJob.cs @@ -1,10 +1,8 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Threading; using System.Threading.Tasks; using Content.Server.GameObjects.EntitySystems.JobQueues; -using Content.Server.GameObjects.EntitySystems.Pathfinding; using Content.Shared.AI; using Robust.Shared.Log; using Robust.Shared.Map; @@ -284,7 +282,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders // If we're going diagonally need to check all cardinals. // I tried just casting direction ints and offsets to make it smaller but brain no worky. // From NorthEast we check (Closed / Open) S - SE, W - NW - + PathfindingNode openNeighborOne = null; PathfindingNode closedNeighborOne = null; PathfindingNode openNeighborTwo = null; diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/PathfindingComparer.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/PathfindingComparer.cs index 7188542f5e..f338cc9154 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/PathfindingComparer.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/PathfindingComparer.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using Content.Server.GameObjects.EntitySystems.Pathfinding; namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders { diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingChunk.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingChunk.cs index ebb2b3657f..89e909c1e6 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingChunk.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingChunk.cs @@ -1,12 +1,9 @@ using System; using System.Collections.Generic; -using System.IO; using System.Linq; -using Content.Server.GameObjects.EntitySystems.Pathfinding; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Map; @@ -23,7 +20,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding Chunk = chunk; } } - + public class PathfindingChunk { public TimeSpan LastUpdate { get; private set; } @@ -53,7 +50,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding CreateNode(tileRef); } } - + Dirty(); } @@ -71,7 +68,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding { var pathfindingSystem = EntitySystem.Get(); var chunkGrid = pathfindingSystem.Graph[GridId]; - + for (var x = -1; x <= 1; x++) { for (var y = -1; y <= 1; y++) @@ -159,7 +156,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding } yield break; - + } // South edge if (node.TileRef.Y == _indices.Y) diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingHelpers.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingHelpers.cs index cabe4e92e5..3abd8e1966 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingHelpers.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingHelpers.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; -using Content.Server.GameObjects.Components.Access; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders; -using Content.Server.GameObjects.EntitySystems.Pathfinding; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; @@ -38,40 +36,40 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding // If it's a diagonal we need to check NSEW to see if we can get to it and stop corner cutting, NE needs N and E etc. // Given there's different collision layers stored for each node in the graph it's probably not worth it to cache this // Also this will help with corner-cutting - + PathfindingNode northNeighbor = null; PathfindingNode southNeighbor = null; PathfindingNode eastNeighbor = null; PathfindingNode westNeighbor = null; foreach (var neighbor in currentNode.GetNeighbors()) { - if (neighbor.TileRef.X == currentNode.TileRef.X && + if (neighbor.TileRef.X == currentNode.TileRef.X && neighbor.TileRef.Y == currentNode.TileRef.Y + 1) { northNeighbor = neighbor; continue; - } - - if (neighbor.TileRef.X == currentNode.TileRef.X + 1 && + } + + if (neighbor.TileRef.X == currentNode.TileRef.X + 1 && neighbor.TileRef.Y == currentNode.TileRef.Y) { eastNeighbor = neighbor; continue; } - - if (neighbor.TileRef.X == currentNode.TileRef.X && + + if (neighbor.TileRef.X == currentNode.TileRef.X && neighbor.TileRef.Y == currentNode.TileRef.Y - 1) { southNeighbor = neighbor; continue; - } - - if (neighbor.TileRef.X == currentNode.TileRef.X - 1 && + } + + if (neighbor.TileRef.X == currentNode.TileRef.X - 1 && neighbor.TileRef.Y == currentNode.TileRef.Y) { westNeighbor = neighbor; continue; - } + } } switch (direction) @@ -130,7 +128,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding return true; } - + public static Queue ReconstructPath(Dictionary cameFrom, PathfindingNode current) { var running = new Stack(); @@ -244,7 +242,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding return 1.4f * dstX + (dstY - dstX); } - + public static float OctileDistance(TileRef endTile, TileRef startTile) { // "Fast Euclidean" / octile. diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingNode.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingNode.cs index c35bf9a0f3..a5047294cd 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingNode.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingNode.cs @@ -3,16 +3,13 @@ using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.Access; using Content.Server.GameObjects.Components.Doors; -using Content.Server.GameObjects.EntitySystems.AI.Pathfinding; -using Robust.Server.GameObjects; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Map; using Robust.Shared.Maths; using Robust.Shared.Utility; -namespace Content.Server.GameObjects.EntitySystems.Pathfinding +namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding { public class PathfindingNode { @@ -20,7 +17,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding private readonly PathfindingChunk _parentChunk; public TileRef TileRef { get; private set; } - + /// /// Whenever there's a change in the collision layers we update the mask as the graph has more reads than writes /// @@ -46,7 +43,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding public static bool IsRelevant(IEntity entity, ICollidableComponent collidableComponent) { - if (entity.Transform.GridID == GridId.Invalid || + if (entity.Transform.GridID == GridId.Invalid || (PathfindingSystem.TrackedCollisionLayers & collidableComponent.CollisionLayer) == 0) { return false; @@ -66,7 +63,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding { neighborChunks = ParentChunk.RelevantChunks(this).ToList(); } - + for (var x = -1; x <= 1; x++) { for (var y = -1; y <= 1; y++) @@ -112,7 +109,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding { return ParentChunk.Nodes[chunkXOffset + 1, chunkYOffset]; } - + neighborMapIndices = new MapIndices(TileRef.X + 1, TileRef.Y); foreach (var neighbor in ParentChunk.GetNeighbors()) { @@ -129,7 +126,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding { return ParentChunk.Nodes[chunkXOffset + 1, chunkYOffset + 1]; } - + neighborMapIndices = new MapIndices(TileRef.X + 1, TileRef.Y + 1); foreach (var neighbor in ParentChunk.GetNeighbors()) { @@ -146,7 +143,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding { return ParentChunk.Nodes[chunkXOffset, chunkYOffset + 1]; } - + neighborMapIndices = new MapIndices(TileRef.X, TileRef.Y + 1); foreach (var neighbor in ParentChunk.GetNeighbors()) { @@ -163,7 +160,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding { return ParentChunk.Nodes[chunkXOffset - 1, chunkYOffset + 1]; } - + neighborMapIndices = new MapIndices(TileRef.X - 1, TileRef.Y + 1); foreach (var neighbor in ParentChunk.GetNeighbors()) { @@ -180,7 +177,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding { return ParentChunk.Nodes[chunkXOffset - 1, chunkYOffset]; } - + neighborMapIndices = new MapIndices(TileRef.X - 1, TileRef.Y); foreach (var neighbor in ParentChunk.GetNeighbors()) { @@ -197,7 +194,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding { return ParentChunk.Nodes[chunkXOffset - 1, chunkYOffset - 1]; } - + neighborMapIndices = new MapIndices(TileRef.X - 1, TileRef.Y - 1); foreach (var neighbor in ParentChunk.GetNeighbors()) { @@ -214,7 +211,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding { return ParentChunk.Nodes[chunkXOffset, chunkYOffset - 1]; } - + neighborMapIndices = new MapIndices(TileRef.X, TileRef.Y - 1); foreach (var neighbor in ParentChunk.GetNeighbors()) { @@ -231,7 +228,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding { return ParentChunk.Nodes[chunkXOffset + 1, chunkYOffset - 1]; } - + neighborMapIndices = new MapIndices(TileRef.X + 1, TileRef.Y - 1); foreach (var neighbor in ParentChunk.GetNeighbors()) { @@ -276,9 +273,9 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding } return; } - + DebugTools.Assert((PathfindingSystem.TrackedCollisionLayers & collidableComponent.CollisionLayer) != 0); - + if (!collidableComponent.Anchored) { _physicsLayers.Add(entity, collidableComponent.CollisionLayer); @@ -304,12 +301,12 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding if (_physicsLayers.ContainsKey(entity)) { _physicsLayers.Remove(entity); - } + } else if (_accessReaders.ContainsKey(entity)) { _accessReaders.Remove(entity); ParentChunk.Dirty(); - } + } else if (_blockedCollidables.ContainsKey(entity)) { _blockedCollidables.Remove(entity); diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingSystem.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingSystem.cs index 05069f27fd..ff672ee634 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingSystem.cs @@ -1,15 +1,11 @@ using System; using System.Collections.Generic; -using System.IO; using System.Threading; using Content.Server.GameObjects.Components.Access; -using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders; using Content.Server.GameObjects.EntitySystems.JobQueues; using Content.Server.GameObjects.EntitySystems.JobQueues.Queues; -using Content.Server.GameObjects.EntitySystems.Pathfinding; using Content.Shared.Physics; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.GameObjects.Components.Transform; using Robust.Shared.GameObjects.Systems; @@ -275,9 +271,9 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding /// private void HandleEntityAdd(IEntity entity) { - if (entity.Deleted || + if (entity.Deleted || _lastKnownPositions.ContainsKey(entity) || - !entity.TryGetComponent(out ICollidableComponent collidableComponent) || + !entity.TryGetComponent(out ICollidableComponent collidableComponent) || !PathfindingNode.IsRelevant(entity, collidableComponent)) { return; @@ -315,23 +311,23 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding private void HandleEntityMove(MoveEvent moveEvent) { // If we've moved to space or the likes then remove us. - if (moveEvent.Sender.Deleted || + if (moveEvent.Sender.Deleted || !moveEvent.Sender.TryGetComponent(out ICollidableComponent collidableComponent) || !PathfindingNode.IsRelevant(moveEvent.Sender, collidableComponent)) { HandleEntityRemove(moveEvent.Sender); return; } - + // Memory leak protection until grid parenting confirmed fix / you REALLY need the performance var gridBounds = _mapManager.GetGrid(moveEvent.Sender.Transform.GridID).WorldBounds; - + if (!gridBounds.Contains(moveEvent.Sender.Transform.WorldPosition)) { HandleEntityRemove(moveEvent.Sender); return; } - + // If we move from space to a grid we may need to start tracking it. if (!_lastKnownPositions.TryGetValue(moveEvent.Sender, out var oldNode)) { @@ -342,7 +338,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding // The pathfinding graph is tile-based so first we'll check if they're on a different tile and if we need to update. // If you get entities bigger than 1 tile wide you'll need some other system so god help you. var newTile = _mapManager.GetGrid(moveEvent.NewPosition.GridID).GetTileRef(moveEvent.NewPosition); - + if (oldNode == null || oldNode.TileRef == newTile) { return; diff --git a/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs b/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs index e3c3863a80..a9a7899300 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs @@ -8,14 +8,11 @@ using Content.Server.GameObjects.EntitySystems.AI.Pathfinding; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders; using Content.Server.GameObjects.EntitySystems.JobQueues; using Content.Shared.GameObjects.EntitySystems; -using Robust.Server.GameObjects; using Robust.Server.Interfaces.Timing; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; -using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Map; using Robust.Shared.Maths; @@ -27,10 +24,9 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering public sealed class AiSteeringSystem : EntitySystem { // http://www.red3d.com/cwr/papers/1999/gdc99steer.html for a steering overview - + #pragma warning disable 649 [Dependency] private IMapManager _mapManager; - [Dependency] private IEntityManager _entityManager; [Dependency] private IPauseManager _pauseManager; #pragma warning restore 649 private PathfindingSystem _pathfindingSystem; @@ -45,9 +41,9 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering /// How close we need to get to the center of each tile /// private const float TileTolerance = 0.8f; - + private Dictionary RunningAgents => _agentLists[_listIndex]; - + // We'll cycle the running list every tick as all we're doing is getting a vector2 for the // agent's steering. Should help a lot given this is the most expensive operator by far. // The AI will keep moving, it's just it'll keep moving in its existing direction. @@ -55,31 +51,31 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering private readonly List> _agentLists = new List>(AgentListCount); private const int AgentListCount = 2; private int _listIndex; - + // Cache nextGrid private readonly Dictionary _nextGrid = new Dictionary(); - + /// /// Current live paths for AI /// private readonly Dictionary> _paths = new Dictionary>(); - + /// /// Pathfinding request jobs we're waiting on /// - private readonly Dictionary> Job)> _pathfindingRequests = + private readonly Dictionary> Job)> _pathfindingRequests = new Dictionary>)>(); - + /// /// Keep track of how long we've been in 1 position and re-path if it's been too long /// private readonly Dictionary _stuckCounter = new Dictionary(); - + /// /// Get a fixed position for the target entity; if they move then re-path /// private readonly Dictionary _entityTargetPosition = new Dictionary(); - + // Anti-Stuck // Given the collision avoidance can lead to twitching need to store a reference position and check if we've been near this too long private readonly Dictionary _stuckPositions = new Dictionary(); @@ -88,7 +84,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering { base.Initialize(); _pathfindingSystem = Get(); - + for (var i = 0; i < AgentListCount; i++) { _agentLists.Add(new Dictionary()); @@ -111,14 +107,14 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering var agentList = _agentLists[i]; // Register shouldn't be called twice; if it is then someone dun fucked up DebugTools.Assert(!agentList.ContainsKey(entity)); - + if (agentList.Count < lowestListCount) { lowestListCount = agentList.Count; lowestListIndex = i; } } - + _agentLists[lowestListIndex].Add(entity, steeringRequest); } @@ -133,7 +129,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering { controller.VelocityDir = Vector2.Zero; } - + if (_pathfindingRequests.TryGetValue(entity, out var request)) { switch (request.Job.Status) @@ -157,7 +153,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering } _pathfindingRequests.Remove(entity); } - + if (_paths.ContainsKey(entity)) { _paths.Remove(entity); @@ -177,7 +173,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering { _entityTargetPosition.Remove(entity); } - + foreach (var agentList in _agentLists) { if (agentList.ContainsKey(entity)) @@ -214,7 +210,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering { var result = Steer(agent, steering); steering.Status = result; - + switch (result) { case SteeringStatus.Pending: @@ -255,7 +251,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering controller.VelocityDir = Vector2.Zero; return SteeringStatus.Pending; } - + // Validation // Check if we can even arrive -> Currently only samegrid movement supported if (entity.Transform.GridID != steeringRequest.TargetGrid.GridID) @@ -263,7 +259,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering controller.VelocityDir = Vector2.Zero; return SteeringStatus.NoPath; } - + // Check if we have arrived var targetDistance = (entity.Transform.MapPosition.Position - steeringRequest.TargetMap.Position).Length; if (targetDistance <= steeringRequest.ArrivalDistance) @@ -274,7 +270,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering controller.VelocityDir = Vector2.Zero; return SteeringStatus.Arrived; } - + // Handle pathfinding job // If we still have an existing path then keep following that until the new path arrives if (_pathfindingRequests.TryGetValue(entity, out var pathRequest) && pathRequest.Job.Status == JobStatus.Finished) @@ -297,7 +293,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering controller.VelocityDir = Vector2.Zero; return SteeringStatus.NoPath; } - + // If we're closer to next tile then we don't want to walk backwards to our tile's center UpdatePath(entity, path); @@ -319,7 +315,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering RequestPath(entity, steeringRequest); return SteeringStatus.Pending; } - + var ignoredCollision = new List(); // Check if the target entity has moved - If so then re-path // TODO: Patch the path from the target's position back towards us, stopping if it ever intersects the current path @@ -331,19 +327,19 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering controller.VelocityDir = Vector2.Zero; return SteeringStatus.NoPath; } - + // Check if target's moved too far if (_entityTargetPosition.TryGetValue(entity, out var targetGrid) && (entitySteer.TargetGrid.Position - targetGrid.Position).Length >= entitySteer.TargetMaxMove) { // We'll just repath and keep following the existing one until we get a new one RequestPath(entity, steeringRequest); } - + ignoredCollision.Add(entitySteer.Target); } HandleStuck(entity); - + // TODO: Probably need a dedicated queuing solver (doorway congestion FML) // Get the target grid (either next tile or target itself) and pass it in to the steering behaviors // If there's nowhere to go then just stop and wait @@ -353,14 +349,14 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering controller.VelocityDir = Vector2.Zero; return SteeringStatus.NoPath; } - + // Validate that we can even get to the next grid (could probably just check if we can use nextTile if we're not near the target grid) if (!_pathfindingSystem.CanTraverse(entity, nextGrid.Value)) { controller.VelocityDir = Vector2.Zero; return SteeringStatus.NoPath; } - + // Now we can /finally/ move var movementVector = Vector2.Zero; @@ -370,10 +366,10 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering movementVector += Seek(entity, nextGrid.Value); if (CollisionAvoidanceEnabled) { - movementVector += CollisionAvoidance(entity, movementVector, ignoredCollision); + movementVector += CollisionAvoidance(entity, movementVector, ignoredCollision); } // Group behaviors would also go here e.g. separation, cohesion, alignment - + // Move towards it DebugTools.Assert(movementVector != new Vector2(float.NaN, float.NaN)); controller.VelocityDir = movementVector.Normalized; @@ -391,7 +387,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering { return; } - + var cancelToken = new CancellationTokenSource(); var gridManager = _mapManager.GetGrid(entity.Transform.GridID); var startTile = gridManager.GetTileRef(entity.Transform.GridPosition); @@ -403,7 +399,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering } var access = AccessReader.FindAccessTags(entity); - + var job = _pathfindingSystem.RequestPath(new PathfindingArgs( entity.Uid, access, @@ -423,11 +419,11 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering private void UpdatePath(IEntity entity, Queue path) { _pathfindingRequests.Remove(entity); - + var entityTile = _mapManager.GetGrid(entity.Transform.GridID).GetTileRef(entity.Transform.GridPosition); var tile = path.Dequeue(); var closestDistance = PathfindingHelpers.OctileDistance(entityTile, tile); - + for (var i = 0; i < path.Count; i++) { tile = path.Peek(); @@ -441,7 +437,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering break; } } - + _paths[entity] = path; } @@ -458,20 +454,20 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering { _nextGrid.Remove(entity); } - + // If no tiles left just move towards the target (if we're close) if (!_paths.ContainsKey(entity) || _paths[entity].Count == 0) { if ((steeringRequest.TargetGrid.Position - entity.Transform.GridPosition.Position).Length <= 2.0f) { - return steeringRequest.TargetGrid; + return steeringRequest.TargetGrid; } // Too far so we need a re-path return null; } - - if (!_nextGrid.TryGetValue(entity, out var nextGrid) || + + if (!_nextGrid.TryGetValue(entity, out var nextGrid) || (nextGrid.Position - entity.Transform.GridPosition.Position).Length <= TileTolerance) { UpdateGridCache(entity); @@ -526,7 +522,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering { return; } - + // Okay now we're stuck _paths.Remove(entity); _stuckCounter[entity] = 0; @@ -580,8 +576,8 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering { return Vector2.Zero; } - - if (target.TryGetComponent(out IPhysicsComponent physicsComponent)) + + if (target.TryGetComponent(out ICollidableComponent physicsComponent)) { var targetDistance = (targetPos.Position - entityPos.Position); targetPos = targetPos.Offset(physicsComponent.LinearVelocity * targetDistance); @@ -603,7 +599,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering { return Vector2.Zero; } - + // We'll check tile-by-tile // Rewriting this frequently so not many comments as they'll go stale // I realise this is bad so please rewrite it ;-; @@ -636,21 +632,22 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering //Pathfinding updates are deferred so this may not be done yet. if (physicsEntity.Deleted) continue; - + // if we're moving in the same direction then ignore // So if 2 entities are moving towards each other and both detect a collision they'll both move in the same direction // i.e. towards the right - if (physicsEntity.TryGetComponent(out IPhysicsComponent physicsComponent) && + if (physicsEntity.TryGetComponent(out ICollidableComponent physicsComponent) && Vector2.Dot(physicsComponent.LinearVelocity, direction) > 0) { continue; } + var centerGrid = physicsEntity.Transform.GridPosition; // Check how close we are to center of tile and get the inverse; if we're closer this is stronger var additionalVector = (centerGrid.Position - entityGridCoords.Position); var distance = additionalVector.Length; // If we're too far no point, if we're close then cap it at the normalized vector - distance = Math.Clamp(2.5f - distance, 0.0f, 1.0f); + distance = FloatMath.Clamp(2.5f - distance, 0.0f, 1.0f); additionalVector = new Angle(90 * distance).RotateVec(additionalVector); avoidanceVector += additionalVector; // if we do need to avoid that means we'll have to lookahead for the next tile diff --git a/Content.Server/GameObjects/EntitySystems/ActSystem.cs b/Content.Server/GameObjects/EntitySystems/ActSystem.cs index 4fd95bb847..56be8389ea 100644 --- a/Content.Server/GameObjects/EntitySystems/ActSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ActSystem.cs @@ -5,7 +5,7 @@ using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Map; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { /// /// This interface gives components behavior on getting destoyed. diff --git a/Content.Server/GameObjects/EntitySystems/AtmosphereSystem.cs b/Content.Server/GameObjects/EntitySystems/AtmosphereSystem.cs index 4faabfe44b..327104a148 100644 --- a/Content.Server/GameObjects/EntitySystems/AtmosphereSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/AtmosphereSystem.cs @@ -2,7 +2,6 @@ using System; using System.Collections.Generic; using Content.Server.Atmos; -using Content.Server.GameObjects.Components.Atmos; using JetBrains.Annotations; using Robust.Server.Interfaces.Timing; using Robust.Shared.GameObjects; @@ -10,6 +9,7 @@ using Robust.Shared.GameObjects.Components.Map; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; +using Robust.Shared.IoC; using Robust.Shared.Map; namespace Content.Server.GameObjects.EntitySystems @@ -17,18 +17,14 @@ namespace Content.Server.GameObjects.EntitySystems [UsedImplicitly] public class AtmosphereSystem : EntitySystem { -#pragma warning disable 649 - [Robust.Shared.IoC.Dependency] private readonly IMapManager _mapManager = default!; - [Robust.Shared.IoC.Dependency] private readonly IEntityManager _entityManager = default!; - [Robust.Shared.IoC.Dependency] private readonly IPauseManager _pauseManager = default!; -#pragma warning restore 649 + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly IPauseManager _pauseManager = default!; public override void Initialize() { base.Initialize(); _mapManager.TileChanged += OnTileChanged; - EntityQuery = new MultipleTypeEntityQuery(new List(){typeof(IGridAtmosphereComponent)}); } public IGridAtmosphereComponent? GetGridAtmosphere(GridId gridId) @@ -36,7 +32,7 @@ namespace Content.Server.GameObjects.EntitySystems // TODO Return space grid atmosphere for invalid grids or grids with no atmos var grid = _mapManager.GetGrid(gridId); - if (!_entityManager.TryGetEntity(grid.GridEntityId, out var gridEnt)) return null; + if (!EntityManager.TryGetEntity(grid.GridEntityId, out var gridEnt)) return null; return gridEnt.TryGetComponent(out IGridAtmosphereComponent atmos) ? atmos : null; } @@ -45,13 +41,12 @@ namespace Content.Server.GameObjects.EntitySystems { base.Update(frameTime); - foreach (var gridEnt in RelevantEntities) + foreach (var (mapGridComponent, gridAtmosphereComponent) in EntityManager.ComponentManager.EntityQuery()) { - var grid = gridEnt.GetComponent(); - if (_pauseManager.IsGridPaused(grid.GridIndex)) + if (_pauseManager.IsGridPaused(mapGridComponent.GridIndex)) continue; - gridEnt.GetComponent().Update(frameTime); + gridAtmosphereComponent.Update(frameTime); } } diff --git a/Content.Server/GameObjects/EntitySystems/BaseChargerSystem.cs b/Content.Server/GameObjects/EntitySystems/BaseChargerSystem.cs index 7e59153404..d206e07461 100644 --- a/Content.Server/GameObjects/EntitySystems/BaseChargerSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/BaseChargerSystem.cs @@ -1,23 +1,17 @@ -using Content.Server.GameObjects.Components.Power.Chargers; +using Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerReceiverUsers; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - internal class BaseChargerSystem : EntitySystem + internal sealed class BaseChargerSystem : EntitySystem { - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(BaseCharger)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - entity.GetComponent().OnUpdate(frameTime); + comp.OnUpdate(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/BatteryDischargerSystem.cs b/Content.Server/GameObjects/EntitySystems/BatteryDischargerSystem.cs index a17571a1b7..22fc2b7215 100644 --- a/Content.Server/GameObjects/EntitySystems/BatteryDischargerSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/BatteryDischargerSystem.cs @@ -1,31 +1,26 @@ using Content.Server.GameObjects.Components.Power.PowerNetComponents; +using JetBrains.Annotations; using Robust.Server.Interfaces.Timing; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.IoC; namespace Content.Server.GameObjects.EntitySystems { - internal class BatteryDischargerSystem : EntitySystem + [UsedImplicitly] + internal sealed class BatteryDischargerSystem : EntitySystem { -#pragma warning disable 649 - [Dependency] private readonly IPauseManager _pauseManager; -#pragma warning restore 649 - - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(BatteryDischargerComponent)); - } + [Dependency] private readonly IPauseManager _pauseManager = default!; public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - if (_pauseManager.IsEntityPaused(entity)) + if (_pauseManager.IsEntityPaused(comp.Owner)) { continue; } - entity.GetComponent().Update(frameTime); + + comp.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/BatteryStorageSystem.cs b/Content.Server/GameObjects/EntitySystems/BatteryStorageSystem.cs index 38fe005dcd..6f5ac89a8b 100644 --- a/Content.Server/GameObjects/EntitySystems/BatteryStorageSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/BatteryStorageSystem.cs @@ -1,31 +1,26 @@ using Content.Server.GameObjects.Components.Power.PowerNetComponents; +using JetBrains.Annotations; using Robust.Server.Interfaces.Timing; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.IoC; namespace Content.Server.GameObjects.EntitySystems { - internal class BatteryStorageSystem : EntitySystem + [UsedImplicitly] + internal sealed class BatteryStorageSystem : EntitySystem { -#pragma warning disable 649 - [Dependency] private readonly IPauseManager _pauseManager; -#pragma warning restore 649 - - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(BatteryStorageComponent)); - } + [Dependency] private readonly IPauseManager _pauseManager = default!; public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - if (_pauseManager.IsEntityPaused(entity)) + if (_pauseManager.IsEntityPaused(comp.Owner)) { continue; } - entity.GetComponent().Update(frameTime); + + comp.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/BloodstreamSystem.cs b/Content.Server/GameObjects/EntitySystems/BloodstreamSystem.cs index 69b432084b..fc6a69f325 100644 --- a/Content.Server/GameObjects/EntitySystems/BloodstreamSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/BloodstreamSystem.cs @@ -1,21 +1,16 @@ using Content.Server.GameObjects.Components.Metabolism; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { /// - /// Triggers metabolism updates for + /// Triggers metabolism updates for /// [UsedImplicitly] - public class BloodstreamSystem : EntitySystem + internal sealed class BloodstreamSystem : EntitySystem { private float _accumulatedFrameTime; - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(BloodstreamComponent)); - } public override void Update(float frameTime) { @@ -23,12 +18,11 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction _accumulatedFrameTime += frameTime; if (_accumulatedFrameTime > 1.0f) { - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); - comp.OnUpdate(_accumulatedFrameTime); + component.OnUpdate(_accumulatedFrameTime); } - _accumulatedFrameTime = 0.0f; + _accumulatedFrameTime -= 1.0f; } } } diff --git a/Content.Server/GameObjects/EntitySystems/BuckleSystem.cs b/Content.Server/GameObjects/EntitySystems/BuckleSystem.cs index 0f5719d500..9fbb049322 100644 --- a/Content.Server/GameObjects/EntitySystems/BuckleSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/BuckleSystem.cs @@ -2,36 +2,25 @@ using Content.Server.GameObjects.EntitySystems.Click; using JetBrains.Annotations; using Robust.Server.GameObjects.EntitySystems; -using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Components.Transform; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.Map; -using Robust.Shared.IoC; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class BuckleSystem : EntitySystem + internal sealed class BuckleSystem : EntitySystem { public override void Initialize() { base.Initialize(); - EntityQuery = new TypeEntityQuery(typeof(BuckleComponent)); - UpdatesAfter.Add(typeof(InteractionSystem)); UpdatesAfter.Add(typeof(InputSystem)); } public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var buckle in ComponentManager.EntityQuery()) { - if (!entity.TryGetComponent(out BuckleComponent buckle)) - { - continue; - } - buckle.Update(); } } diff --git a/Content.Server/GameObjects/EntitySystems/ChemistrySystem.cs b/Content.Server/GameObjects/EntitySystems/ChemistrySystem.cs index 39cca2be0e..69bd555460 100644 --- a/Content.Server/GameObjects/EntitySystems/ChemistrySystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ChemistrySystem.cs @@ -4,7 +4,7 @@ using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { /// /// This interface gives components behavior on whether entities solution (implying SolutionComponent is in place) is changed diff --git a/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs b/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs index cec72d8508..1b83b0b3fe 100644 --- a/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs @@ -4,7 +4,7 @@ using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; -using Robust.Shared.Maths; +using Robust.Shared.Localization; using Robust.Shared.Utility; namespace Content.Server.GameObjects.EntitySystems.Click @@ -20,7 +20,7 @@ namespace Content.Server.GameObjects.EntitySystems.Click static ExamineSystem() { _entityNotFoundMessage = new FormattedMessage(); - _entityNotFoundMessage.AddText("That entity doesn't exist"); + _entityNotFoundMessage.AddText(Loc.GetString("That entity doesn't exist")); } public override void Initialize() diff --git a/Content.Server/GameObjects/EntitySystems/CombatModeSystem.cs b/Content.Server/GameObjects/EntitySystems/CombatModeSystem.cs index f8fd65915e..12e4963718 100644 --- a/Content.Server/GameObjects/EntitySystems/CombatModeSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/CombatModeSystem.cs @@ -1,17 +1,7 @@ -using Content.Server.GameObjects.Components.Mobs; -using Content.Shared.GameObjects.EntitySystems; -using Content.Shared.Input; +using Content.Shared.GameObjects.EntitySystems; using JetBrains.Annotations; -using Robust.Server.GameObjects.EntitySystems; -using Robust.Server.Interfaces.Player; -using Robust.Shared.Input; -using Robust.Shared.Interfaces.Random; -using Robust.Shared.IoC; -using Robust.Shared.Log; -using Robust.Shared.Players; -using Robust.Shared.Random; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] public sealed class CombatModeSystem : SharedCombatModeSystem diff --git a/Content.Server/GameObjects/EntitySystems/ConstructionSystem.cs b/Content.Server/GameObjects/EntitySystems/ConstructionSystem.cs index 8b7c7ddeb5..b054fd5401 100644 --- a/Content.Server/GameObjects/EntitySystems/ConstructionSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ConstructionSystem.cs @@ -1,15 +1,16 @@ using System; using System.Collections.Generic; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Construction; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Interactable; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Stack; using Content.Server.GameObjects.EntitySystems.Click; using Content.Server.Utility; using Content.Shared.Construction; using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.Components.Interactable; +using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces.GameObjects.Components; using JetBrains.Annotations; using Robust.Server.GameObjects; @@ -32,7 +33,7 @@ namespace Content.Server.GameObjects.EntitySystems /// The server-side implementation of the construction system, which is used for constructing entities in game. /// [UsedImplicitly] - internal class ConstructionSystem : Shared.GameObjects.EntitySystems.SharedConstructionSystem + internal class ConstructionSystem : SharedConstructionSystem { #pragma warning disable 649 [Dependency] private readonly IPrototypeManager _prototypeManager; @@ -337,7 +338,7 @@ namespace Content.Server.GameObjects.EntitySystems } // OK WE'RE GOOD CONSTRUCTION STARTED. - EntitySystem.Get().PlayFromEntity("/Audio/Items/deconstruct.ogg", placingEnt); + Get().PlayFromEntity("/Audio/Items/deconstruct.ogg", placingEnt); if (prototype.Stages.Count == 2) { // Exactly 2 stages, so don't make an intermediate frame. diff --git a/Content.Server/GameObjects/EntitySystems/ConveyorSystem.cs b/Content.Server/GameObjects/EntitySystems/ConveyorSystem.cs index 6d75e5bcd8..d65b266d1f 100644 --- a/Content.Server/GameObjects/EntitySystems/ConveyorSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ConveyorSystem.cs @@ -1,33 +1,19 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using Content.Server.GameObjects.Components.Conveyor; using Content.Shared.GameObjects.Components.Conveyor; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class ConveyorSystem : EntitySystem + internal sealed class ConveyorSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(ConveyorComponent)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - if (!entity.TryGetComponent(out ConveyorComponent conveyor)) - { - continue; - } - - conveyor.Update(frameTime); + comp.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/DisposableSystem.cs b/Content.Server/GameObjects/EntitySystems/DisposableSystem.cs index fd2bef87bf..536f0dfda4 100644 --- a/Content.Server/GameObjects/EntitySystems/DisposableSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/DisposableSystem.cs @@ -1,25 +1,18 @@ using Content.Server.GameObjects.Components.Disposal; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class DisposableSystem : EntitySystem + internal sealed class DisposableSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(DisposalHolderComponent)); - } public override void Update(float frameTime) { - foreach (var disposable in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - disposable.GetComponent().Update(frameTime); + comp.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/DisposalUnitSystem.cs b/Content.Server/GameObjects/EntitySystems/DisposalUnitSystem.cs index cf668534bb..ecac19f19e 100644 --- a/Content.Server/GameObjects/EntitySystems/DisposalUnitSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/DisposalUnitSystem.cs @@ -1,25 +1,17 @@ using Content.Server.GameObjects.Components.Disposal; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class DisposalUnitSystem : EntitySystem + internal sealed class DisposalUnitSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(DisposalUnitComponent)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - entity.GetComponent().Update(frameTime); + comp.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfter.cs b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfter.cs index 63eb8ee378..2a409d0bfe 100644 --- a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfter.cs +++ b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfter.cs @@ -1,39 +1,40 @@ #nullable enable using System; using System.Threading.Tasks; -using Content.Server.GameObjects.Components; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Mobs; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Map; -namespace Content.Server.GameObjects.EntitySystems +namespace Content.Server.GameObjects.EntitySystems.DoAfter { public sealed class DoAfter { public Task AsTask { get; } - + private TaskCompletionSource Tcs { get;} - + public DoAfterEventArgs EventArgs; - + public TimeSpan StartTime { get; } - + public float Elapsed { get; set; } - + public GridCoordinates UserGrid { get; } - + public GridCoordinates TargetGrid { get; } private bool _tookDamage; public DoAfterStatus Status => AsTask.IsCompletedSuccessfully ? AsTask.Result : DoAfterStatus.Running; - + // NeedHand private string? _activeHand; private ItemComponent? _activeItem; - + public DoAfter(DoAfterEventArgs eventArgs) { EventArgs = eventArgs; @@ -57,7 +58,7 @@ namespace Content.Server.GameObjects.EntitySystems _activeHand = handsComponent.ActiveHand; _activeItem = handsComponent.GetActiveHand; } - + Tcs = new TaskCompletionSource(); AsTask = Tcs.Task; } @@ -79,15 +80,15 @@ namespace Content.Server.GameObjects.EntitySystems default: throw new ArgumentOutOfRangeException(); } - + Elapsed += frameTime; - + if (IsFinished()) { Tcs.SetResult(DoAfterStatus.Finished); return; } - + if (IsCancelled()) { Tcs.SetResult(DoAfterStatus.Cancelled); @@ -101,13 +102,13 @@ namespace Content.Server.GameObjects.EntitySystems { return true; } - + // TODO :Handle inertia in space. if (EventArgs.BreakOnUserMove && EventArgs.User.Transform.GridPosition != UserGrid) { return true; } - + if (EventArgs.BreakOnTargetMove && EventArgs.Target!.Transform.GridPosition != TargetGrid) { return true; @@ -129,7 +130,7 @@ namespace Content.Server.GameObjects.EntitySystems { return true; } - + if (EventArgs.NeedHand) { if (!EventArgs.User.TryGetComponent(out HandsComponent handsComponent)) @@ -169,4 +170,4 @@ namespace Content.Server.GameObjects.EntitySystems return true; } } -} \ No newline at end of file +} diff --git a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterEventArgs.cs b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterEventArgs.cs index 8aca9fdc83..7906c616eb 100644 --- a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterEventArgs.cs +++ b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterEventArgs.cs @@ -2,9 +2,10 @@ using System; using System.Threading; using Robust.Shared.Interfaces.GameObjects; + // ReSharper disable UnassignedReadonlyField -namespace Content.Server.GameObjects.EntitySystems +namespace Content.Server.GameObjects.EntitySystems.DoAfter { public sealed class DoAfterEventArgs { diff --git a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs index 8aa394b25a..1c01a789a0 100644 --- a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs @@ -3,13 +3,13 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; using Content.Server.GameObjects.Components; +using Content.Server.GameObjects.Components.Damage; using JetBrains.Annotations; using Robust.Server.Interfaces.Timing; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.IoC; -namespace Content.Server.GameObjects.EntitySystems +namespace Content.Server.GameObjects.EntitySystems.DoAfter { [UsedImplicitly] public sealed class DoAfterSystem : EntitySystem @@ -19,18 +19,18 @@ namespace Content.Server.GameObjects.EntitySystems public override void Update(float frameTime) { base.Update(frameTime); - + foreach (var comp in ComponentManager.EntityQuery()) { if (_pauseManager.IsGridPaused(comp.Owner.Transform.GridID)) continue; - + var cancelled = new List(0); var finished = new List(0); foreach (var doAfter in comp.DoAfters) { doAfter.Run(frameTime); - + switch (doAfter.Status) { case DoAfterStatus.Running: @@ -59,7 +59,7 @@ namespace Content.Server.GameObjects.EntitySystems finished.Clear(); } } - + /// /// Tasks that are delayed until the specified time has passed /// These can be potentially cancelled by the user moving or when other things happen. @@ -74,7 +74,7 @@ namespace Content.Server.GameObjects.EntitySystems var doAfterComponent = eventArgs.User.GetComponent(); doAfterComponent.Add(doAfter); DamageableComponent? damageableComponent = null; - + // TODO: If the component's deleted this may not get unsubscribed? if (eventArgs.BreakOnDamage && eventArgs.User.TryGetComponent(out damageableComponent)) { @@ -82,12 +82,12 @@ namespace Content.Server.GameObjects.EntitySystems } await doAfter.AsTask; - + if (damageableComponent != null) { damageableComponent.Damaged -= doAfter.HandleDamage; } - + return doAfter.Status; } } @@ -98,4 +98,4 @@ namespace Content.Server.GameObjects.EntitySystems Cancelled, Finished, } -} \ No newline at end of file +} diff --git a/Content.Server/GameObjects/EntitySystems/DoorSystem.cs b/Content.Server/GameObjects/EntitySystems/DoorSystem.cs index d9c6a782d8..fb5d0fe432 100644 --- a/Content.Server/GameObjects/EntitySystems/DoorSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/DoorSystem.cs @@ -1,4 +1,5 @@ -using Robust.Shared.GameObjects.Systems; +using Content.Server.GameObjects.Components.Doors; +using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.EntitySystems { diff --git a/Content.Server/GameObjects/EntitySystems/GasAnalyzerSystem.cs b/Content.Server/GameObjects/EntitySystems/GasAnalyzerSystem.cs index 79e50ced63..1f536cf500 100644 --- a/Content.Server/GameObjects/EntitySystems/GasAnalyzerSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/GasAnalyzerSystem.cs @@ -1,10 +1,5 @@ using Content.Server.GameObjects.Components.Atmos; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; -using System; -using System.Collections.Generic; -using System.Text; namespace Content.Server.GameObjects.EntitySystems { diff --git a/Content.Server/GameObjects/EntitySystems/GasTileOverlaySystem.cs b/Content.Server/GameObjects/EntitySystems/GasTileOverlaySystem.cs index 6fb9879bd7..493ef068ed 100644 --- a/Content.Server/GameObjects/EntitySystems/GasTileOverlaySystem.cs +++ b/Content.Server/GameObjects/EntitySystems/GasTileOverlaySystem.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; -using Content.Server.Atmos; using Content.Server.GameObjects.Components.Atmos; using Content.Shared.Atmos; using Content.Shared.GameObjects.EntitySystems; @@ -10,13 +9,10 @@ using JetBrains.Annotations; using Robust.Server.Interfaces.Player; using Robust.Server.Player; using Robust.Shared.Enums; -using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; -using Robust.Shared.Interfaces.Network; using Robust.Shared.IoC; using Robust.Shared.Map; -using Robust.Shared.Utility; namespace Content.Server.GameObjects.EntitySystems { diff --git a/Content.Server/GameObjects/EntitySystems/GravitySystem.cs b/Content.Server/GameObjects/EntitySystems/GravitySystem.cs index f87d303d05..84a265b70c 100644 --- a/Content.Server/GameObjects/EntitySystems/GravitySystem.cs +++ b/Content.Server/GameObjects/EntitySystems/GravitySystem.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.Gravity; @@ -6,9 +5,7 @@ using Content.Server.GameObjects.Components.Mobs; using JetBrains.Annotations; using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.Player; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; @@ -16,45 +13,37 @@ using Robust.Shared.Map; using Robust.Shared.Maths; using Robust.Shared.Random; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class GravitySystem: EntitySystem + internal sealed class GravitySystem : EntitySystem { -#pragma warning disable 649 - [Dependency] private readonly IMapManager _mapManager; - [Dependency] private readonly IPlayerManager _playerManager; - [Dependency] private readonly IRobustRandom _random; -#pragma warning restore 649 + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; private const float GravityKick = 100.0f; private const uint ShakeTimes = 10; - private Dictionary _gridsToShake; + private Dictionary _gridsToShake = new Dictionary(); - private float internalTimer = 0.0f; - - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(); - _gridsToShake = new Dictionary(); - } + private float _internalTimer = 0.0f; public override void Update(float frameTime) { - internalTimer += frameTime; + _internalTimer += frameTime; var gridsWithGravity = new List(); - foreach (var entity in RelevantEntities) + foreach (var generator in ComponentManager.EntityQuery()) { - var generator = entity.GetComponent(); if (generator.NeedsUpdate) { generator.UpdateState(); } + if (generator.Status == GravityGeneratorStatus.On) { - gridsWithGravity.Add(entity.Transform.GridID); + gridsWithGravity.Add(generator.Owner.Transform.GridID); } } @@ -71,10 +60,10 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction } } - if (internalTimer > 0.2f) + if (_internalTimer > 0.2f) { ShakeGrids(); - internalTimer = 0.0f; + _internalTimer = 0.0f; } } @@ -93,7 +82,7 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction { if (player.AttachedEntity == null || player.AttachedEntity.Transform.GridID != gridId) continue; - EntitySystem.Get().PlayFromEntity("/Audio/Effects/alert.ogg", player.AttachedEntity); + Get().PlayFromEntity("/Audio/Effects/alert.ogg", player.AttachedEntity); } } diff --git a/Content.Server/GameObjects/EntitySystems/HandHeldLightSystem.cs b/Content.Server/GameObjects/EntitySystems/HandHeldLightSystem.cs index 8dd40458c3..abb68219e7 100644 --- a/Content.Server/GameObjects/EntitySystems/HandHeldLightSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/HandHeldLightSystem.cs @@ -1,21 +1,16 @@ using Content.Server.GameObjects.Components.Interactable; -using Robust.Shared.GameObjects; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { - public class HandHeldLightSystem : EntitySystem + [UsedImplicitly] + internal sealed class HandHeldLightSystem : EntitySystem { - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(HandheldLightComponent)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); comp.OnUpdate(frameTime); } } diff --git a/Content.Server/GameObjects/EntitySystems/HandsSystem.cs b/Content.Server/GameObjects/EntitySystems/HandsSystem.cs index 5d2101367a..8243fca463 100644 --- a/Content.Server/GameObjects/EntitySystems/HandsSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/HandsSystem.cs @@ -1,8 +1,14 @@ -using System.Linq; +using System; +using System.Linq; +using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Stack; +using Content.Server.GameObjects.EntitySystems.Click; using Content.Server.Interfaces; +using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Server.Throw; using Content.Shared.GameObjects.Components.Inventory; +using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Input; using JetBrains.Annotations; using Robust.Server.GameObjects.EntitySystemMessages; @@ -15,18 +21,8 @@ using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Map; using Robust.Shared.Players; -using System; -using Content.Server.GameObjects.Components.GUI; -using Content.Server.Interfaces.GameObjects.Components.Items; -using Content.Shared.GameObjects.EntitySystems; -using Content.Server.GameObjects; -using Content.Server.GameObjects.Components; -using Content.Server.GameObjects.Components.Items.Storage; -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Shared.Interfaces; -using Robust.Shared.Maths; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal sealed class HandsSystem : EntitySystem diff --git a/Content.Server/GameObjects/EntitySystems/HungerSystem.cs b/Content.Server/GameObjects/EntitySystems/HungerSystem.cs index 08d2c9bf98..cddc2b76dd 100644 --- a/Content.Server/GameObjects/EntitySystems/HungerSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/HungerSystem.cs @@ -1,30 +1,24 @@ using Content.Server.GameObjects.Components.Nutrition; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class HungerSystem : EntitySystem + internal sealed class HungerSystem : EntitySystem { private float _accumulatedFrameTime; - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(HungerComponent)); - } - + public override void Update(float frameTime) { _accumulatedFrameTime += frameTime; if (_accumulatedFrameTime > 1.0f) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); comp.OnUpdate(_accumulatedFrameTime); } - _accumulatedFrameTime = 0.0f; + _accumulatedFrameTime -= 1.0f; } } } diff --git a/Content.Server/GameObjects/EntitySystems/InstrumentSystem.cs b/Content.Server/GameObjects/EntitySystems/InstrumentSystem.cs index a64f1fec01..e95f9016b5 100644 --- a/Content.Server/GameObjects/EntitySystems/InstrumentSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/InstrumentSystem.cs @@ -1,24 +1,19 @@ using Content.Server.GameObjects.Components.Instruments; -using Robust.Shared.GameObjects; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.EntitySystems { - public class InstrumentSystem : EntitySystem + [UsedImplicitly] + internal sealed class InstrumentSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - EntityQuery = new TypeEntityQuery(typeof(InstrumentComponent)); - } - public override void Update(float frameTime) { base.Update(frameTime); - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - entity.GetComponent().Update(frameTime); + component.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/JobQueues/IJob.cs b/Content.Server/GameObjects/EntitySystems/JobQueues/IJob.cs index e23429ae14..6ecb5826bc 100644 --- a/Content.Server/GameObjects/EntitySystems/JobQueues/IJob.cs +++ b/Content.Server/GameObjects/EntitySystems/JobQueues/IJob.cs @@ -1,5 +1,3 @@ -using System.Collections; - namespace Content.Server.GameObjects.EntitySystems.JobQueues { public interface IJob diff --git a/Content.Server/GameObjects/EntitySystems/LatheSystem.cs b/Content.Server/GameObjects/EntitySystems/LatheSystem.cs index 7c39ae0cc3..777c22c82c 100644 --- a/Content.Server/GameObjects/EntitySystems/LatheSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/LatheSystem.cs @@ -1,21 +1,16 @@ using Content.Server.GameObjects.Components.Research; -using Robust.Shared.GameObjects; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { - public class LatheSystem : EntitySystem + [UsedImplicitly] + internal sealed class LatheSystem : EntitySystem { - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(LatheComponent)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); if (comp.Producing == false && comp.Queue.Count > 0) { comp.Produce(comp.Queue.Dequeue()); diff --git a/Content.Server/GameObjects/EntitySystems/ListeningSystem.cs b/Content.Server/GameObjects/EntitySystems/ListeningSystem.cs index e4e518e1a8..f69477e089 100644 --- a/Content.Server/GameObjects/EntitySystems/ListeningSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ListeningSystem.cs @@ -1,37 +1,23 @@ using Content.Server.GameObjects.Components; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Map; -using System; -using System.Collections.Generic; -using System.Text; namespace Content.Server.GameObjects.EntitySystems { - class ListeningSystem : EntitySystem + internal sealed class ListeningSystem : EntitySystem { -#pragma warning disable 649 - [Dependency] private readonly IMapManager _mapManager; - [Dependency] private readonly IEntitySystemManager _entitySystemManager; -#pragma warning restore 649 - - public override void Initialize() - { - base.Initialize(); - EntityQuery = new TypeEntityQuery(typeof(ListeningComponent)); - } + [Dependency] private readonly IMapManager _mapManager = default!; public void PingListeners(IEntity source, GridCoordinates sourcePos, string message) { - foreach (var listener in RelevantEntities) + foreach (var listener in ComponentManager.EntityQuery()) { - var dist = sourcePos.Distance(_mapManager, listener.Transform.GridPosition); + var dist = sourcePos.Distance(_mapManager, listener.Owner.Transform.GridPosition); - listener.GetComponent() - .PassSpeechData(message, source, dist); + listener.PassSpeechData(message, source, dist); } } } diff --git a/Content.Server/GameObjects/EntitySystems/MedicalScannerSystem.cs b/Content.Server/GameObjects/EntitySystems/MedicalScannerSystem.cs index 8dc8379b0d..3180063247 100644 --- a/Content.Server/GameObjects/EntitySystems/MedicalScannerSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/MedicalScannerSystem.cs @@ -1,21 +1,16 @@ using Content.Server.GameObjects.Components.Medical; -using Robust.Shared.GameObjects; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { - public class MedicalScannerSystem : EntitySystem + [UsedImplicitly] + internal sealed class MedicalScannerSystem : EntitySystem { - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(MedicalScannerComponent)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); comp.Update(frameTime); } } diff --git a/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs b/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs index 9dfd278add..82ba72537a 100644 --- a/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs @@ -5,7 +5,7 @@ using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Maths; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { public sealed class MeleeWeaponSystem : EntitySystem { diff --git a/Content.Server/GameObjects/EntitySystems/MicrowaveSystem.cs b/Content.Server/GameObjects/EntitySystems/MicrowaveSystem.cs index 8bb7d80bdd..a1ccba35ed 100644 --- a/Content.Server/GameObjects/EntitySystems/MicrowaveSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/MicrowaveSystem.cs @@ -1,23 +1,17 @@ using Content.Server.GameObjects.Components.Kitchen; -using Robust.Shared.GameObjects; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { - public class MicrowaveSystem : EntitySystem + [UsedImplicitly] + internal sealed class MicrowaveSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - EntityQuery = new TypeEntityQuery(typeof(MicrowaveComponent)); - } - public override void Update(float frameTime) { base.Update(frameTime); - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); comp.OnUpdate(); } } diff --git a/Content.Server/GameObjects/EntitySystems/MoverSystem.cs b/Content.Server/GameObjects/EntitySystems/MoverSystem.cs index 6caaf9523b..84250d4e91 100644 --- a/Content.Server/GameObjects/EntitySystems/MoverSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/MoverSystem.cs @@ -1,6 +1,6 @@ #nullable enable -using Content.Server.GameObjects; using Content.Server.GameObjects.Components; +using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Movement; @@ -58,23 +58,13 @@ namespace Content.Server.GameObjects.EntitySystems public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var (moverComponent, collidableComponent) in EntityManager.ComponentManager.EntityQuery()) { + var entity = moverComponent.Owner; if (_pauseManager.IsEntityPaused(entity)) - { continue; - } - var mover = entity.GetComponent(); - var physics = entity.GetComponent(); - if (entity.TryGetComponent(out var collider)) - { - UpdateKinematics(entity.Transform, mover, physics, collider); - } - else - { - UpdateKinematics(entity.Transform, mover, physics); - } + UpdateKinematics(entity.Transform, moverComponent, collidableComponent); } } @@ -93,7 +83,7 @@ namespace Content.Server.GameObjects.EntitySystems ev.Entity.RemoveComponent(); } - if (ev.Entity.TryGetComponent(out IPhysicsComponent physics) && + if (ev.Entity.TryGetComponent(out ICollidableComponent physics) && physics.TryGetController(out MoverController controller)) { controller.StopMoving(); diff --git a/Content.Server/GameObjects/EntitySystems/PointingSystem.cs b/Content.Server/GameObjects/EntitySystems/PointingSystem.cs index 6352aafef9..898ed90475 100644 --- a/Content.Server/GameObjects/EntitySystems/PointingSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PointingSystem.cs @@ -24,14 +24,12 @@ using Robust.Shared.Players; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class PointingSystem : EntitySystem + internal sealed class PointingSystem : EntitySystem { -#pragma warning disable 649 [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly ITileDefinitionManager _tileDefinitionManager = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; -#pragma warning restore 649 private static readonly TimeSpan PointDelay = TimeSpan.FromSeconds(0.5f); @@ -156,8 +154,6 @@ namespace Content.Server.GameObjects.EntitySystems _playerManager.PlayerStatusChanged += OnPlayerStatusChanged; - EntityQuery = new TypeEntityQuery(typeof(PointingArrowComponent)); - CommandBinds.Builder .Bind(ContentKeyFunctions.Point, new PointerInputCmdHandler(TryPoint)) .Register(); @@ -173,9 +169,9 @@ namespace Content.Server.GameObjects.EntitySystems public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - entity.GetComponent().Update(frameTime); + component.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/PortalSystem.cs b/Content.Server/GameObjects/EntitySystems/PortalSystem.cs index 7ffc532422..08e06fe150 100644 --- a/Content.Server/GameObjects/EntitySystems/PortalSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PortalSystem.cs @@ -1,23 +1,17 @@ using Content.Server.GameObjects.Components.Movement; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class PortalSystem : EntitySystem + internal sealed class PortalSystem : EntitySystem { - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(ServerPortalComponent)); - } - + // TODO: Someone refactor portals public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); comp.OnUpdate(); } } diff --git a/Content.Server/GameObjects/EntitySystems/PowerApcSystem.cs b/Content.Server/GameObjects/EntitySystems/PowerApcSystem.cs index cbaaaa981e..2e9253ad04 100644 --- a/Content.Server/GameObjects/EntitySystems/PowerApcSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PowerApcSystem.cs @@ -1,37 +1,32 @@ -using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using System.Collections.Generic; using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; -using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Systems; -using System.Collections.Generic; -using Robust.Shared.IoC; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using JetBrains.Annotations; using Robust.Server.Interfaces.Timing; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.IoC; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { - public sealed class ApcSystem : EntitySystem + [UsedImplicitly] + internal sealed class PowerApcSystem : EntitySystem { -#pragma warning disable 649 - [Dependency] private readonly IPauseManager _pauseManager; -#pragma warning restore 649 - - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(ApcComponent)); - } + [Dependency] private readonly IPauseManager _pauseManager = default!; public override void Update(float frameTime) { var uniqueApcNets = new HashSet(); //could be improved by maintaining set instead of getting collection every frame - foreach (var entity in RelevantEntities) + foreach (var apc in ComponentManager.EntityQuery()) { - if (_pauseManager.IsEntityPaused(entity)) + if (_pauseManager.IsEntityPaused(apc.Owner)) { continue; } - var apc = entity.GetComponent(); + uniqueApcNets.Add(apc.Net); - entity.GetComponent().Update(); + apc.Update(); } + foreach (var apcNet in uniqueApcNets) { apcNet.Update(frameTime); diff --git a/Content.Server/GameObjects/EntitySystems/PowerSmesSystem.cs b/Content.Server/GameObjects/EntitySystems/PowerSmesSystem.cs index 84f87f76b7..f6bc4cdeeb 100644 --- a/Content.Server/GameObjects/EntitySystems/PowerSmesSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PowerSmesSystem.cs @@ -1,21 +1,17 @@ -using Content.Server.GameObjects.Components.Power; -using Robust.Shared.GameObjects; +using Content.Server.GameObjects.Components.Power.PowerNetComponents; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { + [UsedImplicitly] internal class PowerSmesSystem : EntitySystem { - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(SmesComponent)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - entity.GetComponent().OnUpdate(); + comp.OnUpdate(); } } } diff --git a/Content.Server/GameObjects/EntitySystems/PowerSolarControlConsoleSystem.cs b/Content.Server/GameObjects/EntitySystems/PowerSolarControlConsoleSystem.cs index c823080a65..68820fbd1b 100644 --- a/Content.Server/GameObjects/EntitySystems/PowerSolarControlConsoleSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PowerSolarControlConsoleSystem.cs @@ -1,16 +1,6 @@ -using Content.Server.GameObjects.Components.Power; +using Content.Server.GameObjects.Components.Power.PowerNetComponents; using JetBrains.Annotations; -using Content.Shared.Physics; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Physics; -using Robust.Shared.Interfaces.Random; -using Robust.Shared.Interfaces.Timing; -using Robust.Shared.Physics; -using Robust.Shared.IoC; -using Robust.Shared.Maths; -using System; namespace Content.Server.GameObjects.EntitySystems { @@ -18,27 +8,22 @@ namespace Content.Server.GameObjects.EntitySystems /// Responsible for updating solar control consoles. /// [UsedImplicitly] - public class PowerSolarControlConsoleSystem : EntitySystem + internal sealed class PowerSolarControlConsoleSystem : EntitySystem { /// /// Timer used to avoid updating the UI state every frame (which would be overkill) /// - private float UpdateTimer = 0f; - - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(SolarControlConsoleComponent)); - } + private float _updateTimer; public override void Update(float frameTime) { - UpdateTimer += frameTime; - if (UpdateTimer >= 1) + _updateTimer += frameTime; + if (_updateTimer >= 1) { - UpdateTimer = 0; - foreach (var entity in RelevantEntities) + _updateTimer -= 1; + foreach (var component in ComponentManager.EntityQuery()) { - entity.GetComponent().UpdateUIState(); + component.UpdateUIState(); } } } diff --git a/Content.Server/GameObjects/EntitySystems/PowerSolarSystem.cs b/Content.Server/GameObjects/EntitySystems/PowerSolarSystem.cs index 604e475d9c..d2a437b40a 100644 --- a/Content.Server/GameObjects/EntitySystems/PowerSolarSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PowerSolarSystem.cs @@ -1,33 +1,26 @@ -using Content.Server.GameObjects.Components.Power; -using JetBrains.Annotations; +using System; +using System.Linq; +using Content.Server.GameObjects.Components.Power.PowerNetComponents; using Content.Shared.Physics; -using Robust.Shared.GameObjects; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Physics; using Robust.Shared.Interfaces.Random; using Robust.Shared.Interfaces.Timing; -using Robust.Shared.Physics; using Robust.Shared.IoC; using Robust.Shared.Maths; -using System; -using System.Linq; -using CannyFastMath; -using Math = CannyFastMath.Math; -using MathF = CannyFastMath.MathF; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { /// /// Responsible for maintaining the solar-panel sun angle and updating coverage. /// [UsedImplicitly] - public class PowerSolarSystem : EntitySystem + internal sealed class PowerSolarSystem : EntitySystem { -#pragma warning disable 649 - [Dependency] private IGameTiming _gameTiming; - [Dependency] private IRobustRandom _robustRandom; -#pragma warning restore 649 + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly IRobustRandom _robustRandom = default!; /// /// The current sun angle. @@ -78,9 +71,8 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction public override void Initialize() { - EntityQuery = new TypeEntityQuery(typeof(SolarPanelComponent)); // Initialize the sun to something random - TowardsSun = Math.TAU * _robustRandom.NextDouble(); + TowardsSun = MathHelper.TwoPi * _robustRandom.NextDouble(); SunAngularVelocity = Angle.FromDegrees(0.1 + ((_robustRandom.NextDouble() - 0.5) * 0.05)); } @@ -94,12 +86,11 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction TotalPanelPower = 0; - foreach (var entity in RelevantEntities) + foreach (var panel in ComponentManager.EntityQuery()) { // There's supposed to be rotational logic here, but that implies putting it somewhere. - entity.Transform.WorldRotation = TargetPanelRotation; + panel.Owner.Transform.WorldRotation = TargetPanelRotation; - var panel = entity.GetComponent(); if (panel.TimeOfNextCoverageUpdate < _gameTiming.CurTime) { // Setup the next coverage check. diff --git a/Content.Server/GameObjects/EntitySystems/ProjectileSystem.cs b/Content.Server/GameObjects/EntitySystems/ProjectileSystem.cs index 6dd87f8b24..7838ef62e0 100644 --- a/Content.Server/GameObjects/EntitySystems/ProjectileSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ProjectileSystem.cs @@ -1,32 +1,23 @@ using Content.Server.GameObjects.Components.Projectiles; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal sealed class ProjectileSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(ProjectileComponent)); - } - public override void Update(float frameTime) { base.Update(frameTime); - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - var component = entity.GetComponent(); component.TimeLeft -= frameTime; if (component.TimeLeft <= 0) { - entity.Delete(); + component.Owner.Delete(); } } } diff --git a/Content.Server/GameObjects/EntitySystems/PuddleSystem.cs b/Content.Server/GameObjects/EntitySystems/PuddleSystem.cs index 77133b8462..f36783a983 100644 --- a/Content.Server/GameObjects/EntitySystems/PuddleSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PuddleSystem.cs @@ -1,19 +1,19 @@ using Content.Server.GameObjects.Components.Fluids; -using Robust.Shared.GameObjects; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Components.Transform; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Map; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { - public class PuddleSystem : EntitySystem + [UsedImplicitly] + internal sealed class PuddleSystem : EntitySystem { public override void Initialize() { base.Initialize(); - EntityQuery = new TypeEntityQuery(typeof(PuddleComponent)); var mapManager = IoCManager.Resolve(); mapManager.TileChanged += HandleTileChanged; } @@ -28,17 +28,14 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction private void HandleTileChanged(object sender, TileChangedEventArgs eventArgs) { // If this gets hammered you could probably queue up all the tile changes every tick but I doubt that would ever happen. - var entities = EntityManager.GetEntities(EntityQuery); - - foreach (var entity in entities) + foreach (var (puddle, snapGrid) in ComponentManager.EntityQuery()) { // If the tile becomes space then delete it (potentially change by design) - if (eventArgs.NewTile.GridIndex == entity.Transform.GridID && - entity.TryGetComponent(out SnapGridComponent snapGridComponent) && - snapGridComponent.Position == eventArgs.NewTile.GridIndices && + if (eventArgs.NewTile.GridIndex == puddle.Owner.Transform.GridID && + snapGrid.Position == eventArgs.NewTile.GridIndices && eventArgs.NewTile.Tile.IsEmpty) { - entity.Delete(); + puddle.Owner.Delete(); break; // Currently it's one puddle per tile, if that changes remove this } } diff --git a/Content.Server/GameObjects/EntitySystems/RadioSystem.cs b/Content.Server/GameObjects/EntitySystems/RadioSystem.cs index 0d8ddf85db..ce6be94145 100644 --- a/Content.Server/GameObjects/EntitySystems/RadioSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/RadioSystem.cs @@ -1,27 +1,13 @@ -using Content.Server.GameObjects.Components.Interactable; -using JetBrains.Annotations; -using Microsoft.CodeAnalysis.CSharp.Syntax; -using Robust.Shared.GameObjects; +using System.Collections.Generic; +using Content.Server.GameObjects.Components; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; namespace Content.Server.GameObjects.EntitySystems { - class RadioSystem : EntitySystem + internal sealed class RadioSystem : EntitySystem { - private List _messages; - - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(RadioComponent)); - _messages = new List(); - } + private readonly List _messages = new List(); public void SpreadMessage(IEntity source, string message) { @@ -32,10 +18,9 @@ namespace Content.Server.GameObjects.EntitySystems _messages.Add(message); - foreach (var radioEntity in RelevantEntities) + foreach (var radio in ComponentManager.EntityQuery()) { - var radio = radioEntity.GetComponent(); - if (radioEntity == source || !radio.RadioOn) + if (radio.Owner == source || !radio.RadioOn) { continue; } diff --git a/Content.Server/GameObjects/EntitySystems/RecyclerSystem.cs b/Content.Server/GameObjects/EntitySystems/RecyclerSystem.cs index 82029d4f08..c0904a1271 100644 --- a/Content.Server/GameObjects/EntitySystems/RecyclerSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/RecyclerSystem.cs @@ -1,25 +1,17 @@ using Content.Server.GameObjects.Components.Recycling; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class RecyclerSystem : EntitySystem + internal sealed class RecyclerSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(RecyclerComponent)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - entity.GetComponent().Update(frameTime); + component.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/ResearchSystem.cs b/Content.Server/GameObjects/EntitySystems/ResearchSystem.cs index e67bd34895..6e4734139b 100644 --- a/Content.Server/GameObjects/EntitySystems/ResearchSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ResearchSystem.cs @@ -4,7 +4,7 @@ using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { public class ResearchSystem : EntitySystem { diff --git a/Content.Server/GameObjects/EntitySystems/RoguePointingSystem.cs b/Content.Server/GameObjects/EntitySystems/RoguePointingSystem.cs index 7fcb5a06e7..7686fb1e3a 100644 --- a/Content.Server/GameObjects/EntitySystems/RoguePointingSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/RoguePointingSystem.cs @@ -1,25 +1,17 @@ using Content.Server.GameObjects.Components.Pointing; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class RoguePointingSystem : EntitySystem + internal sealed class RoguePointingSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(RoguePointingArrowComponent)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - entity.GetComponent().Update(frameTime); + component.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/RoundEndSystem.cs b/Content.Server/GameObjects/EntitySystems/RoundEndSystem.cs index 485ccb6b6f..9077e94184 100644 --- a/Content.Server/GameObjects/EntitySystems/RoundEndSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/RoundEndSystem.cs @@ -6,7 +6,7 @@ using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Timer = Robust.Shared.Timers.Timer; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { public class RoundEndSystem : EntitySystem { diff --git a/Content.Server/GameObjects/EntitySystems/StationEvents/RadiationPulseSystem.cs b/Content.Server/GameObjects/EntitySystems/StationEvents/RadiationPulseSystem.cs new file mode 100644 index 0000000000..2e48bf7120 --- /dev/null +++ b/Content.Server/GameObjects/EntitySystems/StationEvents/RadiationPulseSystem.cs @@ -0,0 +1,89 @@ +using System.Collections.Generic; +using Content.Server.GameObjects.Components.Damage; +using Content.Server.GameObjects.Components.Mobs; +using Content.Server.GameObjects.Components.StationEvents; +using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; +using JetBrains.Annotations; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; + +namespace Content.Server.GameObjects.EntitySystems.StationEvents +{ + [UsedImplicitly] + public sealed class RadiationPulseSystem : EntitySystem + { + // Rather than stuffing around with collidables and checking entities on initialize etc. we'll just tick over + // for each entity in range. Seemed easier than checking entities on spawn, then checking collidables, etc. + // Especially considering each pulse is a big chonker, + no circle hitboxes yet. + + private TypeEntityQuery _speciesQuery; + + /// + /// Damage works with ints so we'll just accumulate damage and once we hit this threshold we'll apply it. + /// + /// This also server to stop spamming the damagethreshold with 1 damage continuously. + private const int DamageThreshold = 10; + + private Dictionary _accumulatedDamage = new Dictionary(); + + public override void Initialize() + { + base.Initialize(); + _speciesQuery = new TypeEntityQuery(typeof(SpeciesComponent)); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + var anyPulses = false; + + foreach (var comp in ComponentManager.EntityQuery()) + { + anyPulses = true; + + foreach (var species in EntityManager.GetEntities(_speciesQuery)) + { + // Work out if we're in range and accumulate more damage + // If we've hit the DamageThreshold we'll also apply that damage to the mob + // If we're really lagging server can apply multiples of the DamageThreshold at once + if (species.Transform.MapID != comp.Owner.Transform.MapID) continue; + + if ((species.Transform.WorldPosition - comp.Owner.Transform.WorldPosition).Length > comp.Range) + { + continue; + } + + var totalDamage = frameTime * comp.DPS; + + if (!_accumulatedDamage.TryGetValue(species, out var accumulatedSpecies)) + { + _accumulatedDamage[species] = 0.0f; + } + + totalDamage += accumulatedSpecies; + _accumulatedDamage[species] = totalDamage; + + if (totalDamage < DamageThreshold) continue; + if (!species.TryGetComponent(out DamageableComponent damageableComponent)) continue; + + var damageMultiple = (int) (totalDamage / DamageThreshold); + _accumulatedDamage[species] = totalDamage % DamageThreshold; + + damageableComponent.TakeDamage(DamageType.Heat, damageMultiple * DamageThreshold, comp.Owner, comp.Owner); + } + } + + if (anyPulses) + { + return; + } + + // probably don't need to worry about clearing this at roundreset unless you have a radiation pulse at roundstart + // (which is currently not possible) + _accumulatedDamage.Clear(); + } + } +} \ No newline at end of file diff --git a/Content.Server/GameObjects/EntitySystems/StationEvents/StationEventSystem.cs b/Content.Server/GameObjects/EntitySystems/StationEvents/StationEventSystem.cs new file mode 100644 index 0000000000..1885b32231 --- /dev/null +++ b/Content.Server/GameObjects/EntitySystems/StationEvents/StationEventSystem.cs @@ -0,0 +1,321 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Content.Server.StationEvents; +using JetBrains.Annotations; +using Robust.Server.Interfaces.Player; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.Random; +using Robust.Shared.Interfaces.Reflection; +using Robust.Shared.Interfaces.Timing; +using Robust.Shared.IoC; +using Robust.Shared.Localization; + +namespace Content.Server.GameObjects.EntitySystems.StationEvents +{ + [UsedImplicitly] + public sealed class StationEventSystem : EntitySystem + { + // Somewhat based off of TG's implementation of events + + public StationEvent CurrentEvent { get; private set; } + + public IReadOnlyCollection StationEvents => _stationEvents; + private List _stationEvents = new List(); + + private const float MinimumTimeUntilFirstEvent = 600; + + /// + /// How long until the next check for an event runs + /// + /// Default value is how long until first event is allowed + private float _timeUntilNextEvent = MinimumTimeUntilFirstEvent; + + /// + /// Whether random events can run + /// + /// If disabled while an event is running (even if admin run) it will disable it + public bool Enabled + { + get => _enabled; + set + { + if (_enabled == value) + { + return; + } + + _enabled = value; + CurrentEvent?.Shutdown(); + CurrentEvent = null; + } + } + + private bool _enabled = true; + + /// + /// Admins can get a list of all events available to run, regardless of whether their requirements have been met + /// + /// + public string GetEventNames() + { + StringBuilder result = new StringBuilder(); + + foreach (var stationEvent in _stationEvents) + { + result.Append(stationEvent.Name + "\n"); + } + + return result.ToString(); + } + + /// + /// Admins can forcibly run events by passing in the Name + /// + /// The exact string for Name, without localization + /// + public string RunEvent(string name) + { + // Could use a dictionary but it's such a minor thing, eh. + // Wasn't sure on whether to localize this given it's a command + var upperName = name.ToUpperInvariant(); + + foreach (var stationEvent in _stationEvents) + { + if (stationEvent.Name.ToUpperInvariant() != upperName) + { + continue; + } + + CurrentEvent?.Shutdown(); + CurrentEvent = stationEvent; + stationEvent.Startup(); + return Loc.GetString("Running event ") + stationEvent.Name; + } + + // I had string interpolation but lord it made it hard to read + return Loc.GetString("No event named ") + name; + } + + /// + /// Randomly run a valid event immediately, ignoring earlieststart + /// + /// + public string RunRandomEvent() + { + var availableEvents = AvailableEvents(true); + var randomEvent = FindEvent(availableEvents); + + if (randomEvent == null) + { + return Loc.GetString("No valid events available"); + } + + CurrentEvent?.Shutdown(); + CurrentEvent = randomEvent; + CurrentEvent.Startup(); + + return Loc.GetString("Running ") + randomEvent.Name; + } + + /// + /// Admins can stop the currently running event (if applicable) and reset the timer + /// + /// + public string StopEvent() + { + string resultText; + + if (CurrentEvent == null) + { + resultText = Loc.GetString("No event running currently"); + } + else + { + resultText = Loc.GetString("Stopped event ") + CurrentEvent.Name; + CurrentEvent.Shutdown(); + CurrentEvent = null; + } + + ResetTimer(); + return resultText; + } + + public override void Initialize() + { + base.Initialize(); + var reflectionManager = IoCManager.Resolve(); + var typeFactory = IoCManager.Resolve(); + + foreach (var type in reflectionManager.GetAllChildren(typeof(StationEvent))) + { + if (type.IsAbstract) continue; + + var stationEvent = (StationEvent) typeFactory.CreateInstance(type); + _stationEvents.Add(stationEvent); + } + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + if (!Enabled) + { + return; + } + + // Keep running the current event + if (CurrentEvent != null) + { + CurrentEvent.Update(frameTime); + + // Shutdown the event and set the timer for the next event + if (!CurrentEvent.Running) + { + CurrentEvent.Shutdown(); + CurrentEvent = null; + ResetTimer(); + } + + return; + } + + if (_timeUntilNextEvent > 0) + { + _timeUntilNextEvent -= frameTime; + return; + } + + // No point hammering this trying to find events if none are available + var stationEvent = FindEvent(AvailableEvents()); + if (stationEvent == null) + { + ResetTimer(); + } + else + { + CurrentEvent = stationEvent; + } + } + + /// + /// Reset the event timer once the event is done. + /// + private void ResetTimer() + { + var robustRandom = IoCManager.Resolve(); + // 5 - 15 minutes. TG does 3-10 but that's pretty frequent + _timeUntilNextEvent = robustRandom.Next(300, 900); + } + + /// + /// Pick a random event from the available events at this time, also considering their weightings. + /// + /// + private StationEvent FindEvent(List availableEvents) + { + if (availableEvents.Count == 0) + { + return null; + } + + var sumOfWeights = 0; + + foreach (var stationEvent in availableEvents) + { + sumOfWeights += (int) stationEvent.Weight; + } + + var robustRandom = IoCManager.Resolve(); + sumOfWeights = robustRandom.Next(sumOfWeights); + + foreach (var stationEvent in availableEvents) + { + sumOfWeights -= (int) stationEvent.Weight; + + if (sumOfWeights <= 0) + { + return stationEvent; + } + } + + return null; + } + + /// + /// Gets the events that have met their player count, time-until start, etc. + /// + /// + /// + private List AvailableEvents(bool ignoreEarliestStart = false) + { + TimeSpan currentTime; + var playerCount = IoCManager.Resolve().PlayerCount; + + // playerCount does a lock so we'll just keep the variable here + if (!ignoreEarliestStart) + { + currentTime = IoCManager.Resolve().CurTime; + } + else + { + currentTime = TimeSpan.Zero; + } + + var result = new List(); + + foreach (var stationEvent in _stationEvents) + { + if (CanRun(stationEvent, playerCount, currentTime)) + { + result.Add(stationEvent); + } + } + + return result; + } + + private bool CanRun(StationEvent stationEvent, int playerCount, TimeSpan currentTime) + { + if (stationEvent.MaxOccurrences.HasValue && stationEvent.Occurrences >= stationEvent.MaxOccurrences.Value) + { + return false; + } + + if (playerCount < stationEvent.MinimumPlayers) + { + return false; + } + + if (currentTime != TimeSpan.Zero && currentTime.TotalMinutes < stationEvent.EarliestStart) + { + return false; + } + + return true; + } + + public void ResettingCleanup() + { + if (CurrentEvent != null && CurrentEvent.Running) + { + CurrentEvent.Shutdown(); + CurrentEvent = null; + } + + foreach (var stationEvent in _stationEvents) + { + stationEvent.Occurrences = 0; + } + + _timeUntilNextEvent = MinimumTimeUntilFirstEvent; + } + + public override void Shutdown() + { + base.Shutdown(); + CurrentEvent?.Shutdown(); + } + } +} \ No newline at end of file diff --git a/Content.Server/GameObjects/EntitySystems/StomachSystem.cs b/Content.Server/GameObjects/EntitySystems/StomachSystem.cs index bbdc796c98..ffc16af206 100644 --- a/Content.Server/GameObjects/EntitySystems/StomachSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/StomachSystem.cs @@ -1,21 +1,16 @@ using Content.Server.GameObjects.Components.Nutrition; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { /// - /// Triggers digestion updates on + /// Triggers digestion updates on /// [UsedImplicitly] - public class StomachSystem : EntitySystem + internal sealed class StomachSystem : EntitySystem { private float _accumulatedFrameTime; - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(StomachComponent)); - } public override void Update(float frameTime) { @@ -23,12 +18,11 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction _accumulatedFrameTime += frameTime; if (_accumulatedFrameTime > 1.0f) { - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); - comp.OnUpdate(_accumulatedFrameTime); + component.OnUpdate(_accumulatedFrameTime); } - _accumulatedFrameTime = 0.0f; + _accumulatedFrameTime -= 1.0f; } } } diff --git a/Content.Server/GameObjects/EntitySystems/StorageSystem.cs b/Content.Server/GameObjects/EntitySystems/StorageSystem.cs index 5d8793c72e..b3f49605cb 100644 --- a/Content.Server/GameObjects/EntitySystems/StorageSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/StorageSystem.cs @@ -1,16 +1,15 @@ using System.Collections.Generic; -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.EntitySystems.Click; +using JetBrains.Annotations; using Robust.Server.GameObjects.EntitySystemMessages; using Robust.Server.Interfaces.Player; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { - class StorageSystem : EntitySystem + [UsedImplicitly] + internal sealed class StorageSystem : EntitySystem { private readonly List _sessionCache = new List(); @@ -19,16 +18,14 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction { SubscribeLocalEvent(HandleEntityRemovedFromContainer); SubscribeLocalEvent(HandleEntityInsertedIntoContainer); - - EntityQuery = new TypeEntityQuery(typeof(ServerStorageComponent)); } /// public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - CheckSubscribedEntities(entity); + CheckSubscribedEntities(component); } } @@ -52,9 +49,8 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction } } - private void CheckSubscribedEntities(IEntity entity) + private void CheckSubscribedEntities(ServerStorageComponent storageComp) { - var storageComp = entity.GetComponent(); // We have to cache the set of sessions because Unsubscribe modifies the original. _sessionCache.Clear(); @@ -63,8 +59,8 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction if (_sessionCache.Count == 0) return; - var storagePos = entity.Transform.WorldPosition; - var storageMap = entity.Transform.MapID; + var storagePos = storageComp.Owner.Transform.WorldPosition; + var storageMap = storageComp.Owner.Transform.MapID; foreach (var session in _sessionCache) { diff --git a/Content.Server/GameObjects/EntitySystems/StressTestMovementSystem.cs b/Content.Server/GameObjects/EntitySystems/StressTestMovementSystem.cs index 6539c17679..abdda79a09 100644 --- a/Content.Server/GameObjects/EntitySystems/StressTestMovementSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/StressTestMovementSystem.cs @@ -1,30 +1,21 @@ using System; using Content.Server.GameObjects.Components; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Maths; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class StressTestMovementSystem : EntitySystem + internal sealed class StressTestMovementSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(); - } - public override void Update(float frameTime) { base.Update(frameTime); - foreach (var entity in RelevantEntities) + foreach (var stressTest in ComponentManager.EntityQuery()) { - var stressTest = entity.GetComponent(); - var transform = entity.Transform; + var transform = stressTest.Owner.Transform; stressTest.Progress += frameTime; diff --git a/Content.Server/GameObjects/EntitySystems/StunSystem.cs b/Content.Server/GameObjects/EntitySystems/StunSystem.cs index ad5db08de4..6e3a4459ba 100644 --- a/Content.Server/GameObjects/EntitySystems/StunSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/StunSystem.cs @@ -1,27 +1,19 @@ using Content.Server.GameObjects.Components.Mobs; -using Content.Shared.GameObjects.Components.Mobs; -using Robust.Shared.GameObjects; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { - public class StunSystem : EntitySystem + [UsedImplicitly] + internal sealed class StunSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(StunnableComponent)); - } - public override void Update(float frameTime) { base.Update(frameTime); - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - entity.GetComponent().Update(frameTime); + component.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/TemperatureSystem.cs b/Content.Server/GameObjects/EntitySystems/TemperatureSystem.cs index a60c561bdf..f03b240a0b 100644 --- a/Content.Server/GameObjects/EntitySystems/TemperatureSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/TemperatureSystem.cs @@ -1,21 +1,16 @@ -using Content.Server.GameObjects; -using Robust.Shared.GameObjects; +using Content.Server.GameObjects.Components.Temperature; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { - class TemperatureSystem : EntitySystem + [UsedImplicitly] + internal sealed class TemperatureSystem : EntitySystem { - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(TemperatureComponent)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); comp.OnUpdate(frameTime); } } diff --git a/Content.Server/GameObjects/EntitySystems/ThirstSystem.cs b/Content.Server/GameObjects/EntitySystems/ThirstSystem.cs index fa2b860f70..b6047a273c 100644 --- a/Content.Server/GameObjects/EntitySystems/ThirstSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ThirstSystem.cs @@ -1,30 +1,24 @@ using Content.Server.GameObjects.Components.Nutrition; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class ThirstSystem : EntitySystem + internal sealed class ThirstSystem : EntitySystem { private float _accumulatedFrameTime; - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(ThirstComponent)); - } public override void Update(float frameTime) { _accumulatedFrameTime += frameTime; if (_accumulatedFrameTime > 1.0f) { - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); - comp.OnUpdate(_accumulatedFrameTime); + component.OnUpdate(_accumulatedFrameTime); } - _accumulatedFrameTime = 0.0f; + _accumulatedFrameTime -= 1.0f; } } } diff --git a/Content.Server/GameObjects/EntitySystems/TimedOverlayRemovalSystem.cs b/Content.Server/GameObjects/EntitySystems/TimedOverlayRemovalSystem.cs index ceb07b97b1..4994837d09 100644 --- a/Content.Server/GameObjects/EntitySystems/TimedOverlayRemovalSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/TimedOverlayRemovalSystem.cs @@ -1,7 +1,6 @@ using Content.Server.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Mobs; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; @@ -9,33 +8,24 @@ using Robust.Shared.IoC; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class TimedOverlayRemovalSystem : EntitySystem + internal sealed class TimedOverlayRemovalSystem : EntitySystem { -#pragma warning disable 649 - [Dependency] private readonly IGameTiming _gameTiming; -#pragma warning restore 649 - - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(ServerOverlayEffectsComponent)); - } + [Dependency] private readonly IGameTiming _gameTiming = default!; public override void Update(float frameTime) { base.Update(frameTime); - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - var effectsComponent = entity.GetComponent(); - foreach (var overlay in effectsComponent.ActiveOverlays.ToArray()) + + foreach (var overlay in component.ActiveOverlays.ToArray()) { if (overlay.TryGetOverlayParameter(out var parameter)) { if (parameter.StartedAt + parameter.Length <= _gameTiming.CurTime.TotalMilliseconds) { - effectsComponent.RemoveOverlay(overlay); + component.RemoveOverlay(overlay); } } } diff --git a/Content.Server/GameObjects/EntitySystems/TriggerSystem.cs b/Content.Server/GameObjects/EntitySystems/TriggerSystem.cs index 5a8bba0802..4519a54b7b 100644 --- a/Content.Server/GameObjects/EntitySystems/TriggerSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/TriggerSystem.cs @@ -5,7 +5,7 @@ using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Timers; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { /// /// This interface gives components behavior when being "triggered" by timer or other conditions diff --git a/Content.Server/GameObjects/EntitySystems/VaporSystem.cs b/Content.Server/GameObjects/EntitySystems/VaporSystem.cs index 65823a8bb0..c3e3b2ec5b 100644 --- a/Content.Server/GameObjects/EntitySystems/VaporSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/VaporSystem.cs @@ -1,5 +1,4 @@ using Content.Server.GameObjects.Components.Chemistry; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.EntitySystems diff --git a/Content.Server/GameObjects/EntitySystems/VerbSystem.cs b/Content.Server/GameObjects/EntitySystems/VerbSystem.cs index f2bac2c718..6de086226a 100644 --- a/Content.Server/GameObjects/EntitySystems/VerbSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/VerbSystem.cs @@ -1,15 +1,16 @@ using System.Collections.Generic; using System.Reflection; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Verbs; using Robust.Server.Interfaces.Player; +using Robust.Shared.Containers; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; +using Robust.Shared.Log; using static Content.Shared.GameObjects.EntitySystemMessages.VerbSystemMessages; -using Logger = Robust.Shared.Log.Logger; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { public class VerbSystem : EntitySystem { @@ -37,6 +38,12 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction var session = eventArgs.SenderSession; var userEntity = session.AttachedEntity; + if (userEntity == null) + { + Logger.Warning($"{nameof(UseVerb)} called by player {session} with no attached entity."); + return; + } + foreach (var (component, verb) in VerbUtility.GetVerbs(entity)) { if ($"{component.GetType()}:{verb.GetType()}" != use.VerbKey) @@ -44,14 +51,14 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction continue; } - if (verb.RequireInteractionRange) + if (verb.RequireInteractionRange && !VerbUtility.InVerbUseRange(userEntity, entity)) { - var distanceSquared = (userEntity.Transform.WorldPosition - entity.Transform.WorldPosition) - .LengthSquared; - if (distanceSquared > VerbUtility.InteractionRangeSquared) - { - break; - } + break; + } + + if (verb.BlockedByContainers && !userEntity.IsInSameOrNoContainer(entity)) + { + break; } verb.Activate(userEntity, component); @@ -65,14 +72,15 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction continue; } - if (globalVerb.RequireInteractionRange) + if (globalVerb.RequireInteractionRange && + !VerbUtility.InVerbUseRange(userEntity, entity)) { - var distanceSquared = (userEntity.Transform.WorldPosition - entity.Transform.WorldPosition) - .LengthSquared; - if (distanceSquared > VerbUtility.InteractionRangeSquared) - { - break; - } + break; + } + + if (globalVerb.BlockedByContainers && !userEntity.IsInSameOrNoContainer(entity)) + { + break; } globalVerb.Activate(userEntity, entity); @@ -92,6 +100,12 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction var userEntity = player.AttachedEntity; + if (userEntity == null) + { + Logger.Warning($"{nameof(UseVerb)} called by player {player} with no attached entity."); + return; + } + var data = new List(); //Get verbs, component dependent. foreach (var (component, verb) in VerbUtility.GetVerbs(entity)) @@ -99,6 +113,9 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction if (verb.RequireInteractionRange && !VerbUtility.InVerbUseRange(userEntity, entity)) continue; + if (verb.BlockedByContainers && !userEntity.IsInSameOrNoContainer(entity)) + continue; + var verbData = verb.GetData(userEntity, component); if (verbData.IsInvisible) continue; @@ -113,6 +130,9 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction if (globalVerb.RequireInteractionRange && !VerbUtility.InVerbUseRange(userEntity, entity)) continue; + if (globalVerb.BlockedByContainers && !userEntity.IsInSameOrNoContainer(entity)) + continue; + var verbData = globalVerb.GetData(userEntity, entity); if (verbData.IsInvisible) continue; diff --git a/Content.Server/GameObjects/EntitySystems/WelderSystem.cs b/Content.Server/GameObjects/EntitySystems/WelderSystem.cs index e35cb6144a..411e3546fc 100644 --- a/Content.Server/GameObjects/EntitySystems/WelderSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/WelderSystem.cs @@ -3,7 +3,7 @@ using System.Linq; using Content.Server.GameObjects.Components.Interactable; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { /// /// Despite the name, it's only really used for the welder logic in tools. Go figure. diff --git a/Content.Server/GameObjects/EntitySystems/WireHackingSystem.cs b/Content.Server/GameObjects/EntitySystems/WireHackingSystem.cs index a8da8aff92..f13ae1c0a4 100644 --- a/Content.Server/GameObjects/EntitySystems/WireHackingSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/WireHackingSystem.cs @@ -3,7 +3,7 @@ using Robust.Shared.GameObjects.Systems; using Robust.Shared.ViewVariables; using static Content.Shared.GameObjects.Components.SharedWiresComponent; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { public class WireHackingSystem : EntitySystem { diff --git a/Content.Server/GameTicking/GamePreset.cs b/Content.Server/GameTicking/GamePreset.cs index 0f9642184a..0e7ce86795 100644 --- a/Content.Server/GameTicking/GamePreset.cs +++ b/Content.Server/GameTicking/GamePreset.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; -using Robust.Server.Interfaces.Player; using Content.Shared.Preferences; +using Robust.Server.Interfaces.Player; namespace Content.Server.GameTicking { diff --git a/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs b/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs index 17def7d31a..bd2f43a13d 100644 --- a/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs +++ b/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs @@ -1,22 +1,18 @@ using Content.Server.GameTicking.GameRules; -using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameTicking; using Content.Server.Mobs.Roles; using Content.Server.Players; -using Content.Shared.Antags; using Robust.Server.Interfaces.Player; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Prototypes; using Robust.Shared.Random; -using System; using System.Collections.Generic; using System.Linq; +using Content.Shared.Roles; using Robust.Shared.Log; -using System.Threading.Tasks; -using Content.Shared.Preferences; - +using Robust.Shared.Maths; namespace Content.Server.GameTicking.GamePresets @@ -60,13 +56,13 @@ namespace Content.Server.GameTicking.GamePresets } } - var numTraitors = Math.Clamp(readyPlayers.Count % PlayersPerTraitor, + var numTraitors = FloatMath.Clamp(readyPlayers.Count % PlayersPerTraitor, MinTraitors, readyPlayers.Count); for (var i = 0; i < numTraitors; i++) { IPlayerSession traitor; - if(prefList.Count() == 0) + if(prefList.Count == 0) { traitor = _random.PickAndTake(list); Logger.InfoS("preset", "Insufficient preferred traitors, picking at random."); diff --git a/Content.Server/GameTicking/GameRules/RuleDeathMatch.cs b/Content.Server/GameTicking/GameRules/RuleDeathMatch.cs index ee841b599d..05b84f8a1b 100644 --- a/Content.Server/GameTicking/GameRules/RuleDeathMatch.cs +++ b/Content.Server/GameTicking/GameRules/RuleDeathMatch.cs @@ -1,6 +1,6 @@ using System; using System.Threading; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameTicking; using Robust.Server.Interfaces.Player; diff --git a/Content.Server/GameTicking/GameRules/RuleSuspicion.cs b/Content.Server/GameTicking/GameRules/RuleSuspicion.cs index 50f236072d..34ddc50f78 100644 --- a/Content.Server/GameTicking/GameRules/RuleSuspicion.cs +++ b/Content.Server/GameTicking/GameRules/RuleSuspicion.cs @@ -1,21 +1,14 @@ using System; -using System.Linq; using System.Threading; -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.Mobs; -using Content.Server.GameObjects.Components.Observer; using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameTicking; using Content.Server.Mobs.Roles; using Content.Server.Players; -using NFluidsynth; using Robust.Server.Interfaces.Player; -using Robust.Server.Player; -using Robust.Shared.Enums; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; -using Logger = Robust.Shared.Log.Logger; using Timer = Robust.Shared.Timers.Timer; namespace Content.Server.GameTicking.GameRules diff --git a/Content.Server/GameTicking/GameTicker.JobController.cs b/Content.Server/GameTicking/GameTicker.JobController.cs index fd72fe545a..271939e076 100644 --- a/Content.Server/GameTicking/GameTicker.JobController.cs +++ b/Content.Server/GameTicking/GameTicker.JobController.cs @@ -2,8 +2,8 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; -using Content.Shared.Jobs; using Content.Shared.Preferences; +using Content.Shared.Roles; using Robust.Server.Interfaces.Player; using Robust.Shared.Localization; using Robust.Shared.Random; diff --git a/Content.Server/GameTicking/GameTicker.cs b/Content.Server/GameTicking/GameTicker.cs index 8065da1507..bef68e027d 100644 --- a/Content.Server/GameTicking/GameTicker.cs +++ b/Content.Server/GameTicking/GameTicker.cs @@ -3,17 +3,17 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; -using Content.Server.GameObjects; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Access; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Markers; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Observer; using Content.Server.GameObjects.Components.PDA; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible; +using Content.Server.GameObjects.EntitySystems.StationEvents; using Content.Server.GameTicking.GamePresets; using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; @@ -24,8 +24,8 @@ using Content.Server.Players; using Content.Shared; using Content.Shared.Chat; using Content.Shared.GameObjects.Components.PDA; -using Content.Shared.Jobs; using Content.Shared.Preferences; +using Content.Shared.Roles; using Prometheus; using Robust.Server.Interfaces; using Robust.Server.Interfaces.Maps; @@ -264,7 +264,7 @@ namespace Content.Server.GameTicking // Spawn everybody in! foreach (var (player, job) in assignedJobs) { - SpawnPlayer(player, job, false); + SpawnPlayer(player, profiles[player.Name], job, false); } // Time to start the preset. @@ -344,7 +344,7 @@ namespace Content.Server.GameTicking if (LobbyEnabled) _playerJoinLobby(targetPlayer); else - SpawnPlayer(targetPlayer); + SpawnPlayerAsync(targetPlayer); } public void MakeObserve(IPlayerSession player) @@ -358,7 +358,7 @@ namespace Content.Server.GameTicking { if (!_playersInLobby.ContainsKey(player)) return; - SpawnPlayer(player, jobId); + SpawnPlayerAsync(player, jobId); } public void ToggleReady(IPlayerSession player, bool ready) @@ -621,14 +621,13 @@ namespace Content.Server.GameTicking _playerJoinLobby(player); } - // Reset pathing system EntitySystem.Get().ResettingCleanup(); EntitySystem.Get().ResettingCleanup(); + EntitySystem.Get().ResetLayouts(); + EntitySystem.Get().ResettingCleanup(); _spawnedPositions.Clear(); _manifest.Clear(); - - EntitySystem.Get().ResetLayouts(); } private void _preRoundSetup() @@ -685,13 +684,13 @@ namespace Content.Server.GameTicking return; } - SpawnPlayer(session); + SpawnPlayerAsync(session); } else { if (data.Mind.CurrentEntity == null) { - SpawnPlayer(session); + SpawnPlayerAsync(session); } else { @@ -745,14 +744,22 @@ namespace Content.Server.GameTicking }, _updateShutdownCts.Token); } - private async void SpawnPlayer(IPlayerSession session, string jobId = null, bool lateJoin = true) + private async void SpawnPlayerAsync(IPlayerSession session, string jobId = null, bool lateJoin = true) { - _playerJoinGame(session); - var character = (HumanoidCharacterProfile) (await _prefsManager .GetPreferencesAsync(session.SessionId.Username)) .SelectedCharacter; + SpawnPlayer(session, character, jobId, lateJoin); + } + + private void SpawnPlayer(IPlayerSession session, + HumanoidCharacterProfile character, + string jobId = null, + bool lateJoin = true) + { + _playerJoinGame(session); + var data = session.ContentData(); data.WipeMind(); data.Mind = new Mind(session.SessionId) diff --git a/Content.Server/GameTicking/GameTickerCommands.cs b/Content.Server/GameTicking/GameTickerCommands.cs index c2878dbd40..1d37695a78 100644 --- a/Content.Server/GameTicking/GameTickerCommands.cs +++ b/Content.Server/GameTicking/GameTickerCommands.cs @@ -1,12 +1,14 @@ using System; using System.Collections.Generic; using System.Linq; -using Content.Server.BodySystem; +using Content.Server.Health.BodySystem; +using Content.Server.Health.BodySystem.BodyPart; using Content.Server.Interfaces.GameTicking; using Content.Server.Players; -using Content.Shared.BodySystem; -using Content.Shared.Jobs; +using Content.Shared.Health.BodySystem; +using Content.Shared.Health.BodySystem.BodyPart; using Content.Shared.Maps; +using Content.Shared.Roles; using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects.Components.Transform; diff --git a/Content.Server/GlobalVerbs/ControlMobVerb.cs b/Content.Server/GlobalVerbs/ControlMobVerb.cs index 91786471fe..390094d763 100644 --- a/Content.Server/GlobalVerbs/ControlMobVerb.cs +++ b/Content.Server/GlobalVerbs/ControlMobVerb.cs @@ -1,7 +1,7 @@ using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Observer; using Content.Server.Players; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Verbs; using Robust.Server.Console; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.Interfaces.GameObjects; @@ -13,6 +13,7 @@ namespace Content.Server.GlobalVerbs public class ControlMobVerb : GlobalVerb { public override bool RequireInteractionRange => false; + public override bool BlockedByContainers => false; public override void GetData(IEntity user, IEntity target, VerbData data) { diff --git a/Content.Server/GlobalVerbs/PointingVerb.cs b/Content.Server/GlobalVerbs/PointingVerb.cs index b15ef785ad..d2952b60d6 100644 --- a/Content.Server/GlobalVerbs/PointingVerb.cs +++ b/Content.Server/GlobalVerbs/PointingVerb.cs @@ -1,6 +1,6 @@ using Content.Server.GameObjects.Components.Pointing; using Content.Server.GameObjects.EntitySystems; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Verbs; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/GlobalVerbs/PullingVerb.cs b/Content.Server/GlobalVerbs/PullingVerb.cs index 00f96df0a4..0b864eb075 100644 --- a/Content.Server/GlobalVerbs/PullingVerb.cs +++ b/Content.Server/GlobalVerbs/PullingVerb.cs @@ -1,8 +1,8 @@ using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Movement; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Items; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Physics; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects.Components; diff --git a/Content.Server/GlobalVerbs/RejuvenateVerb.cs b/Content.Server/GlobalVerbs/RejuvenateVerb.cs index 3c2c69da6f..5f074e085b 100644 --- a/Content.Server/GlobalVerbs/RejuvenateVerb.cs +++ b/Content.Server/GlobalVerbs/RejuvenateVerb.cs @@ -1,7 +1,7 @@ -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Nutrition; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Verbs; using Robust.Server.Console; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.Interfaces.GameObjects; @@ -16,6 +16,7 @@ namespace Content.Server.GlobalVerbs class RejuvenateVerb : GlobalVerb { public override bool RequireInteractionRange => false; + public override bool BlockedByContainers => false; public override void GetData(IEntity user, IEntity target, VerbData data) { diff --git a/Content.Server/Health/BodySystem/BodyManagerComponent.cs b/Content.Server/Health/BodySystem/BodyManagerComponent.cs index 4533870859..c60ed9091c 100644 --- a/Content.Server/Health/BodySystem/BodyManagerComponent.cs +++ b/Content.Server/Health/BodySystem/BodyManagerComponent.cs @@ -1,16 +1,22 @@ -using Robust.Shared.GameObjects; +using System; +using System.Collections.Generic; +using System.Linq; +using Content.Server.Health.BodySystem.BodyPart; +using Content.Server.Health.BodySystem.BodyPreset; +using Content.Server.Health.BodySystem.BodyTemplate; +using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Shared.Health.BodySystem; +using Content.Shared.Health.BodySystem.BodyPart; +using Content.Shared.Health.BodySystem.BodyPreset; +using Content.Shared.Health.BodySystem.BodyTemplate; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using System; -using System.Collections.Generic; -using Content.Shared.BodySystem; using Robust.Shared.ViewVariables; -using Robust.Shared.Interfaces.GameObjects; -using System.Linq; -using Content.Server.Interfaces.GameObjects.Components.Interaction; -namespace Content.Server.BodySystem { +namespace Content.Server.Health.BodySystem { /// /// Component representing a collection of BodyParts attached to each other. @@ -24,23 +30,23 @@ namespace Content.Server.BodySystem { #pragma warning restore [ViewVariables] - private BodyTemplate _template; + private BodyTemplate.BodyTemplate _template; [ViewVariables] private string _presetName; [ViewVariables] - private Dictionary _partDictionary = new Dictionary(); + private Dictionary _partDictionary = new Dictionary(); /// /// The that this BodyManagerComponent is adhering to. /// - public BodyTemplate Template => _template; + public BodyTemplate.BodyTemplate Template => _template; /// /// Maps slot name to the object filling it (if there is one). /// - public Dictionary PartDictionary => _partDictionary; + public Dictionary PartDictionary => _partDictionary; /// /// List of all occupied slots in this body, taken from the values of _parts. @@ -67,7 +73,7 @@ namespace Content.Server.BodySystem { /// /// List of all BodyParts in this body, taken from the keys of _parts. /// - public IEnumerable Parts { + public IEnumerable Parts { get { return _partDictionary.Values; } @@ -77,14 +83,14 @@ namespace Content.Server.BodySystem { /// Recursive search that returns whether a given is connected to the center . /// Not efficient (O(n^2)), but most bodies don't have a ton of BodyParts. /// - public bool ConnectedToCenterPart(BodyPart target) { + public bool ConnectedToCenterPart(BodyPart.BodyPart target) { List searchedSlots = new List { }; if (TryGetSlotName(target, out string result)) return false; return ConnectedToCenterPartRecursion(searchedSlots, result); } private bool ConnectedToCenterPartRecursion(List searchedSlots, string slotName) { - TryGetBodyPart(slotName, out BodyPart part); + TryGetBodyPart(slotName, out BodyPart.BodyPart part); if (part != null && part == GetCenterBodyPart()) return true; searchedSlots.Add(slotName); @@ -101,8 +107,8 @@ namespace Content.Server.BodySystem { /// /// Returns the central of this body based on the . For humans, this is the torso. Returns null if not found. /// - public BodyPart GetCenterBodyPart() { - _partDictionary.TryGetValue(_template.CenterSlot, out BodyPart center); + public BodyPart.BodyPart GetCenterBodyPart() { + _partDictionary.TryGetValue(_template.CenterSlot, out BodyPart.BodyPart center); return center; } @@ -119,7 +125,7 @@ namespace Content.Server.BodySystem { /// Grabs the in the given slotName if there is one. Returns true if a is found, /// false otherwise. If false, result will be null. /// - public bool TryGetBodyPart(string slotName, out BodyPart result) { + public bool TryGetBodyPart(string slotName, out BodyPart.BodyPart result) { return _partDictionary.TryGetValue(slotName, out result); } @@ -127,7 +133,7 @@ namespace Content.Server.BodySystem { /// Grabs the slotName that the given resides in. Returns true if the is /// part of this body and a slot is found, false otherwise. If false, result will be null. /// - public bool TryGetSlotName(BodyPart part, out string result) { + public bool TryGetSlotName(BodyPart.BodyPart part, out string result) { result = _partDictionary.FirstOrDefault(x => x.Value == part).Key; //We enforce that there is only one of each value in the dictionary, so we can iterate through the dictionary values to get the key from there. return result == null; } @@ -150,15 +156,15 @@ namespace Content.Server.BodySystem { /// /// Grabs all occupied slots connected to the given slot, regardless of whether the target slot is occupied. Returns true if successful, false if there was an error or no connected BodyParts were found. /// - public bool TryGetBodyPartConnections(string slotName, out List result) + public bool TryGetBodyPartConnections(string slotName, out List result) { result = null; if (!_template.Connections.TryGetValue(slotName, out List connections)) return false; - List toReturn = new List(); + List toReturn = new List(); foreach (string connection in connections) { - if (TryGetBodyPart(connection, out BodyPart bodyPartResult)) + if (TryGetBodyPart(connection, out BodyPart.BodyPart bodyPartResult)) { toReturn.Add(bodyPartResult); } @@ -192,7 +198,7 @@ namespace Content.Server.BodySystem { throw new InvalidOperationException("No BodyTemplatePrototype was found with the name " + template + " while loading a BodyTemplate!"); //Should never happen unless you fuck up the prototype. } - _template = new BodyTemplate(templateData); + _template = new BodyTemplate.BodyTemplate(templateData); }, () => _template.Name); @@ -206,7 +212,7 @@ namespace Content.Server.BodySystem { throw new InvalidOperationException("No BodyPresetPrototype was found with the name " + preset + " while loading a BodyPreset!"); //Should never happen unless you fuck up the prototype. } - LoadBodyPreset(new BodyPreset(presetData)); + LoadBodyPreset(new BodyPreset.BodyPreset(presetData)); }, () => _presetName); } @@ -214,7 +220,7 @@ namespace Content.Server.BodySystem { /// /// Loads the given - forcefully changes all limbs found in both the preset and this template! /// - public void LoadBodyPreset(BodyPreset preset) + public void LoadBodyPreset(BodyPreset.BodyPreset preset) { _presetName = preset.Name; @@ -232,7 +238,7 @@ namespace Content.Server.BodySystem { BodyPartRemoved(removedPart, slotName); } - var addedPart = new BodyPart(newPartData); + var addedPart = new BodyPart.BodyPart(newPartData); _partDictionary.Add(slotName, addedPart); //Add a new BodyPart with the BodyPartPrototype as a baseline to our BodyComponent. BodyPartAdded(addedPart, slotName); } @@ -243,7 +249,7 @@ namespace Content.Server.BodySystem { /// if there is a slot for them in both . /// public void ChangeBodyTemplate(BodyTemplatePrototype newTemplate) { - foreach (KeyValuePair part in _partDictionary) { + foreach (KeyValuePair part in _partDictionary) { //TODO: Make this work. } } @@ -251,8 +257,8 @@ namespace Content.Server.BodySystem { /// /// Grabs all BodyParts of the given type in this body. /// - public List GetBodyPartsOfType(BodyPartType type) { - List toReturn = new List(); + public List GetBodyPartsOfType(BodyPartType type) { + List toReturn = new List(); foreach (var (slotName, bodyPart) in _partDictionary) { if (bodyPart.PartType == type) toReturn.Add(bodyPart); @@ -265,11 +271,11 @@ namespace Content.Server.BodySystem { /// /// Installs the given into the given slot. Returns true if successful, false otherwise. /// - public bool InstallBodyPart(BodyPart part, string slotName) + public bool InstallBodyPart(BodyPart.BodyPart part, string slotName) { if (!SlotExists(slotName)) //Make sure the given slot exists return false; - if (TryGetBodyPart(slotName, out BodyPart result)) //And that nothing is in it + if (TryGetBodyPart(slotName, out BodyPart.BodyPart result)) //And that nothing is in it return false; _partDictionary.Add(slotName, part); BodyPartAdded(part, slotName); @@ -293,7 +299,7 @@ namespace Content.Server.BodySystem { /// Disconnects the given reference, potentially dropping other BodyParts /// if they were hanging off it. Returns the IEntity representing the dropped BodyPart. /// - public IEntity DropBodyPart(BodyPart part) + public IEntity DropBodyPart(BodyPart.BodyPart part) { if (!_partDictionary.ContainsValue(part)) return null; @@ -305,7 +311,7 @@ namespace Content.Server.BodySystem { { foreach (string connectionName in connections) //This loop is an unoptimized travesty. TODO: optimize to be less shit { - if (TryGetBodyPart(connectionName, out BodyPart result) && !ConnectedToCenterPart(result)) + if (TryGetBodyPart(connectionName, out BodyPart.BodyPart result) && !ConnectedToCenterPart(result)) { DisconnectBodyPartByName(connectionName, true); } @@ -321,7 +327,7 @@ namespace Content.Server.BodySystem { /// /// Disconnects the given reference, potentially dropping other BodyParts if they were hanging off it. /// - public void DisconnectBodyPart(BodyPart part, bool dropEntity) { + public void DisconnectBodyPart(BodyPart.BodyPart part, bool dropEntity) { if (!_partDictionary.ContainsValue(part)) return; if (part != null) { @@ -335,7 +341,7 @@ namespace Content.Server.BodySystem { { foreach (string connectionName in connections) //This loop is an unoptimized travesty. TODO: optimize to be less shit { - if (TryGetBodyPart(connectionName, out BodyPart result) && !ConnectedToCenterPart(result)) { + if (TryGetBodyPart(connectionName, out BodyPart.BodyPart result) && !ConnectedToCenterPart(result)) { DisconnectBodyPartByName(connectionName, dropEntity); } } @@ -351,7 +357,7 @@ namespace Content.Server.BodySystem { /// Internal string version of DisconnectBodyPart for performance purposes. Yes, it is actually more performant. /// private void DisconnectBodyPartByName(string name, bool dropEntity) { - if (!TryGetBodyPart(name, out BodyPart part)) + if (!TryGetBodyPart(name, out BodyPart.BodyPart part)) return; if (part != null) { if (_partDictionary.Remove(name, out var partRemoved)) @@ -361,7 +367,7 @@ namespace Content.Server.BodySystem { if (TryGetBodyPartConnections(name, out List connections)) { foreach (string connectionName in connections) { - if (TryGetBodyPart(connectionName, out BodyPart result) && !ConnectedToCenterPart(result)) { + if (TryGetBodyPart(connectionName, out BodyPart.BodyPart result) && !ConnectedToCenterPart(result)) { DisconnectBodyPartByName(connectionName, dropEntity); } } @@ -373,7 +379,7 @@ namespace Content.Server.BodySystem { } } - private void BodyPartAdded(BodyPart part, string slotName) + private void BodyPartAdded(BodyPart.BodyPart part, string slotName) { var argsAdded = new BodyPartAddedEventArgs(part, slotName); @@ -383,7 +389,7 @@ namespace Content.Server.BodySystem { } } - private void BodyPartRemoved(BodyPart part, string slotName) + private void BodyPartRemoved(BodyPart.BodyPart part, string slotName) { var args = new BodyPartRemovedEventArgs(part, slotName); diff --git a/Content.Server/Health/BodySystem/BodyPart/BodyPart.cs b/Content.Server/Health/BodySystem/BodyPart/BodyPart.cs index 32e4db2681..92addbbebd 100644 --- a/Content.Server/Health/BodySystem/BodyPart/BodyPart.cs +++ b/Content.Server/Health/BodySystem/BodyPart/BodyPart.cs @@ -1,16 +1,19 @@ -using Content.Shared.BodySystem; +using System; +using System.Collections.Generic; +using Content.Server.Health.BodySystem.Mechanism; +using Content.Server.Health.BodySystem.Surgery.Surgeon; +using Content.Server.Health.BodySystem.Surgery.SurgeryData; +using Content.Shared.Health.BodySystem; +using Content.Shared.Health.BodySystem.BodyPart; +using Content.Shared.Health.BodySystem.Mechanism; +using Content.Shared.Health.DamageContainer; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Serialization; using Robust.Shared.IoC; using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using System; -using System.Collections.Generic; - - -namespace Content.Server.BodySystem +namespace Content.Server.Health.BodySystem.BodyPart { @@ -25,7 +28,7 @@ namespace Content.Server.BodySystem private ISurgeryData _surgeryData; [ViewVariables] - private List _mechanisms = new List(); + private List _mechanisms = new List(); [ViewVariables] private int _sizeUsed = 0; @@ -44,55 +47,55 @@ namespace Content.Server.BodySystem /// /// Path to the RSI that represents this BodyPart. - /// + /// [ViewVariables] public string RSIPath { get; set; } /// /// RSI state that represents this BodyPart. - /// + /// [ViewVariables] public string RSIState { get; set; } /// - /// that this BodyPart is considered to be. For example, BodyPartType.Arm. + /// that this BodyPart is considered to be. For example, BodyPartType.Arm. /// [ViewVariables] public BodyPartType PartType { get; set; } /// /// Max HP of this BodyPart. - /// + /// [ViewVariables] public int MaxDurability { get; set; } /// /// Current HP of this BodyPart based on sum of all damage types. - /// + /// [ViewVariables] public int CurrentDurability => MaxDurability - CurrentDamages.Damage; /// /// Current damage dealt to this BodyPart. - /// + /// [ViewVariables] public AbstractDamageContainer CurrentDamages { get; set; } /// /// At what HP this BodyPartis completely destroyed. - /// + /// [ViewVariables] public int DestroyThreshold { get; set; } /// /// Armor of this BodyPart against attacks. - /// + /// [ViewVariables] public float Resistance { get; set; } /// /// Determines many things: how many mechanisms can be fit inside this BodyPart, whether a body can fit through tiny crevices, etc. - /// + /// [ViewVariables] public int Size { get; set; } @@ -112,7 +115,7 @@ namespace Content.Server.BodySystem /// List of all Mechanisms currently inside this BodyPart. /// [ViewVariables] - public List Mechanisms => _mechanisms; + public List Mechanisms => _mechanisms; public BodyPart() { } @@ -139,7 +142,7 @@ namespace Content.Server.BodySystem /// /// Returns whether the given can be installed on this BodyPart. /// - public bool CanInstallMechanism(Mechanism mechanism) + public bool CanInstallMechanism(Mechanism.Mechanism mechanism) { if (_sizeUsed + mechanism.Size > Size) return false; //No space @@ -149,7 +152,7 @@ namespace Content.Server.BodySystem /// /// Attempts to add a . Returns true if successful, false if there was an error (e.g. not enough room in BodyPart). Call InstallDroppedMechanism instead if you want to easily install an IEntity with a DroppedMechanismComponent. /// - public bool TryInstallMechanism(Mechanism mechanism) + public bool TryInstallMechanism(Mechanism.Mechanism mechanism) { if (CanInstallMechanism(mechanism)) { @@ -173,8 +176,8 @@ namespace Content.Server.BodySystem /// /// Tries to remove the given reference from this BodyPart. Returns null if there was an error in spawning the entity or removing the mechanism, otherwise returns a reference to the on the newly spawned entity. - /// - public DroppedMechanismComponent DropMechanism(IEntity dropLocation, Mechanism mechanismTarget) + /// + public DroppedMechanismComponent DropMechanism(IEntity dropLocation, Mechanism.Mechanism mechanismTarget) { if (!_mechanisms.Contains(mechanismTarget)) return null; @@ -189,8 +192,8 @@ namespace Content.Server.BodySystem /// /// Tries to destroy the given in the given BodyPart. Returns false if there was an error, true otherwise. Does NOT spawn a dropped entity. - /// - public bool DestroyMechanism(BodyPart bodyPartTarget, Mechanism mechanismTarget) + /// + public bool DestroyMechanism(BodyPart bodyPartTarget, Mechanism.Mechanism mechanismTarget) { if (!_mechanisms.Contains(mechanismTarget)) return false; @@ -225,7 +228,7 @@ namespace Content.Server.BodySystem /// /// Loads the given - current data on this will be overwritten! - /// + /// public virtual void LoadFromPrototype(BodyPartPrototype data) { Name = data.Name; @@ -249,7 +252,7 @@ namespace Content.Server.BodySystem { throw new InvalidOperationException("No MechanismPrototype was found with the name " + mechanismPrototypeID + " while loading a BodyPartPrototype!"); } - _mechanisms.Add(new Mechanism(mechanismData)); + _mechanisms.Add(new Mechanism.Mechanism(mechanismData)); } } diff --git a/Content.Server/Health/BodySystem/BodyPart/DroppedBodyPartComponent.cs b/Content.Server/Health/BodySystem/BodyPart/DroppedBodyPartComponent.cs index 2f520c4449..a49ba2c656 100644 --- a/Content.Server/Health/BodySystem/BodyPart/DroppedBodyPartComponent.cs +++ b/Content.Server/Health/BodySystem/BodyPart/DroppedBodyPartComponent.cs @@ -1,19 +1,20 @@ -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using System.Collections.Generic; -using Content.Shared.BodySystem; -using Robust.Shared.ViewVariables; +using System.Collections.Generic; using System.Globalization; +using System.Linq; +using Content.Shared.Health.BodySystem; +using Content.Shared.Health.BodySystem.Surgery; +using Content.Shared.Interfaces; +using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; -using Robust.Shared.Interfaces.GameObjects; using Robust.Server.GameObjects.Components.UserInterface; using Robust.Server.Interfaces.Player; -using Content.Shared.Interfaces; -using System.Linq; -using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; using Robust.Shared.Localization; +using Robust.Shared.ViewVariables; -namespace Content.Server.BodySystem +namespace Content.Server.Health.BodySystem.BodyPart { /// diff --git a/Content.Server/Health/BodySystem/BodyPreset/BodyPreset.cs b/Content.Server/Health/BodySystem/BodyPreset/BodyPreset.cs index cf342504c8..83bd17a1b8 100644 --- a/Content.Server/Health/BodySystem/BodyPreset/BodyPreset.cs +++ b/Content.Server/Health/BodySystem/BodyPreset/BodyPreset.cs @@ -1,8 +1,10 @@ using System.Collections.Generic; -using Content.Shared.BodySystem; +using Content.Server.Health.BodySystem.BodyPart; +using Content.Shared.Health.BodySystem.BodyPart; +using Content.Shared.Health.BodySystem.BodyPreset; using Robust.Shared.ViewVariables; -namespace Content.Server.BodySystem { +namespace Content.Server.Health.BodySystem.BodyPreset { /// /// Stores data on what BodyPartPrototypes should fill a BodyTemplate. Used for loading complete body presets, like a "basic human" with all human limbs. @@ -16,7 +18,7 @@ namespace Content.Server.BodySystem { /// /// Maps a template slot to the ID of the that should fill it. E.g. "right arm" : "BodyPart.arm.basic_human". - /// + /// [ViewVariables] public Dictionary PartIDs => _partIDs; diff --git a/Content.Server/Health/BodySystem/BodyScanner/BodyScannerComponent.cs b/Content.Server/Health/BodySystem/BodyScanner/BodyScannerComponent.cs index 2274cf790d..ee0f7a34c6 100644 --- a/Content.Server/Health/BodySystem/BodyScanner/BodyScannerComponent.cs +++ b/Content.Server/Health/BodySystem/BodyScanner/BodyScannerComponent.cs @@ -1,11 +1,11 @@ -using Robust.Server.GameObjects.Components.UserInterface; +using System.Collections.Generic; +using Content.Shared.Health.BodySystem.BodyScanner; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Server.GameObjects.Components.UserInterface; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; -using System.Collections.Generic; -using Content.Shared.BodySystem; -using Content.Shared.Interfaces.GameObjects.Components; -namespace Content.Server.BodySystem +namespace Content.Server.Health.BodySystem.BodyScanner { [RegisterComponent] [ComponentReference(typeof(IActivate))] @@ -45,7 +45,7 @@ namespace Content.Server.BodySystem /// /// Copy BodyTemplate and BodyPart data into a common data class that the client can read. /// - private BodyScannerInterfaceState PrepareBodyScannerInterfaceState(BodyTemplate template, Dictionary bodyParts) + private BodyScannerInterfaceState PrepareBodyScannerInterfaceState(BodyTemplate.BodyTemplate template, Dictionary bodyParts) { Dictionary partsData = new Dictionary(); foreach (var(slotname, bpart) in bodyParts) { diff --git a/Content.Server/Health/BodySystem/BodyTemplate/BodyTemplate.cs b/Content.Server/Health/BodySystem/BodyTemplate/BodyTemplate.cs index 30f85eb7c2..a5a7498543 100644 --- a/Content.Server/Health/BodySystem/BodyTemplate/BodyTemplate.cs +++ b/Content.Server/Health/BodySystem/BodyTemplate/BodyTemplate.cs @@ -1,14 +1,15 @@ using System; using System.Collections.Generic; -using Content.Shared.BodySystem; +using Content.Shared.Health.BodySystem; +using Content.Shared.Health.BodySystem.BodyTemplate; using Robust.Shared.ViewVariables; -namespace Content.Server.BodySystem { +namespace Content.Server.Health.BodySystem.BodyTemplate { /// /// This class is a data capsule representing the standard format of a . For instance, the "humanoid" BodyTemplate /// defines two arms, each connected to a torso and so on. Capable of loading data from a . - /// + /// public class BodyTemplate { [ViewVariables] @@ -16,13 +17,13 @@ namespace Content.Server.BodySystem { /// /// The name of the center BodyPart. For humans, this is set to "torso". Used in many calculations. - /// + /// [ViewVariables] public string CenterSlot { get; set; } /// /// Maps all parts on this template to its BodyPartType. For instance, "right arm" is mapped to "BodyPartType.arm" on the humanoid template. - /// + /// [ViewVariables] public Dictionary Slots { get; set; } @@ -30,7 +31,7 @@ namespace Content.Server.BodySystem { /// Maps limb name to the list of their connections to other limbs. For instance, on the humanoid template "torso" is mapped to a list containing "right arm", "left arm", /// "left leg", and "right leg". This is mapped both ways during runtime, but in the prototype only one way has to be defined, i.e., "torso" to "left arm" will automatically /// map "left arm" to "torso". - /// + /// [ViewVariables] public Dictionary> Connections { get; set; } @@ -54,7 +55,7 @@ namespace Content.Server.BodySystem { /// /// Returns whether the given slot exists in this BodyTemplate. - /// + /// public bool SlotExists(string slotName) { foreach (string slot in Slots.Keys) @@ -67,7 +68,7 @@ namespace Content.Server.BodySystem { /// /// Returns an integer unique to this BodyTemplate's layout. It does not matter in which order the Connections or Slots are defined. - /// + /// public override int GetHashCode() { int slotsHash = 0; diff --git a/Content.Server/Health/BodySystem/IBodyPartContainer.cs b/Content.Server/Health/BodySystem/IBodyPartContainer.cs index b78c925c00..c23b8ec1f5 100644 --- a/Content.Server/Health/BodySystem/IBodyPartContainer.cs +++ b/Content.Server/Health/BodySystem/IBodyPartContainer.cs @@ -1,9 +1,6 @@ -using Robust.Shared.Interfaces.GameObjects; -using System; -using System.Collections.Generic; -using System.Text; +using Content.Server.Health.BodySystem.Surgery.SurgeryData; -namespace Content.Server.BodySystem +namespace Content.Server.Health.BodySystem { /// diff --git a/Content.Server/Health/BodySystem/Mechanism/DroppedMechanismComponent.cs b/Content.Server/Health/BodySystem/Mechanism/DroppedMechanismComponent.cs index 4a9faafe83..788082c0d9 100644 --- a/Content.Server/Health/BodySystem/Mechanism/DroppedMechanismComponent.cs +++ b/Content.Server/Health/BodySystem/Mechanism/DroppedMechanismComponent.cs @@ -1,22 +1,24 @@ -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; -using System; +using System; using System.Collections.Generic; -using Content.Shared.BodySystem; -using Robust.Shared.ViewVariables; using System.Globalization; -using Robust.Server.GameObjects; -using Robust.Shared.Log; +using Content.Server.Health.BodySystem.BodyPart; +using Content.Shared.Health.BodySystem.Mechanism; +using Content.Shared.Health.BodySystem.Surgery; using Content.Shared.Interfaces; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.UserInterface; using Robust.Server.Interfaces.Player; +using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.IoC; using Robust.Shared.Localization; +using Robust.Shared.Log; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; -namespace Content.Server.BodySystem { +namespace Content.Server.Health.BodySystem.Mechanism { /// /// Component representing a dropped, tangible entity. @@ -138,7 +140,7 @@ namespace Content.Server.BodySystem { { _sharedNotifyManager.PopupMessage(_bodyManagerComponentCache.Owner, _performerCache, Loc.GetString("You see no useful way to use the {0} anymore.", Owner.Name)); } - BodyPart target = targetObject as BodyPart; + BodyPart.BodyPart target = targetObject as BodyPart.BodyPart; if (!target.TryInstallDroppedMechanism(this)) { _sharedNotifyManager.PopupMessage(_bodyManagerComponentCache.Owner, _performerCache, Loc.GetString("You can't fit it in!")); diff --git a/Content.Server/Health/BodySystem/Mechanism/Mechanism.cs b/Content.Server/Health/BodySystem/Mechanism/Mechanism.cs index 0cceeb4a87..1ea508a782 100644 --- a/Content.Server/Health/BodySystem/Mechanism/Mechanism.cs +++ b/Content.Server/Health/BodySystem/Mechanism/Mechanism.cs @@ -1,15 +1,9 @@ -using System; -using System.Collections.Generic; -using Content.Shared.BodySystem; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; +using Content.Server.Health.BodySystem.BodyPart; +using Content.Shared.Health.BodySystem; +using Content.Shared.Health.BodySystem.Mechanism; using Robust.Shared.ViewVariables; -using YamlDotNet.RepresentationModel; - - - -namespace Content.Server.BodySystem { +namespace Content.Server.Health.BodySystem.Mechanism { /// /// Data class representing a persistent item inside a . This includes livers, eyes, cameras, brains, explosive implants, binary communicators, and other things. @@ -21,55 +15,55 @@ namespace Content.Server.BodySystem { /// /// Professional description of the Mechanism. - /// + /// [ViewVariables] public string Description { get; set; } /// - /// The message to display upon examining a mob with this Mechanism installed. If the string is empty (""), no message will be displayed. - /// + /// The message to display upon examining a mob with this Mechanism installed. If the string is empty (""), no message will be displayed. + /// [ViewVariables] public string ExamineMessage { get; set; } /// /// Path to the RSI that represents this Mechanism. - /// + /// [ViewVariables] public string RSIPath { get; set; } /// /// RSI state that represents this Mechanism. - /// + /// [ViewVariables] public string RSIState { get; set; } /// /// Max HP of this Mechanism. - /// + /// [ViewVariables] public int MaxDurability { get; set; } /// /// Current HP of this Mechanism. - /// + /// [ViewVariables] public int CurrentDurability { get; set; } /// /// At what HP this Mechanism is completely destroyed. - /// + /// [ViewVariables] public int DestroyThreshold { get; set; } /// /// Armor of this Mechanism against attacks. - /// + /// [ViewVariables] public int Resistance { get; set; } /// /// Determines a handful of things - mostly whether this Mechanism can fit into a BodyPart. - /// + /// [ViewVariables] public int Size { get; set; } @@ -91,7 +85,7 @@ namespace Content.Server.BodySystem { /// /// Loads the given - current data on this Mechanism will be overwritten! - /// + /// public void LoadFromPrototype(MechanismPrototype data) { Name = data.Name; diff --git a/Content.Server/Health/BodySystem/Surgery/Surgeon/ISurgeon.cs b/Content.Server/Health/BodySystem/Surgery/Surgeon/ISurgeon.cs index 75078e0834..6d586b01e5 100644 --- a/Content.Server/Health/BodySystem/Surgery/Surgeon/ISurgeon.cs +++ b/Content.Server/Health/BodySystem/Surgery/Surgeon/ISurgeon.cs @@ -1,30 +1,29 @@ -using Content.Shared.BodySystem; +using System.Collections.Generic; +using Content.Server.Health.BodySystem.Surgery.SurgeryData; using Robust.Shared.Interfaces.GameObjects; -using System; -using System.Collections.Generic; -namespace Content.Server.BodySystem +namespace Content.Server.Health.BodySystem.Surgery.Surgeon { /// /// Interface representing an entity capable of performing surgery (performing operations on an class). /// For an example see , which inherits from this class. - /// + /// public interface ISurgeon { /// /// How long it takes to perform a single surgery step (in seconds). - /// + /// public float BaseOperationTime { get; set; } - - public delegate void MechanismRequestCallback(Mechanism target, IBodyPartContainer container, ISurgeon surgeon, IEntity performer); + + public delegate void MechanismRequestCallback(Mechanism.Mechanism target, IBodyPartContainer container, ISurgeon surgeon, IEntity performer); /// /// When performing a surgery, the may sometimes require selecting from a set of Mechanisms to operate on. /// This function is called in that scenario, and it is expected that you call the callback with one mechanism from the provided list. - /// - public void RequestMechanism(List options, MechanismRequestCallback callback); + /// + public void RequestMechanism(List options, MechanismRequestCallback callback); } } diff --git a/Content.Server/Health/BodySystem/Surgery/Surgeon/SurgeryToolComponent.cs b/Content.Server/Health/BodySystem/Surgery/Surgeon/SurgeryToolComponent.cs index f180c5501a..42e9e3f2ca 100644 --- a/Content.Server/Health/BodySystem/Surgery/Surgeon/SurgeryToolComponent.cs +++ b/Content.Server/Health/BodySystem/Surgery/Surgeon/SurgeryToolComponent.cs @@ -1,7 +1,10 @@ using System; using System.Collections.Generic; -using Content.Shared.BodySystem; +using Content.Server.Health.BodySystem.BodyPart; +using Content.Server.Health.BodySystem.Mechanism; using Content.Shared.GameObjects; +using Content.Shared.Health.BodySystem; +using Content.Shared.Health.BodySystem.Surgery; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; @@ -14,7 +17,7 @@ using Robust.Shared.Localization; using Robust.Shared.Log; using Robust.Shared.Serialization; -namespace Content.Server.BodySystem +namespace Content.Server.Health.BodySystem.Surgery.Surgeon { //TODO: add checks to close UI if user walks too far away from tool or target. @@ -106,10 +109,10 @@ namespace Content.Server.BodySystem } } - public void RequestMechanism(List options, ISurgeon.MechanismRequestCallback callback) + public void RequestMechanism(List options, ISurgeon.MechanismRequestCallback callback) { var toSend = new Dictionary (); - foreach (Mechanism mechanism in options) + foreach (Mechanism.Mechanism mechanism in options) { _optionsCache.Add(_idHash, mechanism); toSend.Add(mechanism.Name, _idHash++); @@ -181,7 +184,7 @@ namespace Content.Server.BodySystem { SendNoUsefulWayToUseAnymorePopup(); } - BodyPart target = targetObject as BodyPart; + BodyPart.BodyPart target = targetObject as BodyPart.BodyPart; if (!target.AttemptSurgery(_surgeryType, _bodyManagerComponentCache, this, _performerCache)) { SendNoUsefulWayToUseAnymorePopup(); @@ -198,7 +201,7 @@ namespace Content.Server.BodySystem { SendNoUsefulWayToUseAnymorePopup(); } - Mechanism target = targetObject as Mechanism; + Mechanism.Mechanism target = targetObject as Mechanism.Mechanism; CloseSurgeryUI(_performerCache.GetComponent().playerSession); _callbackCache(target, _bodyManagerComponentCache, this, _performerCache); } diff --git a/Content.Server/Health/BodySystem/Surgery/SurgeryData/BiologicalSurgeryData.cs b/Content.Server/Health/BodySystem/Surgery/SurgeryData/BiologicalSurgeryData.cs index b0123f17bd..bb3917a7dc 100644 --- a/Content.Server/Health/BodySystem/Surgery/SurgeryData/BiologicalSurgeryData.cs +++ b/Content.Server/Health/BodySystem/Surgery/SurgeryData/BiologicalSurgeryData.cs @@ -1,32 +1,26 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using Content.Shared.BodySystem; +using Content.Server.Health.BodySystem.Surgery.Surgeon; +using Content.Shared.Health.BodySystem; using Content.Shared.Interfaces; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Serialization; -using Robust.Shared.IoC; using Robust.Shared.Localization; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; -using Robust.Shared.ViewVariables; -using YamlDotNet.RepresentationModel; -namespace Content.Server.BodySystem +namespace Content.Server.Health.BodySystem.Surgery.SurgeryData { /// /// Data class representing the surgery state of a biological entity. - /// + /// public class BiologicalSurgeryData : ISurgeryData { protected bool _skinOpened = false; protected bool _vesselsClamped = false; protected bool _skinRetracted = false; - protected List _disconnectedOrgans = new List(); + protected List _disconnectedOrgans = new List(); - public BiologicalSurgeryData(BodyPart parent) : base(parent) { } + public BiologicalSurgeryData(BodyPart.BodyPart parent) : base(parent) { } public override SurgeryAction GetSurgeryStep(SurgeryType toolType) { @@ -79,7 +73,7 @@ namespace Content.Server.BodySystem else if (_skinOpened && _vesselsClamped && _skinRetracted) //Case: skin is fully open. { toReturn += Loc.GetString("There is an incision on {0:their} {1}.\n", target, _parent.Name); - foreach (Mechanism mechanism in _disconnectedOrgans) + foreach (Mechanism.Mechanism mechanism in _disconnectedOrgans) { toReturn += Loc.GetString("{0:their} {1} is loose.\n", target, mechanism.Name); } @@ -87,12 +81,12 @@ namespace Content.Server.BodySystem return toReturn; } - public override bool CanInstallMechanism(Mechanism toBeInstalled) + public override bool CanInstallMechanism(Mechanism.Mechanism toBeInstalled) { return _skinOpened && _vesselsClamped && _skinRetracted; } - public override bool CanAttachBodyPart(BodyPart toBeConnected) + public override bool CanAttachBodyPart(BodyPart.BodyPart toBeConnected) { return true; //TODO: if a bodypart is disconnected, you should have to do some surgery to allow another bodypart to be attached. @@ -141,8 +135,8 @@ namespace Content.Server.BodySystem { if (_parent.Mechanisms.Count <= 0) return; - List toSend = new List(); - foreach (Mechanism mechanism in _parent.Mechanisms) + List toSend = new List(); + foreach (Mechanism.Mechanism mechanism in _parent.Mechanisms) { if (!_disconnectedOrgans.Contains(mechanism)) toSend.Add(mechanism); @@ -150,7 +144,7 @@ namespace Content.Server.BodySystem if (toSend.Count > 0) surgeon.RequestMechanism(toSend, LoosenOrganSurgeryCallback); } - public void LoosenOrganSurgeryCallback(Mechanism target, IBodyPartContainer container, ISurgeon surgeon, IEntity performer) + public void LoosenOrganSurgeryCallback(Mechanism.Mechanism target, IBodyPartContainer container, ISurgeon surgeon, IEntity performer) { if (target != null && _parent.Mechanisms.Contains(target)) { @@ -172,7 +166,7 @@ namespace Content.Server.BodySystem } - public void RemoveOrganSurgeryCallback(Mechanism target, IBodyPartContainer container, ISurgeon surgeon, IEntity performer) + public void RemoveOrganSurgeryCallback(Mechanism.Mechanism target, IBodyPartContainer container, ISurgeon surgeon, IEntity performer) { if (target != null && _parent.Mechanisms.Contains(target)) { diff --git a/Content.Server/Health/BodySystem/Surgery/SurgeryData/ISurgeryData.cs b/Content.Server/Health/BodySystem/Surgery/SurgeryData/ISurgeryData.cs index 38f6f6c854..47a0aba4c1 100644 --- a/Content.Server/Health/BodySystem/Surgery/SurgeryData/ISurgeryData.cs +++ b/Content.Server/Health/BodySystem/Surgery/SurgeryData/ISurgeryData.cs @@ -1,58 +1,54 @@ -using System; -using System.Collections.Generic; -using Content.Shared.BodySystem; +using Content.Server.Health.BodySystem.BodyPart; +using Content.Server.Health.BodySystem.Mechanism; +using Content.Server.Health.BodySystem.Surgery.Surgeon; +using Content.Shared.Health.BodySystem; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Serialization; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; -using Robust.Shared.ViewVariables; -using YamlDotNet.RepresentationModel; -namespace Content.Server.BodySystem +namespace Content.Server.Health.BodySystem.Surgery.SurgeryData { /// /// This data class represents the state of a in regards to everything surgery related - whether there's an incision on it, whether the bone is broken, etc. - /// + /// public abstract class ISurgeryData { /// /// The this surgeryData is attached to. The ISurgeryData class should not exist without a that it /// represents, and will throw errors if it is null. - /// - protected BodyPart _parent; + /// + protected BodyPart.BodyPart _parent; /// /// The of the parent . - /// + /// protected BodyPartType _parentType => _parent.PartType; public delegate void SurgeryAction(IBodyPartContainer container, ISurgeon surgeon, IEntity performer); - public ISurgeryData(BodyPart parent) + public ISurgeryData(BodyPart.BodyPart parent) { _parent = parent; } /// - /// Returns the description of this current to be shown upon observing the given entity. + /// Returns the description of this current to be shown upon observing the given entity. /// public abstract string GetDescription(IEntity target); /// - /// Returns whether a can be installed into the this ISurgeryData represents. + /// Returns whether a can be installed into the this ISurgeryData represents. /// - public abstract bool CanInstallMechanism(Mechanism toBeInstalled); + public abstract bool CanInstallMechanism(Mechanism.Mechanism toBeInstalled); /// /// Returns whether the given can be connected to the this ISurgeryData represents. /// - public abstract bool CanAttachBodyPart(BodyPart toBeConnected); + public abstract bool CanAttachBodyPart(BodyPart.BodyPart toBeConnected); /// /// Gets the delegate corresponding to the surgery step using the given . Returns null if no surgery step can be performed. diff --git a/Content.Server/Interfaces/Chat/IChatManager.cs b/Content.Server/Interfaces/Chat/IChatManager.cs index c3c9b6ceb3..e32c9bea8d 100644 --- a/Content.Server/Interfaces/Chat/IChatManager.cs +++ b/Content.Server/Interfaces/Chat/IChatManager.cs @@ -12,6 +12,12 @@ namespace Content.Server.Interfaces.Chat /// void DispatchServerAnnouncement(string message); + /// + /// Station announcement to every player + /// + /// + void DispatchStationAnnouncement(string message); + void DispatchServerMessage(IPlayerSession player, string message); void EntitySay(IEntity source, string message); diff --git a/Content.Server/Interfaces/Chemistry/IReactionEffect.cs b/Content.Server/Interfaces/Chemistry/IReactionEffect.cs index 4bd2eb30f0..36209aef3c 100644 --- a/Content.Server/Interfaces/Chemistry/IReactionEffect.cs +++ b/Content.Server/Interfaces/Chemistry/IReactionEffect.cs @@ -1,7 +1,7 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Serialization; -namespace Content.Shared.Interfaces +namespace Content.Server.Interfaces.Chemistry { /// /// Chemical reaction effect on the world such as an explosion, EMP, or fire. diff --git a/Content.Server/Interfaces/GameObjects/Components/Damage/IDamageableComponent.cs b/Content.Server/Interfaces/GameObjects/Components/Damage/IDamageableComponent.cs index e45685a46b..ad88349bdd 100644 --- a/Content.Server/Interfaces/GameObjects/Components/Damage/IDamageableComponent.cs +++ b/Content.Server/Interfaces/GameObjects/Components/Damage/IDamageableComponent.cs @@ -1,9 +1,9 @@ using System; -using Content.Server.GameObjects; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Damage; using Robust.Shared.Interfaces.GameObjects; -namespace Content.Server.Interfaces.GameObjects +namespace Content.Server.Interfaces.GameObjects.Components.Damage { public interface IDamageableComponent : IComponent { diff --git a/Content.Server/Interfaces/GameObjects/Components/Interaction/IBodyPartAdded.cs b/Content.Server/Interfaces/GameObjects/Components/Interaction/IBodyPartAdded.cs index 2a2a9b4ce8..0cca658e90 100644 --- a/Content.Server/Interfaces/GameObjects/Components/Interaction/IBodyPartAdded.cs +++ b/Content.Server/Interfaces/GameObjects/Components/Interaction/IBodyPartAdded.cs @@ -1,5 +1,5 @@ using System; -using Content.Server.BodySystem; +using Content.Server.Health.BodySystem.BodyPart; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { diff --git a/Content.Server/Interfaces/GameObjects/Components/Items/IHandsComponent.cs b/Content.Server/Interfaces/GameObjects/Components/Items/IHandsComponent.cs index 83d1b509a7..e716533285 100644 --- a/Content.Server/Interfaces/GameObjects/Components/Items/IHandsComponent.cs +++ b/Content.Server/Interfaces/GameObjects/Components/Items/IHandsComponent.cs @@ -1,6 +1,11 @@ -using System; +#nullable enable +using System; using System.Collections.Generic; -using Content.Server.GameObjects.Components; +using System.Diagnostics.CodeAnalysis; +using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Shared.GameObjects.Components.Inventory; using Content.Shared.GameObjects.Components.Items; using Content.Shared.GameObjects.EntitySystems; using Robust.Server.GameObjects.Components.Container; @@ -12,10 +17,20 @@ namespace Content.Server.Interfaces.GameObjects.Components.Items { public interface IHandsComponent : ISharedHandsComponent { + /// + /// Invoked when the hand contents changes or when a hand is added/removed. + /// + event Action? OnItemChanged; + + /// + /// The hands in this component. + /// + IEnumerable Hands { get; } + /// /// The hand name of the currently active hand. /// - string ActiveHand { get; set; } + string? ActiveHand { get; set; } /// /// Enumerates over every held item. @@ -27,12 +42,20 @@ namespace Content.Server.Interfaces.GameObjects.Components.Items /// /// The name of the hand to get. /// The item in the held, null if no item is held - ItemComponent GetItem(string handName); + ItemComponent? GetItem(string handName); + + /// + /// Attempts to get an item in a hand. + /// + /// The name of the hand to get. + /// The item in the held, null if no item is held + /// Whether it was holding an item + bool TryGetItem(string handName, [MaybeNullWhen(false)] out ItemComponent item); /// /// Gets item held by the current active hand /// - ItemComponent GetActiveHand { get; } + ItemComponent? GetActiveHand { get; } /// /// Puts an item into any empty hand, preferring the active hand. @@ -78,7 +101,7 @@ namespace Content.Server.Interfaces.GameObjects.Components.Items /// /// true if the entity is held, false otherwise /// - bool TryHand(IEntity entity, out string handName); + bool TryHand(IEntity entity, [MaybeNullWhen(false)] out string handName); /// /// Drops the item contained in the slot to the same position as our entity. diff --git a/Content.Server/Interfaces/GameObjects/IOnDamageBehavior.cs b/Content.Server/Interfaces/GameObjects/IOnDamageBehavior.cs index fdd8b7bb93..911d30b031 100644 --- a/Content.Server/Interfaces/GameObjects/IOnDamageBehavior.cs +++ b/Content.Server/Interfaces/GameObjects/IOnDamageBehavior.cs @@ -1,8 +1,7 @@ -using System; -using System.Collections.Generic; -using Content.Server.GameObjects; +using System.Collections.Generic; +using Content.Server.GameObjects.Components.Damage; -namespace Content.Server.Interfaces +namespace Content.Server.Interfaces.GameObjects { /// /// Any component/entity that has behaviour linked to taking damage should implement this interface. diff --git a/Content.Server/Interfaces/GameObjects/ISuicideAct.cs b/Content.Server/Interfaces/GameObjects/ISuicideAct.cs index 8d09775b86..fb6ed4ade5 100644 --- a/Content.Server/Interfaces/GameObjects/ISuicideAct.cs +++ b/Content.Server/Interfaces/GameObjects/ISuicideAct.cs @@ -1,8 +1,5 @@ using Content.Server.Interfaces.Chat; using Robust.Shared.Interfaces.GameObjects; -using System; -using System.Collections.Generic; -using System.Text; namespace Content.Server.Interfaces.GameObjects { diff --git a/Content.Server/Interfaces/IAccess.cs b/Content.Server/Interfaces/IAccess.cs index f271990545..bec7cef9b7 100644 --- a/Content.Server/Interfaces/IAccess.cs +++ b/Content.Server/Interfaces/IAccess.cs @@ -1,7 +1,7 @@ #nullable enable using System; -using Content.Server.GameObjects.Components.Access; using System.Collections.Generic; +using Content.Server.GameObjects.Components.Access; namespace Content.Server.Interfaces { diff --git a/Content.Server/Interfaces/IGasReactionEffect.cs b/Content.Server/Interfaces/IGasReactionEffect.cs index 27958cc3cc..95148d570c 100644 --- a/Content.Server/Interfaces/IGasReactionEffect.cs +++ b/Content.Server/Interfaces/IGasReactionEffect.cs @@ -2,7 +2,6 @@ using Content.Server.Atmos; using Content.Server.Atmos.Reactions; using Robust.Shared.Interfaces.Serialization; -using Robust.Shared.Map; namespace Content.Server.Interfaces { diff --git a/Content.Server/Interfaces/IListen.cs b/Content.Server/Interfaces/IListen.cs index c778c0adee..840ceac8e9 100644 --- a/Content.Server/Interfaces/IListen.cs +++ b/Content.Server/Interfaces/IListen.cs @@ -1,7 +1,4 @@ using Robust.Shared.Interfaces.GameObjects; -using System; -using System.Collections.Generic; -using System.Text; namespace Content.Server.Interfaces { diff --git a/Content.Server/Interfaces/PDA/IPDAUplinkManager.cs b/Content.Server/Interfaces/PDA/IPDAUplinkManager.cs index 34bc3d3c71..3ba9bdf5c8 100644 --- a/Content.Server/Interfaces/PDA/IPDAUplinkManager.cs +++ b/Content.Server/Interfaces/PDA/IPDAUplinkManager.cs @@ -1,7 +1,5 @@ -using System; using System.Collections.Generic; using Content.Shared.GameObjects.Components.PDA; -using Content.Shared.Prototypes.PDA; namespace Content.Server.Interfaces.PDA { diff --git a/Content.Server/Jobs/ClownSpecial.cs b/Content.Server/Jobs/ClownSpecial.cs index 72dc3000f5..29e64304e2 100644 --- a/Content.Server/Jobs/ClownSpecial.cs +++ b/Content.Server/Jobs/ClownSpecial.cs @@ -1,4 +1,5 @@ using Content.Server.GameObjects.Components.Mobs; +using Content.Shared.Roles; using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/MoMMILink.cs b/Content.Server/MoMMILink.cs index 0ae57f928d..318d98151a 100644 --- a/Content.Server/MoMMILink.cs +++ b/Content.Server/MoMMILink.cs @@ -1,5 +1,4 @@ using System; -using System.IO; using System.Net; using System.Net.Http; using System.Text; @@ -14,7 +13,6 @@ using Robust.Shared.Asynchronous; using Robust.Shared.Interfaces.Configuration; using Robust.Shared.IoC; using Robust.Shared.Log; -using Robust.Shared.Utility; namespace Content.Server { diff --git a/Content.Server/Mobs/Commands.cs b/Content.Server/Mobs/Commands.cs index a31eac223c..a759d8d5b4 100644 --- a/Content.Server/Mobs/Commands.cs +++ b/Content.Server/Mobs/Commands.cs @@ -2,10 +2,9 @@ using Content.Server.GameObjects.Components.Mobs; using Content.Server.Mobs.Roles; using Content.Server.Players; -using Content.Shared.Jobs; +using Content.Shared.Roles; using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; -using Robust.Shared.Interfaces.Reflection; using Robust.Shared.IoC; using Robust.Shared.Network; using Robust.Shared.Prototypes; diff --git a/Content.Server/Mobs/Roles/Job.cs b/Content.Server/Mobs/Roles/Job.cs index 33db5a65dc..064bb3d769 100644 --- a/Content.Server/Mobs/Roles/Job.cs +++ b/Content.Server/Mobs/Roles/Job.cs @@ -1,7 +1,5 @@ -using System; -using System.Collections.Generic; using Content.Server.Interfaces.Chat; -using Content.Shared.Jobs; +using Content.Shared.Roles; using Robust.Shared.IoC; namespace Content.Server.Mobs.Roles diff --git a/Content.Server/Mobs/Roles/SuspicionInnocentRole.cs b/Content.Server/Mobs/Roles/SuspicionInnocentRole.cs index 4c2f16f6a9..e8ab7a96be 100644 --- a/Content.Server/Mobs/Roles/SuspicionInnocentRole.cs +++ b/Content.Server/Mobs/Roles/SuspicionInnocentRole.cs @@ -1,8 +1,6 @@ -using Content.Server.GameObjects; using Content.Server.Interfaces.Chat; +using Content.Shared.Roles; using Robust.Shared.IoC; -using Robust.Shared.Utility; -using Content.Shared.Antags; namespace Content.Server.Mobs.Roles { diff --git a/Content.Server/Mobs/Roles/SuspicionTraitorRole.cs b/Content.Server/Mobs/Roles/SuspicionTraitorRole.cs index 5d19854454..753f5424e1 100644 --- a/Content.Server/Mobs/Roles/SuspicionTraitorRole.cs +++ b/Content.Server/Mobs/Roles/SuspicionTraitorRole.cs @@ -1,8 +1,6 @@ -using Content.Server.GameObjects; using Content.Server.Interfaces.Chat; +using Content.Shared.Roles; using Robust.Shared.IoC; -using Robust.Shared.Utility; -using Content.Shared.Antags; namespace Content.Server.Mobs.Roles { diff --git a/Content.Server/Mobs/StandingStateHelper.cs b/Content.Server/Mobs/StandingStateHelper.cs index 6a43352fa8..1f6f692a0f 100644 --- a/Content.Server/Mobs/StandingStateHelper.cs +++ b/Content.Server/Mobs/StandingStateHelper.cs @@ -1,4 +1,3 @@ -using Content.Server.Interfaces.GameObjects; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Shared.Audio; using Content.Shared.GameObjects.Components.Mobs; diff --git a/Content.Server/Observer/Ghost.cs b/Content.Server/Observer/Ghost.cs index a2a2dda05f..80480b958a 100644 --- a/Content.Server/Observer/Ghost.cs +++ b/Content.Server/Observer/Ghost.cs @@ -1,18 +1,14 @@ -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Damage; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Observer; -using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces.GameTicking; using Content.Server.Players; -using Content.Shared.Atmos; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs; using Robust.Server.Interfaces.Console; -using Robust.Server.Interfaces.Placement; using Robust.Server.Interfaces.Player; -using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; -using Robust.Shared.Map; namespace Content.Server.Observer { @@ -72,7 +68,12 @@ namespace Content.Server.Observer var ghostComponent = ghost.GetComponent(); ghostComponent.CanReturnToBody = canReturn; - if(canReturn) + if (player.AttachedEntity.TryGetComponent(out ServerOverlayEffectsComponent overlayComponent)) + { + overlayComponent?.RemoveOverlay(SharedOverlayID.CircleMaskOverlay); + } + + if (canReturn) mind.Visit(ghost); else mind.TransferTo(ghost); diff --git a/Content.Server/PDA/PDAUplinkManager.cs b/Content.Server/PDA/PDAUplinkManager.cs index 53b9aa2e05..0d93c95dc5 100644 --- a/Content.Server/PDA/PDAUplinkManager.cs +++ b/Content.Server/PDA/PDAUplinkManager.cs @@ -1,8 +1,7 @@ using System.Collections.Generic; using System.Linq; -using Content.Server.GameObjects; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Mobs; using Content.Server.Interfaces.PDA; using Content.Shared.GameObjects.Components.PDA; diff --git a/Content.Server/Placement/SpawnHelpers.cs b/Content.Server/Placement/SpawnHelpers.cs index e47d770aed..a6675fa712 100644 --- a/Content.Server/Placement/SpawnHelpers.cs +++ b/Content.Server/Placement/SpawnHelpers.cs @@ -1,8 +1,6 @@ using Robust.Server.Interfaces.GameObjects; -using Robust.Shared.Interfaces.GameObjects.Components; using Robust.Shared.IoC; using Robust.Shared.Map; -using Robust.Shared.Maths; namespace Content.Server.Placement { diff --git a/Content.Server/Preferences/PreferencesDatabase.cs b/Content.Server/Preferences/PreferencesDatabase.cs index 6c6c4719d0..8f13a1324e 100644 --- a/Content.Server/Preferences/PreferencesDatabase.cs +++ b/Content.Server/Preferences/PreferencesDatabase.cs @@ -60,7 +60,7 @@ namespace Content.Server.Preferences await _prefsSemaphore.WaitAsync(); try { - index = index.Clamp(0, _maxCharacterSlots - 1); + index = FloatMath.Clamp(index, 0, _maxCharacterSlots - 1); await _prefsDb.SaveSelectedCharacterIndex(username, index); } finally diff --git a/Content.Server/Sandbox/SandboxManager.cs b/Content.Server/Sandbox/SandboxManager.cs index e695a517c3..76cfc201f0 100644 --- a/Content.Server/Sandbox/SandboxManager.cs +++ b/Content.Server/Sandbox/SandboxManager.cs @@ -1,9 +1,10 @@ -using Content.Server.GameObjects; using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameTicking; using Content.Server.Interfaces.GameTicking; using Content.Shared.Sandbox; +using Robust.Server.Interfaces.Console; using Robust.Server.Console; using Robust.Server.Interfaces.Placement; using Robust.Server.Interfaces.Player; @@ -25,6 +26,7 @@ namespace Content.Server.Sandbox [Dependency] private readonly IPlacementManager _placementManager; [Dependency] private readonly IConGroupController _conGroupController; [Dependency] private readonly IEntityManager _entityManager; + [Dependency] private readonly IConsoleShell _shell; #pragma warning restore 649 private bool _isSandboxEnabled; @@ -45,6 +47,8 @@ namespace Content.Server.Sandbox _netManager.RegisterNetMessage(nameof(MsgSandboxStatus)); _netManager.RegisterNetMessage(nameof(MsgSandboxRespawn), SandboxRespawnReceived); _netManager.RegisterNetMessage(nameof(MsgSandboxGiveAccess), SandboxGiveAccessReceived); + _netManager.RegisterNetMessage(nameof(MsgSandboxGiveAghost), SandboxGiveAghostReceived); + _netManager.RegisterNetMessage(nameof(MsgSandboxSuicide), SandboxSuicideReceived); _playerManager.PlayerStatusChanged += OnPlayerStatusChanged; _gameTicker.OnRunLevelChanged += GameTickerOnOnRunLevelChanged; @@ -117,6 +121,29 @@ namespace Content.Server.Sandbox } } + private void SandboxGiveAghostReceived(MsgSandboxGiveAghost message) + { + if (!IsSandboxEnabled) + { + return; + } + + var player = _playerManager.GetSessionByChannel(message.MsgChannel); + + _shell.ExecuteCommand(player, _conGroupController.CanCommand(player, "aghost") ? "aghost" : "ghost"); + } + + private void SandboxSuicideReceived(MsgSandboxSuicide message) + { + if (!IsSandboxEnabled) + { + return; + } + + var player = _playerManager.GetSessionByChannel(message.MsgChannel); + _shell.ExecuteCommand(player, $"suicide"); + } + private void UpdateSandboxStatusForAll() { var msg = _netManager.CreateNetMessage(); diff --git a/Content.Server/ServerContentIoC.cs b/Content.Server/ServerContentIoC.cs index dded203861..c9d618b004 100644 --- a/Content.Server/ServerContentIoC.cs +++ b/Content.Server/ServerContentIoC.cs @@ -2,6 +2,8 @@ using Content.Server.AI.Utility.Considerations; using Content.Server.AI.WorldState; using Content.Server.Cargo; using Content.Server.Chat; +using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; +using Content.Server.GameObjects.Components.Power.PowerNetComponents; using Content.Server.GameTicking; using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; @@ -14,8 +16,6 @@ using Content.Server.Utility; using Content.Shared.Interfaces; using Content.Shared.Kitchen; using Robust.Shared.IoC; -using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; -using Content.Server.GameObjects.Components.Power.PowerNetComponents; namespace Content.Server { diff --git a/Content.Server/StationEvents/PowerGridCheck.cs b/Content.Server/StationEvents/PowerGridCheck.cs new file mode 100644 index 0000000000..882fa61f7a --- /dev/null +++ b/Content.Server/StationEvents/PowerGridCheck.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using Content.Server.GameObjects.Components.Power; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.Components.Power.PowerNetComponents; +using JetBrains.Annotations; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Random; +using Robust.Shared.IoC; +using Robust.Shared.Localization; + +namespace Content.Server.StationEvents +{ + [UsedImplicitly] + public sealed class PowerGridCheck : StationEvent + { + public override string Name => "PowerGridCheck"; + + public override StationEventWeight Weight => StationEventWeight.Normal; + + public override int? MaxOccurrences => 3; + + protected override string StartAnnouncement => Loc.GetString( + "Abnormal activity detected in the station's powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration."); + + protected override string EndAnnouncement => Loc.GetString( + "Power has been restored to the station. We apologize for the inconvenience."); + + private float _elapsedTime; + private int _failDuration; + + private Dictionary _powered = new Dictionary(); + + private readonly List _toPowerDown = new List(); + + public override void Startup() + { + base.Startup(); + EntitySystem.Get().PlayGlobal("/Audio/Announcements/power_off.ogg"); + + _elapsedTime = 0.0f; + _failDuration = IoCManager.Resolve().Next(30, 120); + var componentManager = IoCManager.Resolve(); + + foreach (var component in componentManager.EntityQuery()) + { + component.PowerDisabled = true; + } + } + + public override void Shutdown() + { + base.Shutdown(); + EntitySystem.Get().PlayGlobal("/Audio/Announcements/power_on.ogg"); + + foreach (var (entity, powered) in _powered) + { + if (entity.Deleted) continue; + + if (entity.TryGetComponent(out PowerReceiverComponent powerReceiverComponent)) + { + powerReceiverComponent.PowerDisabled = powered; + } + } + + _powered.Clear(); + } + + public override void Update(float frameTime) + { + if (!Running) + { + return; + } + + _elapsedTime += frameTime; + + if (_elapsedTime < _failDuration) + { + return; + } + + Running = false; + } + } +} \ No newline at end of file diff --git a/Content.Server/StationEvents/RadiationStorm.cs b/Content.Server/StationEvents/RadiationStorm.cs new file mode 100644 index 0000000000..9163b097e3 --- /dev/null +++ b/Content.Server/StationEvents/RadiationStorm.cs @@ -0,0 +1,131 @@ +using Content.Server.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.Components.Mobs; +using JetBrains.Annotations; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.Interfaces.Random; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Map; +using Robust.Shared.Random; + +namespace Content.Server.StationEvents +{ + [UsedImplicitly] + public sealed class RadiationStorm : StationEvent + { + // Based on Goonstation style radiation storm with some TG elements (announcer, etc.) + + [Dependency] private IEntityManager _entityManager = default!; + [Dependency] private IMapManager _mapManager = default!; + [Dependency] private IRobustRandom _robustRandom = default!; + + public override string Name => "RadiationStorm"; + + protected override string StartAnnouncement => Loc.GetString( + "High levels of radiation detected near the station. Evacuate any areas containing abnormal green energy fields."); + + protected override string EndAnnouncement => Loc.GetString( + "The radiation threat has passed. Please return to your workplaces."); + + /// + /// How long until the radiation storm starts + /// + private const float StartupTime = 10; + + /// + /// How long the radiation storm has been running for + /// + private float _timeElapsed; + + private int _pulsesRemaining; + private float _timeUntilPulse; + private const float MinPulseDelay = 0.2f; + private const float MaxPulseDelay = 0.8f; + + public override void Startup() + { + base.Startup(); + EntitySystem.Get().PlayGlobal("/Audio/Announcements/radiation.ogg"); + IoCManager.InjectDependencies(this); + + _timeElapsed = 0.0f; + _pulsesRemaining = _robustRandom.Next(30, 100); + + var componentManager = IoCManager.Resolve(); + + foreach (var overlay in componentManager.EntityQuery()) + { + overlay.AddOverlay(SharedOverlayID.RadiationPulseOverlay); + } + } + + public override void Shutdown() + { + base.Shutdown(); + + // IOC uninject? + _entityManager = null; + _mapManager = null; + _robustRandom = null; + + var componentManager = IoCManager.Resolve(); + + foreach (var overlay in componentManager.EntityQuery()) + { + overlay.RemoveOverlay(SharedOverlayID.RadiationPulseOverlay); + } + } + + public override void Update(float frameTime) + { + _timeElapsed += frameTime; + + if (_pulsesRemaining == 0) + { + Running = false; + } + + if (!Running) + { + return; + } + + if (_timeElapsed < StartupTime) + { + return; + } + + _timeUntilPulse -= frameTime; + + if (_timeUntilPulse <= 0.0f) + { + // TODO: Probably rate-limit this for small grids (e.g. no more than 25% covered) + foreach (var grid in _mapManager.GetAllGrids()) + { + if (grid.IsDefaultGrid) continue; + SpawnPulse(grid); + } + } + } + + private void SpawnPulse(IMapGrid mapGrid) + { + _entityManager.SpawnEntity("RadiationPulse", FindRandomGrid(mapGrid)); + _timeUntilPulse = _robustRandom.NextFloat() * (MaxPulseDelay - MinPulseDelay) + MinPulseDelay; + _pulsesRemaining -= 1; + } + + private GridCoordinates FindRandomGrid(IMapGrid mapGrid) + { + // TODO: Need to get valid tiles? (maybe just move right if the tile we chose is invalid?) + + var randomX = _robustRandom.Next((int) mapGrid.WorldBounds.Left, (int) mapGrid.WorldBounds.Right); + var randomY = _robustRandom.Next((int) mapGrid.WorldBounds.Bottom, (int) mapGrid.WorldBounds.Top); + + return mapGrid.GridTileToLocal(new MapIndices(randomX, randomY)); + } + } +} \ No newline at end of file diff --git a/Content.Server/StationEvents/StationEvent.cs b/Content.Server/StationEvents/StationEvent.cs new file mode 100644 index 0000000000..8d351aff8e --- /dev/null +++ b/Content.Server/StationEvents/StationEvent.cs @@ -0,0 +1,94 @@ +using Content.Server.Interfaces.Chat; +using Robust.Server.GameObjects; +using Robust.Shared.IoC; + +namespace Content.Server.StationEvents +{ + public abstract class StationEvent + { + /// + /// If the event has started and is currently running + /// + public bool Running { get; protected set; } + + /// + /// Human-readable name for the event + /// + public abstract string Name { get; } + + public virtual StationEventWeight Weight { get; } = StationEventWeight.Normal; + + /// + /// What should be said in chat when the event starts (if anything). + /// + protected virtual string StartAnnouncement { get; } = null; + + /// + /// What should be said in chat when the event end (if anything). + /// + protected virtual string EndAnnouncement { get; } = null; + + /// + /// In minutes, when is the first time this event can start + /// + /// + public virtual int EarliestStart { get; } = 20; + + /// + /// How many players need to be present on station for the event to run + /// + /// To avoid running deadly events with low-pop + public virtual int MinimumPlayers { get; } = 0; + + /// + /// How many times this event has run this round + /// + public int Occurrences { get; set; } = 0; + + /// + /// How many times this even can occur in a single round + /// + public virtual int? MaxOccurrences { get; } = null; + + /// + /// Called once when the station event starts + /// + public virtual void Startup() + { + Running = true; + Occurrences += 1; + if (StartAnnouncement != null) + { + var chatManager = IoCManager.Resolve(); + chatManager.DispatchStationAnnouncement(StartAnnouncement); + } + } + + /// + /// Called every tick when this event is active + /// + /// + public abstract void Update(float frameTime); + + /// + /// Called once when the station event ends + /// + public virtual void Shutdown() + { + if (EndAnnouncement != null) + { + var chatManager = IoCManager.Resolve(); + chatManager.DispatchStationAnnouncement(EndAnnouncement); + } + } + } + + public enum StationEventWeight + { + VeryLow = 0, + Low = 5, + Normal = 10, + High = 15, + VeryHigh = 20, + } +} \ No newline at end of file diff --git a/Content.Server/StationEvents/StationEventCommand.cs b/Content.Server/StationEvents/StationEventCommand.cs new file mode 100644 index 0000000000..39331c6d5b --- /dev/null +++ b/Content.Server/StationEvents/StationEventCommand.cs @@ -0,0 +1,102 @@ +#nullable enable +using Content.Server.GameObjects.EntitySystems; +using Content.Server.GameObjects.EntitySystems.StationEvents; +using JetBrains.Annotations; +using Robust.Server.Interfaces.Console; +using Robust.Server.Interfaces.Player; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Localization; + +namespace Content.Client.Commands +{ + [UsedImplicitly] + public sealed class StationEventCommand : IClientCommand + { + public string Command => "events"; + public string Description => "Provides admin control to station events"; + public string Help => "events >\n" + + "list: return all event names that can be run\n " + + "pause: stop all random events from running\n" + + "resume: allow random events to run again\n" + + "random: choose a random event that is valid and run it\n" + + "run: start a particular event now; is case-insensitive and not localized"; + public void Execute(IConsoleShell shell, IPlayerSession? player, string[] args) + { + if (args.Length == 0) + { + shell.SendText(player, "Need more args"); + return; + } + + if (args[0] == "list") + { + var resultText = "Random\n" + EntitySystem.Get().GetEventNames(); + shell.SendText(player, resultText); + return; + } + + // Didn't use a "toggle" so it's explicit + if (args[0] == "pause") + { + var stationEventSystem = EntitySystem.Get(); + + if (!stationEventSystem.Enabled) + { + shell.SendText(player, Loc.GetString("Station events are already paused")); + return; + } + else + { + stationEventSystem.Enabled = false; + shell.SendText(player, Loc.GetString("Station events paused")); + return; + } + } + + if (args[0] == "resume") + { + var stationEventSystem = EntitySystem.Get(); + + if (stationEventSystem.Enabled) + { + shell.SendText(player, Loc.GetString("Station events are already running")); + return; + } + else + { + stationEventSystem.Enabled = true; + shell.SendText(player, Loc.GetString("Station events resumed")); + return; + } + } + + if (args[0] == "stop") + { + var resultText = EntitySystem.Get().StopEvent(); + shell.SendText(player, resultText); + return; + } + + if (args[0] == "run" && args.Length == 2) + { + var eventName = args[1]; + string resultText; + + if (eventName == "random") + { + resultText = EntitySystem.Get().RunRandomEvent(); + } + else + { + resultText = EntitySystem.Get().RunEvent(eventName); + } + + shell.SendText(player, resultText); + return; + } + + shell.SendText(player, Loc.GetString("Invalid events command")); + return; + } + } +} \ No newline at end of file diff --git a/Content.Server/Throw/ThrowHelper.cs b/Content.Server/Throw/ThrowHelper.cs index 17cadf3539..ad8e76b4bf 100644 --- a/Content.Server/Throw/ThrowHelper.cs +++ b/Content.Server/Throw/ThrowHelper.cs @@ -1,4 +1,5 @@ -using Content.Server.GameObjects.Components; +using System; +using Content.Server.GameObjects.Components.Projectiles; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Physics; using Robust.Shared.GameObjects.Components; @@ -12,7 +13,6 @@ using Robust.Shared.Maths; using Robust.Shared.Physics; using Robust.Shared.Random; using Robust.Shared.Interfaces.Physics; -using MathF = CannyFastMath.MathF; namespace Content.Server.Throw { @@ -85,7 +85,7 @@ namespace Content.Server.Throw projComp.StartThrow(angle.ToVec(), spd); if (throwSourceEnt != null && - throwSourceEnt.TryGetComponent(out var physics) && + throwSourceEnt.TryGetComponent(out var physics) && physics.TryGetController(out MoverController mover)) { var physicsMgr = IoCManager.Resolve(); @@ -136,7 +136,7 @@ namespace Content.Server.Throw var distance = (targetLoc.ToMapPos(mapManager) - sourceLoc.ToMapPos(mapManager)).Length; var throwDuration = ThrownItemComponent.DefaultThrowTime; var mass = 1f; - if (thrownEnt.TryGetComponent(out IPhysicsComponent physicsComponent)) + if (thrownEnt.TryGetComponent(out ICollidableComponent physicsComponent)) { mass = physicsComponent.Mass; } diff --git a/Content.Shared/Atmos/Atmospherics.cs b/Content.Shared/Atmos/Atmospherics.cs index 4659ab2441..2b1e2a5dc6 100644 --- a/Content.Shared/Atmos/Atmospherics.cs +++ b/Content.Shared/Atmos/Atmospherics.cs @@ -63,6 +63,11 @@ namespace Content.Shared.Atmos /// public const float MolesCellStandard = (OneAtmosphere * CellVolume / (T20C * R)); + /// + /// Compared against for superconduction. + /// + public const float MCellWithRatio = (MolesCellStandard * 0.005f); + public const float OxygenStandard = 0.21f; public const float NitrogenStandard = 0.79f; @@ -83,6 +88,11 @@ namespace Content.Shared.Atmos public const float OpenHeatTransferCoefficient = 0.4f; + /// + /// Hack to make vacuums cold, sacrificing realism for gameplay. + /// + public const float HeatCapacityVacuum = 7000f; + /// /// Ratio of air that must move to/from a tile to reset group processing /// @@ -116,6 +126,7 @@ namespace Content.Shared.Atmos /// Minimum temperature for starting superconduction. /// public const float MinimumTemperatureStartSuperConduction = (T20C + 200f); + public const float MinimumTemperatureForSuperconduction = (T20C + 10f); /// /// Minimum heat capacity. @@ -214,6 +225,8 @@ namespace Content.Shared.Atmos /// so it just applies this flat value). /// public const int LowPressureDamage = 4; + + public const float WindowHeatTransferCoefficient = 0.1f; } /// diff --git a/Content.Shared/Atmos/GasPrototype.cs b/Content.Shared/Atmos/GasPrototype.cs index 8237d54b4c..8a71811760 100644 --- a/Content.Shared/Atmos/GasPrototype.cs +++ b/Content.Shared/Atmos/GasPrototype.cs @@ -1,7 +1,5 @@ -using Robust.Shared.Interfaces.Serialization; -using Robust.Shared.Prototypes; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using System; using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; diff --git a/Content.Shared/Audio/AudioHelpers.cs b/Content.Shared/Audio/AudioHelpers.cs index 4e2a68b0fb..e996954be6 100644 --- a/Content.Shared/Audio/AudioHelpers.cs +++ b/Content.Shared/Audio/AudioHelpers.cs @@ -1,12 +1,6 @@ -using System; -using Content.Shared.GameObjects.Components.Sound; using Robust.Shared.Audio; -using Robust.Shared.GameObjects; -using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; -using Robust.Shared.Log; -using Robust.Shared.Map; using Robust.Shared.Prototypes; using Robust.Shared.Random; diff --git a/Content.Shared/Chemistry/DefaultMetabolizable.cs b/Content.Shared/Chemistry/DefaultMetabolizable.cs index 20de8420c0..7f8a72983a 100644 --- a/Content.Shared/Chemistry/DefaultMetabolizable.cs +++ b/Content.Shared/Chemistry/DefaultMetabolizable.cs @@ -1,7 +1,6 @@ using Content.Shared.Interfaces.Chemistry; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Serialization; -using Robust.Shared.IoC; using Robust.Shared.Serialization; namespace Content.Shared.Chemistry diff --git a/Content.Shared/Chemistry/ReagentPrototype.cs b/Content.Shared/Chemistry/ReagentPrototype.cs index 1280c7781e..1f476c47fc 100644 --- a/Content.Shared/Chemistry/ReagentPrototype.cs +++ b/Content.Shared/Chemistry/ReagentPrototype.cs @@ -5,7 +5,6 @@ using Robust.Shared.IoC; using Robust.Shared.Maths; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; namespace Content.Shared.Chemistry diff --git a/Content.Shared/Chemistry/ReagentUnit.cs b/Content.Shared/Chemistry/ReagentUnit.cs index 42ed972187..ec2d6adb60 100644 --- a/Content.Shared/Chemistry/ReagentUnit.cs +++ b/Content.Shared/Chemistry/ReagentUnit.cs @@ -1,7 +1,7 @@ -using Robust.Shared.Interfaces.Serialization; -using System; +using System; using System.Globalization; using System.Linq; +using Robust.Shared.Interfaces.Serialization; namespace Content.Shared.Chemistry { diff --git a/Content.Shared/Chemistry/Solution.cs b/Content.Shared/Chemistry/Solution.cs index ff2e15ec64..9db9a0a101 100644 --- a/Content.Shared/Chemistry/Solution.cs +++ b/Content.Shared/Chemistry/Solution.cs @@ -1,13 +1,11 @@ -using Content.Shared.Interfaces.Chemistry; -using Robust.Shared.Interfaces.Serialization; -using Robust.Shared.IoC; -using Robust.Shared.Serialization; -using Robust.Shared.Utility; -using Robust.Shared.ViewVariables; -using System; +using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; +using Robust.Shared.Interfaces.Serialization; +using Robust.Shared.Serialization; +using Robust.Shared.Utility; +using Robust.Shared.ViewVariables; namespace Content.Shared.Chemistry { diff --git a/Content.Shared/EntryPoint.cs b/Content.Shared/EntryPoint.cs index 6d7472d02a..25976f6379 100644 --- a/Content.Shared/EntryPoint.cs +++ b/Content.Shared/EntryPoint.cs @@ -1,15 +1,15 @@ using System; - using System.Collections.Generic; - using System.Globalization; - using Content.Shared.Maps; - using Robust.Shared.ContentPack; - using Robust.Shared.Interfaces.Map; - using Robust.Shared.IoC; - using Robust.Shared.Localization; +using System.Collections.Generic; +using System.Globalization; +using Content.Shared.Maps; +using Robust.Shared.ContentPack; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.IoC; +using Robust.Shared.Localization; using Robust.Shared.Localization.Macros; using Robust.Shared.Prototypes; - namespace Content.Shared +namespace Content.Shared { public class EntryPoint : GameShared { diff --git a/Content.Shared/GameObjects/Components/Cargo/SharedCargoConsoleComponent.cs b/Content.Shared/GameObjects/Components/Cargo/SharedCargoConsoleComponent.cs index a2221bfb32..66f5041184 100644 --- a/Content.Shared/GameObjects/Components/Cargo/SharedCargoConsoleComponent.cs +++ b/Content.Shared/GameObjects/Components/Cargo/SharedCargoConsoleComponent.cs @@ -1,14 +1,9 @@ -using Content.Shared.Prototypes.Cargo; +using System; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.IoC; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Content.Shared.GameObjects.Components.Cargo { diff --git a/Content.Shared/GameObjects/Components/Cargo/SharedCargoOrderDatabaseComponent.cs b/Content.Shared/GameObjects/Components/Cargo/SharedCargoOrderDatabaseComponent.cs index cd7debb0ab..78cbe28efd 100644 --- a/Content.Shared/GameObjects/Components/Cargo/SharedCargoOrderDatabaseComponent.cs +++ b/Content.Shared/GameObjects/Components/Cargo/SharedCargoOrderDatabaseComponent.cs @@ -1,8 +1,8 @@ -using Content.Shared.Prototypes.Cargo; +using System; +using System.Collections.Generic; +using Content.Shared.Prototypes.Cargo; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; -using System; -using System.Collections.Generic; namespace Content.Shared.GameObjects.Components.Cargo { diff --git a/Content.Shared/GameObjects/Components/Cargo/SharedGalacticMarketComponent.cs b/Content.Shared/GameObjects/Components/Cargo/SharedGalacticMarketComponent.cs index 51cdcf2893..7636ee47ad 100644 --- a/Content.Shared/GameObjects/Components/Cargo/SharedGalacticMarketComponent.cs +++ b/Content.Shared/GameObjects/Components/Cargo/SharedGalacticMarketComponent.cs @@ -1,11 +1,11 @@ -using Content.Shared.Prototypes.Cargo; +using System; +using System.Collections; +using System.Collections.Generic; +using Content.Shared.Prototypes.Cargo; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using System; -using System.Collections; -using System.Collections.Generic; namespace Content.Shared.GameObjects.Components.Cargo { diff --git a/Content.Shared/GameObjects/Components/Chemistry/ChemMaster/SharedChemMasterComponent.cs b/Content.Shared/GameObjects/Components/Chemistry/ChemMaster/SharedChemMasterComponent.cs index 8a4f630fb0..43d1584381 100644 --- a/Content.Shared/GameObjects/Components/Chemistry/ChemMaster/SharedChemMasterComponent.cs +++ b/Content.Shared/GameObjects/Components/Chemistry/ChemMaster/SharedChemMasterComponent.cs @@ -6,7 +6,7 @@ using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.Serialization; -namespace Content.Shared.GameObjects.Components.Chemistry +namespace Content.Shared.GameObjects.Components.Chemistry.ChemMaster { /// diff --git a/Content.Shared/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserInventoryPrototype.cs b/Content.Shared/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserInventoryPrototype.cs index 1c5cb64af0..aa95bfe187 100644 --- a/Content.Shared/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserInventoryPrototype.cs +++ b/Content.Shared/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserInventoryPrototype.cs @@ -4,7 +4,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using YamlDotNet.RepresentationModel; -namespace Content.Shared.GameObjects.Components.Chemistry +namespace Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser { /// /// Is simply a list of reagents defined in yaml. This can then be set as a diff --git a/Content.Shared/GameObjects/Components/Chemistry/ReagentDispenser/SharedReagentDispenserComponent.cs b/Content.Shared/GameObjects/Components/Chemistry/ReagentDispenser/SharedReagentDispenserComponent.cs index b2d094a5d0..d7ff2d7521 100644 --- a/Content.Shared/GameObjects/Components/Chemistry/ReagentDispenser/SharedReagentDispenserComponent.cs +++ b/Content.Shared/GameObjects/Components/Chemistry/ReagentDispenser/SharedReagentDispenserComponent.cs @@ -5,7 +5,7 @@ using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.Serialization; -namespace Content.Shared.GameObjects.Components.Chemistry +namespace Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser { /// diff --git a/Content.Shared/GameObjects/Components/Chemistry/SharedSolutionComponent.cs b/Content.Shared/GameObjects/Components/Chemistry/SharedSolutionComponent.cs index 232bea635e..93fa5d5aab 100644 --- a/Content.Shared/GameObjects/Components/Chemistry/SharedSolutionComponent.cs +++ b/Content.Shared/GameObjects/Components/Chemistry/SharedSolutionComponent.cs @@ -1,12 +1,6 @@ using System; -using System.Collections.Generic; -using Content.Shared.Chemistry; using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Maths; -using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using Robust.Shared.ViewVariables; namespace Content.Shared.GameObjects.Components.Chemistry { diff --git a/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs b/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs index 656efbaf82..13cf0b0e93 100644 --- a/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs +++ b/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Components.Damage { public abstract class SharedDamageableComponent : Component { diff --git a/Content.Shared/GameObjects/Components/Disposal/SharedDisposalUnitComponent.cs b/Content.Shared/GameObjects/Components/Disposal/SharedDisposalUnitComponent.cs index 1ce14ae17f..9bcd7edbf0 100644 --- a/Content.Shared/GameObjects/Components/Disposal/SharedDisposalUnitComponent.cs +++ b/Content.Shared/GameObjects/Components/Disposal/SharedDisposalUnitComponent.cs @@ -51,7 +51,7 @@ namespace Content.Shared.GameObjects.Components.Disposal } [Serializable, NetSerializable] - public enum State + public enum PressureState { Ready, Pressurizing diff --git a/Content.Shared/GameObjects/Components/GUI/SharedStrippableComponent.cs b/Content.Shared/GameObjects/Components/GUI/SharedStrippableComponent.cs new file mode 100644 index 0000000000..bcc9b2fc7c --- /dev/null +++ b/Content.Shared/GameObjects/Components/GUI/SharedStrippableComponent.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using Content.Shared.GameObjects.Components.Inventory; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.UserInterface; +using Robust.Shared.Serialization; +using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; + +namespace Content.Shared.GameObjects.Components.GUI +{ + public class SharedStrippableComponent : Component + { + public override string Name => "Strippable"; + + [NetSerializable, Serializable] + public enum StrippingUiKey + { + Key, + } + } + + [NetSerializable, Serializable] + public class StrippingInventoryButtonPressed : BoundUserInterfaceMessage + { + public Slots Slot { get; } + + public StrippingInventoryButtonPressed(Slots slot) + { + Slot = slot; + } + } + + [NetSerializable, Serializable] + public class StrippingHandButtonPressed : BoundUserInterfaceMessage + { + public string Hand { get; } + + public StrippingHandButtonPressed(string hand) + { + Hand = hand; + } + } + + [NetSerializable, Serializable] + public class StrippingBoundUserInterfaceState : BoundUserInterfaceState + { + public Dictionary Inventory { get; } + public Dictionary Hands { get; } + + public StrippingBoundUserInterfaceState(Dictionary inventory, Dictionary hands) + { + Inventory = inventory; + Hands = hands; + } + } +} diff --git a/Content.Shared/GameObjects/Components/Instruments/SharedInstrumentComponent.cs b/Content.Shared/GameObjects/Components/Instruments/SharedInstrumentComponent.cs index c431a25fc8..87c1fa35f3 100644 --- a/Content.Shared/GameObjects/Components/Instruments/SharedInstrumentComponent.cs +++ b/Content.Shared/GameObjects/Components/Instruments/SharedInstrumentComponent.cs @@ -1,5 +1,4 @@ using System; -using Content.Shared.BodySystem; using Robust.Shared.Audio.Midi; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; diff --git a/Content.Shared/GameObjects/Components/Inventory/InventoryTemplates.cs b/Content.Shared/GameObjects/Components/Inventory/InventoryTemplates.cs index 0415814b41..457c0c19ef 100644 --- a/Content.Shared/GameObjects/Components/Inventory/InventoryTemplates.cs +++ b/Content.Shared/GameObjects/Components/Inventory/InventoryTemplates.cs @@ -2,7 +2,7 @@ using JetBrains.Annotations; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Components.Inventory { public abstract class Inventory { @@ -47,7 +47,7 @@ namespace Content.Shared.GameObjects public override IReadOnlyList SlotMasks { get; } = new List() { Slots.EYES, Slots.HEAD, Slots.EARS, - Slots.OUTERCLOTHING, Slots.MASK, Slots.INNERCLOTHING, + Slots.OUTERCLOTHING, Slots.MASK, Slots.INNERCLOTHING, Slots.BACKPACK, Slots.BELT, Slots.GLOVES, Slots.NONE, Slots.SHOES, Slots.IDCARD, Slots.POCKET1, Slots.POCKET2, Slots.NECK diff --git a/Content.Shared/GameObjects/Components/Inventory/SharedInventoryComponent.cs b/Content.Shared/GameObjects/Components/Inventory/SharedInventoryComponent.cs index 032385d0d4..dfea45389e 100644 --- a/Content.Shared/GameObjects/Components/Inventory/SharedInventoryComponent.cs +++ b/Content.Shared/GameObjects/Components/Inventory/SharedInventoryComponent.cs @@ -8,7 +8,7 @@ using Robust.Shared.Utility; using Robust.Shared.ViewVariables; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Components.Inventory { public abstract class SharedInventoryComponent : Component { diff --git a/Content.Shared/GameObjects/Components/Mobs/SharedOverlayEffectsComponent.cs b/Content.Shared/GameObjects/Components/Mobs/SharedOverlayEffectsComponent.cs index e487f8940c..3ee301ab96 100644 --- a/Content.Shared/GameObjects/Components/Mobs/SharedOverlayEffectsComponent.cs +++ b/Content.Shared/GameObjects/Components/Mobs/SharedOverlayEffectsComponent.cs @@ -1,19 +1,12 @@ using System; using System.Collections.Generic; -using System.ComponentModel; using System.Linq; -using System.Runtime.Serialization; -using System.Threading; -using System.Timers; using JetBrains.Annotations; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; -using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using YamlDotNet.RepresentationModel; -using Component = Robust.Shared.GameObjects.Component; namespace Content.Shared.GameObjects.Components.Mobs { @@ -121,6 +114,7 @@ namespace Content.Shared.GameObjects.Components.Mobs { GradientCircleMaskOverlay, CircleMaskOverlay, - FlashOverlay + FlashOverlay, + RadiationPulseOverlay, } } diff --git a/Content.Shared/GameObjects/Components/Movement/SharedPlayerInputMoverComponent.cs b/Content.Shared/GameObjects/Components/Movement/SharedPlayerInputMoverComponent.cs index da88fdd468..9c74d666bc 100644 --- a/Content.Shared/GameObjects/Components/Movement/SharedPlayerInputMoverComponent.cs +++ b/Content.Shared/GameObjects/Components/Movement/SharedPlayerInputMoverComponent.cs @@ -142,11 +142,11 @@ namespace Content.Shared.GameObjects.Components.Movement /// public override void OnAdd() { - // This component requires that the entity has a PhysicsComponent. - if (!Owner.HasComponent()) + // This component requires that the entity has a CollidableComponent. + if (!Owner.HasComponent()) Logger.Error( $"[ECS] {Owner.Prototype?.Name} - {nameof(SharedPlayerInputMoverComponent)} requires" + - $" {nameof(IPhysicsComponent)}. "); + $" {nameof(ICollidableComponent)}. "); base.OnAdd(); } diff --git a/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs b/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs index 510216449c..4d05195dba 100644 --- a/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs +++ b/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Physics; @@ -51,13 +50,12 @@ namespace Content.Shared.GameObjects.Components.Movement || _slipped.Contains(entity.Uid) || !entity.TryGetComponent(out SharedStunnableComponent stun) || !entity.TryGetComponent(out ICollidableComponent otherBody) - || !entity.TryGetComponent(out IPhysicsComponent otherPhysics) || !Owner.TryGetComponent(out ICollidableComponent body)) { return false; } - if (otherPhysics.LinearVelocity.Length < RequiredSlipSpeed || stun.KnockedDown) + if (otherBody.LinearVelocity.Length < RequiredSlipSpeed || stun.KnockedDown) { return false; } diff --git a/Content.Shared/GameObjects/Components/PDA/SharedPDAComponent.cs b/Content.Shared/GameObjects/Components/PDA/SharedPDAComponent.cs index 567f7f8b2c..8e24cbcd95 100644 --- a/Content.Shared/GameObjects/Components/PDA/SharedPDAComponent.cs +++ b/Content.Shared/GameObjects/Components/PDA/SharedPDAComponent.cs @@ -1,9 +1,6 @@ using System; -using System.Collections.Generic; -using JetBrains.Annotations; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.UserInterface; -using Robust.Shared.Maths; using Robust.Shared.Serialization; namespace Content.Shared.GameObjects.Components.PDA diff --git a/Content.Shared/GameObjects/Components/Pointing/SharedPointingArrowComponent.cs b/Content.Shared/GameObjects/Components/Pointing/SharedPointingArrowComponent.cs index 05e14bb666..4bca8f7007 100644 --- a/Content.Shared/GameObjects/Components/Pointing/SharedPointingArrowComponent.cs +++ b/Content.Shared/GameObjects/Components/Pointing/SharedPointingArrowComponent.cs @@ -1,6 +1,4 @@ -using System; -using Robust.Shared.GameObjects; -using Robust.Shared.Serialization; +using Robust.Shared.GameObjects; namespace Content.Shared.GameObjects.Components.Pointing { diff --git a/Content.Shared/GameObjects/Components/Power/SharedApc.cs b/Content.Shared/GameObjects/Components/Power/SharedApc.cs index e68c031aa3..0169ca2d72 100644 --- a/Content.Shared/GameObjects/Components/Power/SharedApc.cs +++ b/Content.Shared/GameObjects/Components/Power/SharedApc.cs @@ -1,5 +1,4 @@ using System; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.Serialization; diff --git a/Content.Shared/GameObjects/Components/Power/SharedSolarControlConsoleComponent.cs b/Content.Shared/GameObjects/Components/Power/SharedSolarControlConsoleComponent.cs index a42e68287a..54ce97e831 100644 --- a/Content.Shared/GameObjects/Components/Power/SharedSolarControlConsoleComponent.cs +++ b/Content.Shared/GameObjects/Components/Power/SharedSolarControlConsoleComponent.cs @@ -1,8 +1,8 @@ using System; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.UserInterface; -using Robust.Shared.Serialization; using Robust.Shared.Maths; +using Robust.Shared.Serialization; namespace Content.Shared.GameObjects.Components.Power { diff --git a/Content.Shared/GameObjects/Components/SharedDoAfterComponent.cs b/Content.Shared/GameObjects/Components/SharedDoAfterComponent.cs index b84d238700..9cea4de79d 100644 --- a/Content.Shared/GameObjects/Components/SharedDoAfterComponent.cs +++ b/Content.Shared/GameObjects/Components/SharedDoAfterComponent.cs @@ -1,7 +1,5 @@ using System; -using System.Collections.Generic; using Robust.Shared.GameObjects; -using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Map; using Robust.Shared.Serialization; diff --git a/Content.Shared/GameObjects/Components/SharedGasAnalyzerComponent.cs b/Content.Shared/GameObjects/Components/SharedGasAnalyzerComponent.cs index d5ab8162ad..641ab79ac8 100644 --- a/Content.Shared/GameObjects/Components/SharedGasAnalyzerComponent.cs +++ b/Content.Shared/GameObjects/Components/SharedGasAnalyzerComponent.cs @@ -1,10 +1,8 @@ -using Robust.Shared.GameObjects; +using System; +using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.Localization; using Robust.Shared.Serialization; -using System; -using System.Collections.Generic; -using System.Text; namespace Content.Shared.GameObjects.Components { diff --git a/Content.Shared/GameObjects/Components/SharedPaperComponent.cs b/Content.Shared/GameObjects/Components/SharedPaperComponent.cs index 71b4317d9c..ea8ab84577 100644 --- a/Content.Shared/GameObjects/Components/SharedPaperComponent.cs +++ b/Content.Shared/GameObjects/Components/SharedPaperComponent.cs @@ -1,5 +1,4 @@ using System; -using System.Net.Mime; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.Serialization; diff --git a/Content.Shared/GameObjects/Components/SharedRadiationStorm.cs b/Content.Shared/GameObjects/Components/SharedRadiationStorm.cs new file mode 100644 index 0000000000..efa28f0919 --- /dev/null +++ b/Content.Shared/GameObjects/Components/SharedRadiationStorm.cs @@ -0,0 +1,38 @@ +using System; +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization; + +namespace Content.Shared.GameObjects.Components +{ + public abstract class SharedRadiationPulseComponent : Component + { + public override string Name => "RadiationPulse"; + public override uint? NetID => ContentNetIDs.RADIATION_PULSE; + + /// + /// Radius of the pulse from its position + /// + public float Range => _range; + private float _range; + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + serializer.DataField(ref _range, "range", 5.0f); + } + } + + /// + /// For syncing the pulse's lifespan between client and server for the overlay + /// + [Serializable, NetSerializable] + public sealed class RadiationPulseMessage : ComponentState + { + public TimeSpan EndTime { get; } + + public RadiationPulseMessage(TimeSpan endTime) : base(ContentNetIDs.RADIATION_PULSE) + { + EndTime = endTime; + } + } +} \ No newline at end of file diff --git a/Content.Shared/GameObjects/Components/Trigger/TriggerVisuals.cs b/Content.Shared/GameObjects/Components/Trigger/TriggerVisuals.cs index a8d90904fe..d64a3bcdaa 100644 --- a/Content.Shared/GameObjects/Components/Trigger/TriggerVisuals.cs +++ b/Content.Shared/GameObjects/Components/Trigger/TriggerVisuals.cs @@ -1,7 +1,7 @@ using System; using Robust.Shared.Serialization; -namespace Content.Shared.GameObjects.Components.Triggers +namespace Content.Shared.GameObjects.Components.Trigger { [NetSerializable] [Serializable] diff --git a/Content.Shared/GameObjects/Components/Weapons/Ranged/SharedRangedBarrelComponent.cs b/Content.Shared/GameObjects/Components/Weapons/Ranged/SharedRangedBarrelComponent.cs index bbda3adeb6..5130abf347 100644 --- a/Content.Shared/GameObjects/Components/Weapons/Ranged/SharedRangedBarrelComponent.cs +++ b/Content.Shared/GameObjects/Components/Weapons/Ranged/SharedRangedBarrelComponent.cs @@ -1,6 +1,5 @@ using System; using Robust.Shared.GameObjects; -using Robust.Shared.Serialization; namespace Content.Shared.GameObjects.Components.Weapons.Ranged { diff --git a/Content.Shared/GameObjects/ContentNetIDs.cs b/Content.Shared/GameObjects/ContentNetIDs.cs index 6a38d3e669..9ecd4a918b 100644 --- a/Content.Shared/GameObjects/ContentNetIDs.cs +++ b/Content.Shared/GameObjects/ContentNetIDs.cs @@ -63,6 +63,7 @@ public const uint DISPOSABLE = 1056; public const uint GAS_ANALYZER = 1057; public const uint DO_AFTER = 1058; + public const uint RADIATION_PULSE = 1059; // Net IDs for integration tests. public const uint PREDICTION_TEST = 10001; diff --git a/Content.Shared/GameObjects/DrawDepth.cs b/Content.Shared/GameObjects/DrawDepth.cs index 5d9524ea3d..9f445d2e48 100644 --- a/Content.Shared/GameObjects/DrawDepth.cs +++ b/Content.Shared/GameObjects/DrawDepth.cs @@ -1,5 +1,5 @@ -using DrawDepthTag = Robust.Shared.GameObjects.DrawDepth; using Robust.Shared.Serialization; +using DrawDepthTag = Robust.Shared.GameObjects.DrawDepth; namespace Content.Shared.GameObjects { diff --git a/Content.Shared/GameObjects/EntitySystemMessages/VerbSystemMessages.cs b/Content.Shared/GameObjects/EntitySystemMessages/VerbSystemMessages.cs index 3c22097848..89e53b7db5 100644 --- a/Content.Shared/GameObjects/EntitySystemMessages/VerbSystemMessages.cs +++ b/Content.Shared/GameObjects/EntitySystemMessages/VerbSystemMessages.cs @@ -1,5 +1,5 @@ using System; -using System.Collections.Generic; +using Content.Shared.GameObjects.Verbs; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; using Robust.Shared.Utility; diff --git a/Content.Shared/GameObjects/EntitySystems/ExamineSystemShared.cs b/Content.Shared/GameObjects/EntitySystems/ExamineSystemShared.cs index 10aba7551f..71e0190d8d 100644 --- a/Content.Shared/GameObjects/EntitySystems/ExamineSystemShared.cs +++ b/Content.Shared/GameObjects/EntitySystems/ExamineSystemShared.cs @@ -1,5 +1,7 @@ -using Content.Shared.GameObjects.Components.Mobs; +using System; +using Content.Shared.GameObjects.Components.Mobs; using JetBrains.Annotations; +using Robust.Shared.Containers; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Maths; @@ -22,6 +24,15 @@ namespace Content.Shared.GameObjects.EntitySystems public const float ExamineRangeSquared = ExamineRange * ExamineRange; protected const float ExamineDetailsRange = 3f; + private static bool IsInDetailsRange(IEntity examiner, IEntity entity) + { + return Get() + .InRangeUnobstructed(examiner.Transform.MapPosition, entity.Transform.MapPosition, + ExamineDetailsRange, predicate: entity0 => entity0 == examiner || entity0 == entity, + ignoreInsideBlocker: true) && + examiner.IsInSameOrNoContainer(entity); + } + [Pure] protected static bool CanExamine(IEntity examiner, IEntity examined) { @@ -40,9 +51,16 @@ namespace Content.Shared.GameObjects.EntitySystems return false; } - return EntitySystem.Get() + Func predicate = entity => entity == examiner || entity == examined; + + if (ContainerHelpers.TryGetContainer(examiner, out var container)) + { + predicate += entity => entity == container.Owner; + } + + return Get() .InRangeUnobstructed(examiner.Transform.MapPosition, examined.Transform.MapPosition, - ExamineRange, predicate: entity => entity == examiner || entity == examined, ignoreInsideBlocker:true); + ExamineRange, predicate: predicate, ignoreInsideBlocker:true); } public static FormattedMessage GetExamineText(IEntity entity, IEntity examiner) @@ -60,15 +78,11 @@ namespace Content.Shared.GameObjects.EntitySystems message.PushColor(Color.DarkGray); - var inDetailsRange = Get() - .InRangeUnobstructed(examiner.Transform.MapPosition, entity.Transform.MapPosition, - ExamineDetailsRange, predicate: entity0 => entity0 == examiner || entity0 == entity, ignoreInsideBlocker: true); - //Add component statuses from components that report one foreach (var examineComponent in entity.GetAllComponents()) { var subMessage = new FormattedMessage(); - examineComponent.Examine(subMessage, inDetailsRange); + examineComponent.Examine(subMessage, IsInDetailsRange(examiner, entity)); if (subMessage.Tags.Count == 0) continue; diff --git a/Content.Shared/GameObjects/EntitySystems/SharedCombatModeSystem.cs b/Content.Shared/GameObjects/EntitySystems/SharedCombatModeSystem.cs index 53833a14d0..0c17b7c518 100644 --- a/Content.Shared/GameObjects/EntitySystems/SharedCombatModeSystem.cs +++ b/Content.Shared/GameObjects/EntitySystems/SharedCombatModeSystem.cs @@ -1,12 +1,7 @@ using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.EntitySystemMessages; -using Content.Shared.Interfaces; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.Random; -using Robust.Shared.IoC; -using Robust.Shared.Random; -using Logger = Robust.Shared.Log.Logger; namespace Content.Shared.GameObjects.EntitySystems { diff --git a/Content.Shared/GameObjects/EntitySystems/SharedConstructionSystem.cs b/Content.Shared/GameObjects/EntitySystems/SharedConstructionSystem.cs index 1a3ddb7f6e..eb046d4902 100644 --- a/Content.Shared/GameObjects/EntitySystems/SharedConstructionSystem.cs +++ b/Content.Shared/GameObjects/EntitySystems/SharedConstructionSystem.cs @@ -1,6 +1,5 @@ using System; using Content.Shared.Construction; -using JetBrains.Annotations; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.IoC; diff --git a/Content.Shared/GameObjects/EntitySystems/SharedGasTileOverlaySystem.cs b/Content.Shared/GameObjects/EntitySystems/SharedGasTileOverlaySystem.cs index 111f81f10d..346f44d733 100644 --- a/Content.Shared/GameObjects/EntitySystems/SharedGasTileOverlaySystem.cs +++ b/Content.Shared/GameObjects/EntitySystems/SharedGasTileOverlaySystem.cs @@ -2,7 +2,6 @@ using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Map; -using Robust.Shared.Maths; using Robust.Shared.Serialization; namespace Content.Shared.GameObjects.EntitySystems diff --git a/Content.Shared/GameObjects/EntitySystems/SharedMoverSystem.cs b/Content.Shared/GameObjects/EntitySystems/SharedMoverSystem.cs index 8c2cdcc9c3..7c9a4537a2 100644 --- a/Content.Shared/GameObjects/EntitySystems/SharedMoverSystem.cs +++ b/Content.Shared/GameObjects/EntitySystems/SharedMoverSystem.cs @@ -29,8 +29,6 @@ namespace Content.Shared.GameObjects.EntitySystems { base.Initialize(); - EntityQuery = new TypeEntityQuery(typeof(IMoverComponent)); - var moveUpCmdHandler = new MoverDirInputCmdHandler(Direction.North); var moveLeftCmdHandler = new MoverDirInputCmdHandler(Direction.West); var moveRightCmdHandler = new MoverDirInputCmdHandler(Direction.East); @@ -54,18 +52,17 @@ namespace Content.Shared.GameObjects.EntitySystems base.Shutdown(); } - protected void UpdateKinematics(ITransformComponent transform, IMoverComponent mover, IPhysicsComponent physics, - ICollidableComponent? collider = null) + protected void UpdateKinematics(ITransformComponent transform, IMoverComponent mover, ICollidableComponent collidable) { - physics.EnsureController(); + collidable.EnsureController(); var weightless = !transform.Owner.HasComponent() && _physicsManager.IsWeightless(transform.GridPosition); - if (weightless && collider != null) + if (weightless) { // No gravity: is our entity touching anything? - var touching = IsAroundCollider(transform, mover, collider); + var touching = IsAroundCollider(transform, mover, collidable); if (!touching) { @@ -78,18 +75,16 @@ namespace Content.Shared.GameObjects.EntitySystems var combined = walkDir + sprintDir; if (combined.LengthSquared < 0.001 || !ActionBlockerSystem.CanMove(mover.Owner) && !weightless) { - if (physics.TryGetController(out MoverController controller)) + if (collidable.TryGetController(out MoverController controller)) { controller.StopMoving(); } } else { - //Console.WriteLine($"{IoCManager.Resolve().TickStamp}: {combined}"); - if (weightless) { - if (physics.TryGetController(out MoverController controller)) + if (collidable.TryGetController(out MoverController controller)) { controller.Push(combined, mover.CurrentPushSpeed); } @@ -99,12 +94,13 @@ namespace Content.Shared.GameObjects.EntitySystems } var total = walkDir * mover.CurrentWalkSpeed + sprintDir * mover.CurrentSprintSpeed; - //Console.WriteLine($"{walkDir} ({mover.CurrentWalkSpeed}) + {sprintDir} ({mover.CurrentSprintSpeed}): {total}"); - {if (physics.TryGetController(out MoverController controller)) { - controller.Move(total, 1); - }} + if (collidable.TryGetController(out MoverController controller)) + { + controller.Move(total, 1); + } + } transform.LocalRotation = total.GetDir().ToAngle(); diff --git a/Content.Shared/GameObjects/Verbs/GlobalVerb.cs b/Content.Shared/GameObjects/Verbs/GlobalVerb.cs index e1b55f14a5..e14830fab3 100644 --- a/Content.Shared/GameObjects/Verbs/GlobalVerb.cs +++ b/Content.Shared/GameObjects/Verbs/GlobalVerb.cs @@ -2,7 +2,7 @@ using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Verbs { /// /// A verb is an action in the right click menu of an entity. @@ -20,6 +20,12 @@ namespace Content.Shared.GameObjects /// public virtual bool RequireInteractionRange => true; + /// + /// If true, this verb requires both the user and the entity on which + /// this verb resides to be in the same container or no container. + /// + public virtual bool BlockedByContainers => true; + /// /// Gets the visible verb data for the user. /// diff --git a/Content.Shared/GameObjects/Verbs/Verb.cs b/Content.Shared/GameObjects/Verbs/Verb.cs index a2381082c4..99cf50b24d 100644 --- a/Content.Shared/GameObjects/Verbs/Verb.cs +++ b/Content.Shared/GameObjects/Verbs/Verb.cs @@ -2,7 +2,7 @@ using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Verbs { /// /// A verb is an action in the right click menu of an entity. @@ -20,6 +20,12 @@ namespace Content.Shared.GameObjects /// public virtual bool RequireInteractionRange => true; + /// + /// If true, this verb requires both the user and the entity on which + /// this verb resides to be in the same container or no container. + /// + public virtual bool BlockedByContainers => true; + /// /// Gets the visible verb data for the user. /// @@ -48,7 +54,7 @@ namespace Content.Shared.GameObjects /// /// - /// Sub class of that works on a specific type of component, + /// Sub class of that works on a specific type of component, /// to reduce casting boiler plate for implementations. /// /// The type of component that this verb will run on. diff --git a/Content.Shared/GameObjects/Verbs/VerbCategories.cs b/Content.Shared/GameObjects/Verbs/VerbCategories.cs index bd5c168eaa..4311a7366b 100644 --- a/Content.Shared/GameObjects/Verbs/VerbCategories.cs +++ b/Content.Shared/GameObjects/Verbs/VerbCategories.cs @@ -1,4 +1,4 @@ -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Verbs { /// /// Standard verb categories. diff --git a/Content.Shared/GameObjects/Verbs/VerbCategoryData.cs b/Content.Shared/GameObjects/Verbs/VerbCategoryData.cs index 4e19f04047..ad555cd447 100644 --- a/Content.Shared/GameObjects/Verbs/VerbCategoryData.cs +++ b/Content.Shared/GameObjects/Verbs/VerbCategoryData.cs @@ -1,6 +1,6 @@ using Robust.Shared.Utility; -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Verbs { /// /// Contains combined name and icon information for a verb category. diff --git a/Content.Shared/GameObjects/Verbs/VerbData.cs b/Content.Shared/GameObjects/Verbs/VerbData.cs index eeed3981b4..94f72e72f3 100644 --- a/Content.Shared/GameObjects/Verbs/VerbData.cs +++ b/Content.Shared/GameObjects/Verbs/VerbData.cs @@ -2,7 +2,7 @@ using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Utility; -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Verbs { /// /// Stores visual data for a verb. diff --git a/Content.Shared/GameObjects/Verbs/VerbUtility.cs b/Content.Shared/GameObjects/Verbs/VerbUtility.cs index 2c46838320..275a00330f 100644 --- a/Content.Shared/GameObjects/Verbs/VerbUtility.cs +++ b/Content.Shared/GameObjects/Verbs/VerbUtility.cs @@ -4,7 +4,7 @@ using System.Reflection; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Utility; -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Verbs { public static class VerbUtility { diff --git a/Content.Shared/GameObjects/Verbs/VerbVisibility.cs b/Content.Shared/GameObjects/Verbs/VerbVisibility.cs index 05fcaa218b..dde0621f78 100644 --- a/Content.Shared/GameObjects/Verbs/VerbVisibility.cs +++ b/Content.Shared/GameObjects/Verbs/VerbVisibility.cs @@ -1,4 +1,4 @@ -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Verbs { /// /// Possible states of visibility for the verb in the right click menu. diff --git a/Content.Shared/Health/BodySystem/BodyPart/BodyPartProperties/ArmLength.cs b/Content.Shared/Health/BodySystem/BodyPart/BodyPartProperties/ArmLength.cs index 5ae478412c..617bd45050 100644 --- a/Content.Shared/Health/BodySystem/BodyPart/BodyPartProperties/ArmLength.cs +++ b/Content.Shared/Health/BodySystem/BodyPart/BodyPartProperties/ArmLength.cs @@ -1,15 +1,13 @@ - - +using System; using Robust.Shared.Interfaces.Serialization; using Robust.Shared.Serialization; -using System; -namespace Content.Shared.BodySystem { +namespace Content.Shared.Health.BodySystem.BodyPart.BodyPartProperties { [NetSerializable, Serializable] class ArmLength : IExposeData { private float _length; - + public void ExposeData(ObjectSerializer serializer){ serializer.DataField(ref _length, "length", 2f); } diff --git a/Content.Shared/Health/BodySystem/BodyPart/BodyPartPrototype.cs b/Content.Shared/Health/BodySystem/BodyPart/BodyPartPrototype.cs index 4edc6a1d8d..d400501f6d 100644 --- a/Content.Shared/Health/BodySystem/BodyPart/BodyPartPrototype.cs +++ b/Content.Shared/Health/BodySystem/BodyPart/BodyPartPrototype.cs @@ -6,13 +6,12 @@ using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; using YamlDotNet.RepresentationModel; - -namespace Content.Shared.BodySystem { +namespace Content.Shared.Health.BodySystem.BodyPart { /// /// Prototype for the BodyPart class. - /// + /// [Prototype("bodyPart")] [NetSerializable, Serializable] public class BodyPartPrototype : IPrototype, IIndexedPrototype { @@ -36,7 +35,7 @@ namespace Content.Shared.BodySystem { [ViewVariables] public string Name => _name; - + [ViewVariables] public string Plural => _plural; @@ -48,19 +47,19 @@ namespace Content.Shared.BodySystem { [ViewVariables] public BodyPartType PartType => _partType; - + [ViewVariables] public int Durability => _durability; - + [ViewVariables] - public int DestroyThreshold => _destroyThreshold; - + public int DestroyThreshold => _destroyThreshold; + [ViewVariables] public float Resistance => _resistance; - + [ViewVariables] public int Size => _size; - + [ViewVariables] public BodyPartCompatibility Compatibility => _compatibility; diff --git a/Content.Shared/Health/BodySystem/BodyPreset/BodyPresetPrototype.cs b/Content.Shared/Health/BodySystem/BodyPreset/BodyPresetPrototype.cs index 7020bdf84c..f36202a5a4 100644 --- a/Content.Shared/Health/BodySystem/BodyPreset/BodyPresetPrototype.cs +++ b/Content.Shared/Health/BodySystem/BodyPreset/BodyPresetPrototype.cs @@ -1,16 +1,15 @@ using System; using System.Collections.Generic; -using Robust.Shared.Interfaces.Serialization; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; using YamlDotNet.RepresentationModel; -namespace Content.Shared.BodySystem { +namespace Content.Shared.Health.BodySystem.BodyPreset { /// /// Prototype for the BodyPreset class. - /// + /// [Prototype("bodyPreset")] [NetSerializable, Serializable] public class BodyPresetPrototype : IPrototype, IIndexedPrototype { @@ -23,7 +22,7 @@ namespace Content.Shared.BodySystem { [ViewVariables] public string Name => _name; - + [ViewVariables] public Dictionary PartIDs => _partIDs; diff --git a/Content.Shared/Health/BodySystem/BodyScanner/BodyScannerSharedValues.cs b/Content.Shared/Health/BodySystem/BodyScanner/BodyScannerSharedValues.cs index ef4611b5d9..0f9f83cf6c 100644 --- a/Content.Shared/Health/BodySystem/BodyScanner/BodyScannerSharedValues.cs +++ b/Content.Shared/Health/BodySystem/BodyScanner/BodyScannerSharedValues.cs @@ -1,17 +1,9 @@ -using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Components.UserInterface; -using Robust.Shared.IoC; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; -using System; +using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using Robust.Shared.GameObjects.Components.UserInterface; +using Robust.Shared.Serialization; - - -namespace Content.Shared.BodySystem +namespace Content.Shared.Health.BodySystem.BodyScanner { diff --git a/Content.Shared/Health/BodySystem/BodyTemplate/BodyTemplatePrototype.cs b/Content.Shared/Health/BodySystem/BodyTemplate/BodyTemplatePrototype.cs index 11f7ad93f3..50ac37c065 100644 --- a/Content.Shared/Health/BodySystem/BodyTemplate/BodyTemplatePrototype.cs +++ b/Content.Shared/Health/BodySystem/BodyTemplate/BodyTemplatePrototype.cs @@ -1,16 +1,15 @@ using System; using System.Collections.Generic; -using Robust.Shared.Interfaces.Serialization; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; using YamlDotNet.RepresentationModel; -namespace Content.Shared.BodySystem { +namespace Content.Shared.Health.BodySystem.BodyTemplate { /// /// Prototype for the BodyTemplate class. - /// + /// [Prototype("bodyTemplate")] [NetSerializable, Serializable] public class BodyTemplatePrototype : IPrototype, IIndexedPrototype { @@ -25,13 +24,13 @@ namespace Content.Shared.BodySystem { [ViewVariables] public string Name => _name; - + [ViewVariables] public string CenterSlot => _centerSlot; - + [ViewVariables] public Dictionary Slots => _slots; - + [ViewVariables] public Dictionary> Connections => _connections; diff --git a/Content.Shared/Health/BodySystem/BodysystemValues.cs b/Content.Shared/Health/BodySystem/BodysystemValues.cs index cb36135680..ce16122f8d 100644 --- a/Content.Shared/Health/BodySystem/BodysystemValues.cs +++ b/Content.Shared/Health/BodySystem/BodysystemValues.cs @@ -1,5 +1,5 @@  -namespace Content.Shared.BodySystem +namespace Content.Shared.Health.BodySystem { /// /// Used to determine whether a BodyPart can connect to another BodyPart. diff --git a/Content.Shared/Health/BodySystem/Mechanism/MechanismPrototype.cs b/Content.Shared/Health/BodySystem/Mechanism/MechanismPrototype.cs index aa9f2f0062..acf2711f28 100644 --- a/Content.Shared/Health/BodySystem/Mechanism/MechanismPrototype.cs +++ b/Content.Shared/Health/BodySystem/Mechanism/MechanismPrototype.cs @@ -1,19 +1,15 @@ using System; -using System.Collections.Generic; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; using YamlDotNet.RepresentationModel; - - - -namespace Content.Shared.BodySystem +namespace Content.Shared.Health.BodySystem.Mechanism { /// /// Prototype for the Mechanism class. - /// + /// [Prototype("mechanism")] [NetSerializable, Serializable] public class MechanismPrototype : IPrototype, IIndexedPrototype @@ -22,7 +18,6 @@ namespace Content.Shared.BodySystem private string _name; private string _description; private string _examineMessage; - private string _spritePath; private string _rsiPath; private string _rsiState; private int _durability; diff --git a/Content.Shared/Health/BodySystem/Surgery/GenericSurgeryUIMessages.cs b/Content.Shared/Health/BodySystem/Surgery/GenericSurgeryUIMessages.cs index c1657e4ac1..eee26afde0 100644 --- a/Content.Shared/Health/BodySystem/Surgery/GenericSurgeryUIMessages.cs +++ b/Content.Shared/Health/BodySystem/Surgery/GenericSurgeryUIMessages.cs @@ -1,11 +1,9 @@ -using Robust.Shared.GameObjects; +using System; +using System.Collections.Generic; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.Serialization; -using System; -using System.Collections.Generic; -using System.Text; -namespace Content.Shared.BodySystem +namespace Content.Shared.Health.BodySystem.Surgery { [Serializable, NetSerializable] diff --git a/Content.Shared/Health/DamageContainer/AbstractDamageContainer.cs b/Content.Shared/Health/DamageContainer/AbstractDamageContainer.cs index 80b258e284..fb146adf46 100644 --- a/Content.Shared/Health/DamageContainer/AbstractDamageContainer.cs +++ b/Content.Shared/Health/DamageContainer/AbstractDamageContainer.cs @@ -1,10 +1,10 @@ -using Robust.Shared.Serialization; -using Robust.Shared.ViewVariables; -using System; +using System; using System.Collections.Generic; using System.Linq; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; -namespace Content.Shared.BodySystem +namespace Content.Shared.Health.DamageContainer { public enum DamageClass { Brute, Burn, Toxin, Airloss } public enum DamageType { Blunt, Piercing, Heat, Disintegration, Cellular, DNA, Airloss } diff --git a/Content.Shared/Health/DamageContainer/BiologicalDamageContainer.cs b/Content.Shared/Health/DamageContainer/BiologicalDamageContainer.cs index 04741abb22..e2b26b04e5 100644 --- a/Content.Shared/Health/DamageContainer/BiologicalDamageContainer.cs +++ b/Content.Shared/Health/DamageContainer/BiologicalDamageContainer.cs @@ -1,9 +1,8 @@ -using Robust.Shared.Serialization; -using System; +using System; using System.Collections.Generic; -using System.Linq; +using Robust.Shared.Serialization; -namespace Content.Shared.BodySystem +namespace Content.Shared.Health.DamageContainer { [NetSerializable, Serializable] public class BiologicalDamageContainer : AbstractDamageContainer diff --git a/Content.Shared/Interfaces/Chemistry/IMetabolizable.cs b/Content.Shared/Interfaces/Chemistry/IMetabolizable.cs index 1973012d52..3cb72d5a9d 100644 --- a/Content.Shared/Interfaces/Chemistry/IMetabolizable.cs +++ b/Content.Shared/Interfaces/Chemistry/IMetabolizable.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using Content.Shared.Chemistry; +using Content.Shared.Chemistry; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Serialization; diff --git a/Content.Shared/Interfaces/IModuleManager.cs b/Content.Shared/Interfaces/IModuleManager.cs index f6e4ecc222..420c15dde0 100644 --- a/Content.Shared/Interfaces/IModuleManager.cs +++ b/Content.Shared/Interfaces/IModuleManager.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Content.Shared.Interfaces +namespace Content.Shared.Interfaces { /// /// Provides a simple way to check whether calling code is being run by diff --git a/Content.Shared/Kitchen/RecipeManager.cs b/Content.Shared/Kitchen/RecipeManager.cs index c731d8994f..c5f7657a69 100644 --- a/Content.Shared/Kitchen/RecipeManager.cs +++ b/Content.Shared/Kitchen/RecipeManager.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using Content.Shared.Prototypes.Kitchen; using Robust.Shared.IoC; using Robust.Shared.Prototypes; diff --git a/Content.Shared/Kitchen/SharedMicrowaveComponent.cs b/Content.Shared/Kitchen/SharedMicrowaveComponent.cs index ba8ae5c499..92e6e9324d 100644 --- a/Content.Shared/Kitchen/SharedMicrowaveComponent.cs +++ b/Content.Shared/Kitchen/SharedMicrowaveComponent.cs @@ -1,10 +1,9 @@ using System; -using System.Collections.Generic; using Content.Shared.Chemistry; using Content.Shared.GameObjects; using Robust.Shared.GameObjects; -using Robust.Shared.Serialization; using Robust.Shared.GameObjects.Components.UserInterface; +using Robust.Shared.Serialization; namespace Content.Shared.Kitchen { diff --git a/Content.Shared/Maps/ContentTileDefinition.cs b/Content.Shared/Maps/ContentTileDefinition.cs index 419a1bd812..1cf66f57eb 100644 --- a/Content.Shared/Maps/ContentTileDefinition.cs +++ b/Content.Shared/Maps/ContentTileDefinition.cs @@ -1,13 +1,10 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; using Robust.Shared.Interfaces.Map; using Robust.Shared.Prototypes; using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; -using Robust.Shared.GameObjects; -using Robust.Shared.Serialization; namespace Content.Shared.Maps { @@ -26,6 +23,7 @@ namespace Content.Shared.Maps public bool CanCrowbar { get; private set; } public string FootstepSounds { get; private set; } public float Friction { get; set; } + public float ThermalConductivity { get; set; } public string ItemDropPrototypeName { get; private set; } public void AssignTileId(ushort id) @@ -68,6 +66,15 @@ namespace Content.Shared.Maps Friction = 0; } + if (mapping.TryGetNode("thermalConductivity", out node)) + { + ThermalConductivity = node.AsFloat(); + } + else + { + ThermalConductivity = 0.05f; + } + if (mapping.TryGetNode("item_drop", out node)) { ItemDropPrototypeName = node.ToString(); diff --git a/Content.Shared/Maps/TurfHelpers.cs b/Content.Shared/Maps/TurfHelpers.cs index 1f81bc6f8f..b02472cfa5 100644 --- a/Content.Shared/Maps/TurfHelpers.cs +++ b/Content.Shared/Maps/TurfHelpers.cs @@ -12,6 +12,34 @@ namespace Content.Shared.Maps { public static class TurfHelpers { + /// + /// Returns the content tile definition for a tile. + /// + public static ContentTileDefinition GetContentTileDefinition(this Tile tile) + { + var tileDefinitionManager = IoCManager.Resolve(); + return (ContentTileDefinition)tileDefinitionManager[tile.TypeId]; + } + + /// + /// Attempts to get the turf at map indices with grid id or null if no such turf is found. + /// + public static TileRef? GetTileRef(this MapIndices mapIndices, GridId gridId) + { + if (!gridId.IsValid()) + return null; + + var mapManager = IoCManager.Resolve(); + + if (!mapManager.TryGetGrid(gridId, out var grid)) + return null; + + if (!grid.TryGetTileRef(mapIndices, out var tile)) + return null; + + return tile; + } + /// /// Attempts to get the turf at a certain coordinates or null if no such turf is found. /// @@ -55,13 +83,13 @@ namespace Content.Shared.Maps foreach (var body in query) { if (body.CanCollide && body.Hard && (body.CollisionLayer & (int) CollisionGroup.Impassable) != 0) - return false; + return true; if (filterMobs && (body.CollisionLayer & (int) CollisionGroup.MobMask) != 0) - return false; + return true; } - return true; + return false; } /// diff --git a/Content.Shared/Physics/CollisionGroup.cs b/Content.Shared/Physics/CollisionGroup.cs index 688d4e7e0c..0834d69787 100644 --- a/Content.Shared/Physics/CollisionGroup.cs +++ b/Content.Shared/Physics/CollisionGroup.cs @@ -1,8 +1,8 @@ using System; using JetBrains.Annotations; using Robust.Shared.Map; -using RobustPhysics = Robust.Shared.Physics; using Robust.Shared.Serialization; +using RobustPhysics = Robust.Shared.Physics; namespace Content.Shared.Physics { @@ -20,6 +20,7 @@ namespace Content.Shared.Physics VaultImpassable = 1 << 3, // 8 Things that cannot be jumped over, not half walls or tables SmallImpassable = 1 << 4, // 16 Things a smaller object - a cat, a crab - can't go through - a wall, but not a computer terminal or a table Clickable = 1 << 5, // 32 Temporary "dummy" layer to ensure that objects can still be clicked even if they don't collide with anything (you can't interact with objects that have no layer, including items) + GhostImpassable = 1 << 6, // 64 Things impassible by ghosts/observers, ie blessed tiles or forcefields MapGrid = MapGridHelpers.CollisionGroup, // Map grids, like shuttles. This is the actual grid itself, not the walls or other entities connected to the grid. diff --git a/Content.Shared/Physics/VaporController.cs b/Content.Shared/Physics/VaporController.cs index 190dd62b54..55a2f9d827 100644 --- a/Content.Shared/Physics/VaporController.cs +++ b/Content.Shared/Physics/VaporController.cs @@ -1,8 +1,5 @@ using Robust.Shared.Maths; using Robust.Shared.Physics; -using System; -using System.Collections.Generic; -using System.Text; namespace Content.Shared.Physics { diff --git a/Content.Shared/Preferences/HumanoidCharacterProfile.cs b/Content.Shared/Preferences/HumanoidCharacterProfile.cs index db068e358d..58633d2a2a 100644 --- a/Content.Shared/Preferences/HumanoidCharacterProfile.cs +++ b/Content.Shared/Preferences/HumanoidCharacterProfile.cs @@ -1,9 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using Content.Shared.Antags; -using Robust.Shared.IoC; -using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.Preferences diff --git a/Content.Shared/Prototypes/Cargo/CargoOrderData.cs b/Content.Shared/Prototypes/Cargo/CargoOrderData.cs index 0882db8e0d..171ec99bd4 100644 --- a/Content.Shared/Prototypes/Cargo/CargoOrderData.cs +++ b/Content.Shared/Prototypes/Cargo/CargoOrderData.cs @@ -1,9 +1,5 @@ -using Robust.Shared.Serialization; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System; +using Robust.Shared.Serialization; namespace Content.Shared.Prototypes.Cargo { diff --git a/Content.Shared/Prototypes/Cargo/CargoProductPrototype.cs b/Content.Shared/Prototypes/Cargo/CargoProductPrototype.cs index 57b1aedc76..3cfc1497f5 100644 --- a/Content.Shared/Prototypes/Cargo/CargoProductPrototype.cs +++ b/Content.Shared/Prototypes/Cargo/CargoProductPrototype.cs @@ -1,10 +1,10 @@ -using Robust.Shared.GameObjects; +using System; +using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; -using System; using YamlDotNet.RepresentationModel; namespace Content.Shared.Prototypes.Cargo diff --git a/Content.Shared/Prototypes/Kitchen/MicrowaveMealRecipePrototype.cs b/Content.Shared/Prototypes/Kitchen/MicrowaveMealRecipePrototype.cs index 0d64a7d073..d0c6d44357 100644 --- a/Content.Shared/Prototypes/Kitchen/MicrowaveMealRecipePrototype.cs +++ b/Content.Shared/Prototypes/Kitchen/MicrowaveMealRecipePrototype.cs @@ -1,10 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Collections.Generic; using Robust.Shared.Localization; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; namespace Content.Shared.Prototypes.Kitchen diff --git a/Content.Shared/Prototypes/PDA/UplinkStoreListingPrototype.cs b/Content.Shared/Prototypes/PDA/UplinkStoreListingPrototype.cs index a4af3f9540..a00d5ff666 100644 --- a/Content.Shared/Prototypes/PDA/UplinkStoreListingPrototype.cs +++ b/Content.Shared/Prototypes/PDA/UplinkStoreListingPrototype.cs @@ -1,5 +1,4 @@ using Content.Shared.GameObjects.Components.PDA; -using Robust.Shared.Maths; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using YamlDotNet.RepresentationModel; diff --git a/Content.Shared/Roles/AntagPrototype.cs b/Content.Shared/Roles/AntagPrototype.cs index a253d13a1a..caa0776fca 100644 --- a/Content.Shared/Roles/AntagPrototype.cs +++ b/Content.Shared/Roles/AntagPrototype.cs @@ -1,12 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; using Robust.Shared.Localization; using Robust.Shared.Prototypes; using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; -namespace Content.Shared.Antags +namespace Content.Shared.Roles { /// /// Describes information for a single antag. diff --git a/Content.Shared/Roles/JobPrototype.cs b/Content.Shared/Roles/JobPrototype.cs index 298a33530a..63aea01f21 100644 --- a/Content.Shared/Roles/JobPrototype.cs +++ b/Content.Shared/Roles/JobPrototype.cs @@ -1,12 +1,11 @@ using System; using System.Collections.Generic; -using Content.Server.Jobs; using Robust.Shared.Localization; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using YamlDotNet.RepresentationModel; -namespace Content.Shared.Jobs +namespace Content.Shared.Roles { /// /// Describes information for a single job on the station. diff --git a/Content.Shared/Roles/JobSpecial.cs b/Content.Shared/Roles/JobSpecial.cs index 6b77fa5400..edc3f091de 100644 --- a/Content.Shared/Roles/JobSpecial.cs +++ b/Content.Shared/Roles/JobSpecial.cs @@ -2,7 +2,7 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Serialization; using Robust.Shared.Serialization; -namespace Content.Server.Jobs +namespace Content.Shared.Roles { /// /// Provides special hooks for when jobs get spawned in/equipped. diff --git a/Content.Shared/Roles/StartingGearPrototype.cs b/Content.Shared/Roles/StartingGearPrototype.cs index 154e0dbe3e..e8213cea74 100644 --- a/Content.Shared/Roles/StartingGearPrototype.cs +++ b/Content.Shared/Roles/StartingGearPrototype.cs @@ -7,7 +7,7 @@ using Robust.Shared.ViewVariables; using YamlDotNet.RepresentationModel; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; -namespace Content.Shared.Jobs +namespace Content.Shared.Roles { [Prototype("startingGear")] public class StartingGearPrototype : IPrototype, IIndexedPrototype diff --git a/Content.Shared/Sandbox/SharedSandboxManager.cs b/Content.Shared/Sandbox/SharedSandboxManager.cs index 774ad66443..5276cb911c 100644 --- a/Content.Shared/Sandbox/SharedSandboxManager.cs +++ b/Content.Shared/Sandbox/SharedSandboxManager.cs @@ -1,4 +1,4 @@ -using Lidgren.Network; +using Lidgren.Network; using Robust.Shared.Interfaces.Network; using Robust.Shared.Network; @@ -66,5 +66,43 @@ namespace Content.Shared.Sandbox } } + + protected sealed class MsgSandboxGiveAghost : NetMessage + { + #region REQUIRED + + public const MsgGroups GROUP = MsgGroups.Command; + public const string NAME = nameof(MsgSandboxGiveAghost); + public MsgSandboxGiveAghost(INetChannel channel) : base(NAME, GROUP) { } + + #endregion + public override void ReadFromBuffer(NetIncomingMessage buffer) + { + } + + public override void WriteToBuffer(NetOutgoingMessage buffer) + { + } + + } + + protected sealed class MsgSandboxSuicide : NetMessage + { + #region REQUIRED + + public const MsgGroups GROUP = MsgGroups.Command; + public const string NAME = nameof(MsgSandboxSuicide); + public MsgSandboxSuicide(INetChannel channel) : base(NAME, GROUP) { } + + #endregion + public override void ReadFromBuffer(NetIncomingMessage buffer) + { + } + + public override void WriteToBuffer(NetOutgoingMessage buffer) + { + } + + } } } diff --git a/Content.Shared/SharedGameTicker.cs b/Content.Shared/SharedGameTicker.cs index 2fea6dd16b..cd16b79191 100644 --- a/Content.Shared/SharedGameTicker.cs +++ b/Content.Shared/SharedGameTicker.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using Lidgren.Network; -using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.Network; diff --git a/Content.Shared/Utility/TemperatureHelpers.cs b/Content.Shared/Utility/TemperatureHelpers.cs index 529c8d6746..1d4e61ca48 100644 --- a/Content.Shared/Utility/TemperatureHelpers.cs +++ b/Content.Shared/Utility/TemperatureHelpers.cs @@ -1,7 +1,4 @@ using Content.Shared.Maths; -using System; -using System.Collections.Generic; -using System.Text; namespace Content.Shared.Utility { diff --git a/Content.Tests/Shared/BodyTemplateTest.cs b/Content.Tests/Shared/BodyTemplateTest.cs index bb246529dd..87b3455989 100644 --- a/Content.Tests/Shared/BodyTemplateTest.cs +++ b/Content.Tests/Shared/BodyTemplateTest.cs @@ -1,10 +1,8 @@ - -using Content.Server.BodySystem; -using Content.Shared.BodySystem; +using System.Collections.Generic; +using Content.Server.Health.BodySystem.BodyTemplate; +using Content.Shared.Health.BodySystem; using NUnit.Framework; using Robust.UnitTesting; -using System; -using System.Collections.Generic; namespace Content.Tests.Shared { diff --git a/Content.Tests/Shared/Chemistry/ReagentUnit_Tests.cs b/Content.Tests/Shared/Chemistry/ReagentUnit_Tests.cs index e06290fb54..8e6e6ab591 100644 --- a/Content.Tests/Shared/Chemistry/ReagentUnit_Tests.cs +++ b/Content.Tests/Shared/Chemistry/ReagentUnit_Tests.cs @@ -1,6 +1,6 @@ -using Content.Shared.Chemistry; +using System; +using Content.Shared.Chemistry; using NUnit.Framework; -using System; namespace Content.Tests.Shared.Chemistry { diff --git a/Content.Tests/Shared/Gamestates/ComponentStateNullTest.cs b/Content.Tests/Shared/Gamestates/ComponentStateNullTest.cs index 5bf4709ff5..93bfa94513 100644 --- a/Content.Tests/Shared/Gamestates/ComponentStateNullTest.cs +++ b/Content.Tests/Shared/Gamestates/ComponentStateNullTest.cs @@ -8,7 +8,7 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Reflection; using Robust.Shared.Reflection; -namespace Content.Tests.Shared.GameStates +namespace Content.Tests.Shared.Gamestates { [TestFixture] public class ComponentStateNullTest diff --git a/Resources/Audio/Announcements/power_off.ogg b/Resources/Audio/Announcements/power_off.ogg new file mode 100644 index 0000000000..7dcd968c73 Binary files /dev/null and b/Resources/Audio/Announcements/power_off.ogg differ diff --git a/Resources/Audio/Announcements/power_on.ogg b/Resources/Audio/Announcements/power_on.ogg new file mode 100644 index 0000000000..ca641eafe0 Binary files /dev/null and b/Resources/Audio/Announcements/power_on.ogg differ diff --git a/Resources/Audio/Announcements/radiation.ogg b/Resources/Audio/Announcements/radiation.ogg new file mode 100644 index 0000000000..610f6cd8c0 Binary files /dev/null and b/Resources/Audio/Announcements/radiation.ogg differ diff --git a/Resources/Audio/Machines/machine_vend.ogg b/Resources/Audio/Machines/machine_vend.ogg new file mode 100644 index 0000000000..8f7c187d0c Binary files /dev/null and b/Resources/Audio/Machines/machine_vend.ogg differ diff --git a/Resources/Groups/groups.yml b/Resources/Groups/groups.yml index ce1885473a..1cf921b5f8 100644 --- a/Resources/Groups/groups.yml +++ b/Resources/Groups/groups.yml @@ -36,6 +36,7 @@ - listplayers - loc - hostlogin + - events - Index: 100 Name: Administrator @@ -93,6 +94,7 @@ - unanchor - tubeconnections - tilewalls + - events CanViewVar: true CanAdminPlace: true @@ -181,6 +183,7 @@ - settemp - setatmostemp - tilewalls + - events CanViewVar: true CanAdminPlace: true CanScript: true diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml index ff9e52ed2e..e387f022c3 100644 --- a/Resources/Maps/saltern.yml +++ b/Resources/Maps/saltern.yml @@ -112,9 +112,9 @@ grids: - ind: "-1,-2" tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA6AAAAOgAAADoAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAOgAAADoAAAA6AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA6AAAAOgAAADoAAAA6AAAAOgAAADoAAAA6AAAAOgAAADoAAAA6AAAAOgAAADoAAAA0AAAANAAAADQAAAA+AAAAPQAAAD0AAAA9AAAAPQAAAD0AAAA9AAAAPQAAAD0AAAA9AAAAPQAAAD0AAAA9AAAANAAAADQAAAA0AAAAPgAAAD0AAAA+AAAAOgAAADoAAAA6AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPQAAADQAAAA0AAAANAAAAD4AAAA9AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA7AAAAOwAAADsAAAA7AAAAPgAAAD0AAAA7AAAAOwAAAD4AAAA+AAAAPQAAAD4AAAA6AAAAOgAAADoAAAA+AAAAOwAAADsAAAA7AAAAOwAAAD4AAAA9AAAAOwAAADsAAAA7AAAAPgAAAD0AAAA+AAAAOgAAADoAAAA6AAAAPgAAADsAAAA7AAAAOwAAADsAAAA+AAAAPQAAADsAAAA7AAAAOwAAAD4AAAA6AAAAPgAAAD4AAAA7AAAAPgAAAD4AAAA+AAAAPgAAADsAAAA+AAAAPgAAAD4AAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAAD4AAAA7AAAAOwAAADsAAAA7AAAAOwAAAD4AAAA+AAAAPgAAADsAAAA+AAAAPgAAAD4AAAA7AAAAOwAAADsAAAA+AAAAOwAAADsAAAA7AAAAOwAAADsAAAA+AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAAA== - ind: "-2,-2" - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAADQAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA0AAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAANAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA7AAAAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAOwAAADsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAADsAAAA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA7AAAAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAOwAAADsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAADsAAAA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAOgAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAADQAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA0AAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAANAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA7AAAAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAOwAAADsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAADsAAAA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA7AAAAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAOwAAADsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAADsAAAA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA+AAAAOgAAAA== - ind: "-2,-1" - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAAD0AAAA6AAAAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA9AAAAPQAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAPQAAADoAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD0AAAA6AAAAPgAAAD0AAAA9AAAAPQAAAD0AAAA9AAAAPQAAAD0AAAA9AAAAPQAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOgAAAD4AAAA6AAAAOgAAADoAAAA6AAAAOgAAADoAAAA6AAAAOgAAAD0AAAA6AAAAOgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA6AAAAPgAAAD4AAAA+AAAAOAAAADgAAAA4AAAAPgAAAD4AAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAAD4AAAA+AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA6AAAAOgAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAPgAAAD0AAAA+AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA9AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAAD0AAAA6AAAAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA9AAAAPQAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAPQAAADoAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD0AAAA6AAAAPgAAAD0AAAA9AAAAPQAAAD0AAAA9AAAAPQAAAD0AAAA9AAAAPQAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOgAAAD4AAAA6AAAAOgAAADoAAAA6AAAAOgAAADoAAAA6AAAAOgAAAD0AAAA6AAAAOgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA6AAAAPgAAAD4AAAA+AAAAOAAAADgAAAA4AAAAPgAAAD4AAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAAD4AAAA+AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA6AAAAOgAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAPgAAAD0AAAA+AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA9AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAAA== - ind: "-3,0" tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAADgAAAA4AAAAOAAAAD4AAAA9AAAAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA4AAAAOAAAADgAAAA+AAAAPgAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADoAAAA6AAAAOgAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6AAAAOgAAADoAAAA4AAAAOAAAADgAAAA4AAAAOAAAADoAAAA9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAA== - ind: "-4,0" @@ -319,8 +319,8 @@ entities: type: Collidable - uid: 15 components: - - type: MetaData - name: Saltern Station + - name: Saltern Station + type: MetaData - parent: null type: Transform - index: 0 @@ -333,7 +333,7 @@ entities: - volume: 2500 moles: - 21.824879 - - 82.103120 + - 82.10312 - 0 - 0 - 0 @@ -11156,6 +11156,33 @@ entities: ? X: 52 Y: -2 : 0 + ? X: -26 + Y: -17 + : 0 + ? X: -25 + Y: -17 + : 0 + ? X: -24 + Y: -17 + : 0 + ? X: -23 + Y: -17 + : 0 + ? X: -22 + Y: -17 + : 0 + ? X: -21 + Y: -17 + : 0 + ? X: -26 + Y: -16 + : 0 + ? X: -26 + Y: -15 + : 0 + ? X: -26 + Y: -14 + : 0 type: GridAtmosphere - uid: 16 type: Wire @@ -16069,12 +16096,14 @@ entities: rot: -1.5707963267948966 rad type: Transform - uid: 711 - type: solid_wall + type: WeldingFuelTank components: - parent: 15 - pos: -25.5,-15.5 - rot: -1.5707963267948966 rad + pos: 33.5,12.5 + rot: 1.5707963267948966 rad type: Transform + - anchored: False + type: Collidable - uid: 712 type: Table components: @@ -16257,10 +16286,10 @@ entities: rot: -1.5707963267948966 rad type: Transform - uid: 738 - type: solid_wall + type: SignHead components: - parent: 15 - pos: -23.5,-16.5 + pos: -9.687853,18.5 rot: -1.5707963267948966 rad type: Transform - uid: 739 @@ -16711,14 +16740,11 @@ entities: rot: -1.5707963267948966 rad type: Transform - uid: 797 - type: WaterTankFull + type: VendingMachineDinnerware components: - parent: 15 - pos: -1.5,-6.5 - rot: -1.5707963267948966 rad + pos: -11.5,-3.5 type: Transform - - anchored: False - type: Collidable - uid: 798 type: solid_wall components: @@ -17600,7 +17626,7 @@ entities: type: LowWall components: - parent: 15 - pos: 24.5,14.5 + pos: 21.5,14.5 rot: -1.5707963267948966 rad type: Transform - uid: 924 @@ -17625,10 +17651,10 @@ entities: rot: -1.5707963267948966 rad type: Transform - uid: 927 - type: LowWall + type: ReinforcedWindow components: - parent: 15 - pos: 18.5,14.5 + pos: 21.5,15.5 rot: -1.5707963267948966 rad type: Transform - uid: 928 @@ -17793,627 +17819,619 @@ entities: rot: -1.5707963267948966 rad type: Transform - uid: 951 - type: LowWall + type: SignDirectionalBridge components: - parent: 15 - pos: 21.5,14.5 - rot: -1.5707963267948966 rad + pos: -20.49181,6.256847 type: Transform - uid: 952 - type: LowWall + type: SignDirectionalSec components: - parent: 15 - pos: 21.5,15.5 - rot: -1.5707963267948966 rad + pos: 5.9947615,6.5 + rot: 3.141592653589793 rad type: Transform - uid: 953 - type: LowWall - components: - - parent: 15 - pos: 21.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 954 type: LowWall components: - parent: 15 pos: 19.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 955 - type: LowWall +- uid: 954 + type: solid_wall components: - parent: 15 - pos: 26.5,14.5 + pos: -0.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 955 + type: solid_wall + components: + - parent: 15 + pos: -19.5,-16.5 rot: -1.5707963267948966 rad type: Transform - uid: 956 - type: LowWall + type: solid_wall components: - parent: 15 - pos: 27.5,14.5 + pos: -21.5,-16.5 rot: -1.5707963267948966 rad type: Transform - uid: 957 - type: LowWall - components: - - parent: 15 - pos: 28.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 958 type: solid_wall components: - parent: 15 pos: 17.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 959 +- uid: 958 type: solid_wall components: - parent: 15 pos: 17.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 960 +- uid: 959 type: solid_wall components: - parent: 15 pos: 17.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 961 +- uid: 960 type: solid_wall components: - parent: 15 pos: 17.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 962 +- uid: 961 type: solid_wall components: - parent: 15 pos: 16.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 963 +- uid: 962 type: solid_wall components: - parent: 15 pos: 17.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 964 +- uid: 963 type: solid_wall components: - parent: 15 pos: 16.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 965 +- uid: 964 type: solid_wall components: - parent: 15 pos: 15.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 966 +- uid: 965 type: solid_wall components: - parent: 15 pos: 14.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 967 +- uid: 966 type: solid_wall components: - parent: 15 pos: 13.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 968 +- uid: 967 type: solid_wall components: - parent: 15 pos: 12.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 969 +- uid: 968 type: solid_wall components: - parent: 15 pos: 11.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 970 +- uid: 969 type: reinforced_wall components: - parent: 15 pos: 11.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 971 +- uid: 970 type: reinforced_wall components: - parent: 15 pos: 10.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 972 +- uid: 971 type: reinforced_wall components: - parent: 15 pos: 9.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 973 +- uid: 972 type: reinforced_wall components: - parent: 15 pos: 7.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 974 +- uid: 973 type: reinforced_wall components: - parent: 15 pos: 6.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 975 +- uid: 974 type: reinforced_wall components: - parent: 15 pos: 5.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 976 +- uid: 975 type: reinforced_wall components: - parent: 15 pos: 5.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 977 +- uid: 976 type: reinforced_wall components: - parent: 15 pos: 5.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 978 +- uid: 977 type: reinforced_wall components: - parent: 15 pos: 5.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 979 +- uid: 978 type: reinforced_wall components: - parent: 15 pos: 5.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 980 +- uid: 979 type: reinforced_wall components: - parent: 15 pos: 5.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 981 +- uid: 980 type: reinforced_wall components: - parent: 15 pos: 5.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 982 +- uid: 981 type: reinforced_wall components: - parent: 15 pos: 11.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 983 +- uid: 982 type: reinforced_wall components: - parent: 15 pos: 11.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 984 +- uid: 983 type: reinforced_wall components: - parent: 15 pos: 11.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 985 +- uid: 984 type: reinforced_wall components: - parent: 15 pos: 11.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 986 +- uid: 985 type: reinforced_wall components: - parent: 15 pos: 11.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 987 +- uid: 986 type: reinforced_wall components: - parent: 15 pos: 11.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 988 +- uid: 987 type: reinforced_wall components: - parent: 15 pos: 10.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 989 +- uid: 988 type: reinforced_wall components: - parent: 15 pos: 6.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 990 +- uid: 989 type: LowWall components: - parent: 15 pos: 8.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 991 +- uid: 990 type: solid_wall components: - parent: 15 pos: 14.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 992 +- uid: 991 type: solid_wall components: - parent: 15 pos: 14.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 993 +- uid: 992 type: solid_wall components: - parent: 15 pos: 14.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 994 +- uid: 993 type: ReinforcedWindow components: - parent: 15 pos: 19.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 995 +- uid: 994 type: ReinforcedWindow components: - parent: 15 pos: 19.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 996 +- uid: 995 type: ReinforcedWindow components: - parent: 15 pos: 19.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 997 +- uid: 996 type: solid_wall components: - parent: 15 pos: 14.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 998 +- uid: 997 type: solid_wall components: - parent: 15 pos: 14.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 999 +- uid: 998 type: solid_wall components: - parent: 15 pos: 13.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1000 +- uid: 999 type: solid_wall components: - parent: 15 pos: 12.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1001 +- uid: 1000 type: solid_wall components: - parent: 15 pos: 11.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1002 +- uid: 1001 type: solid_wall components: - parent: 15 pos: 11.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1003 +- uid: 1002 type: solid_wall components: - parent: 15 pos: 11.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1004 +- uid: 1003 type: solid_wall components: - parent: 15 pos: 11.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1005 +- uid: 1004 type: solid_wall components: - parent: 15 pos: 11.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1006 +- uid: 1005 type: solid_wall components: - parent: 15 pos: 11.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1007 +- uid: 1006 type: solid_wall components: - parent: 15 pos: 11.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1008 +- uid: 1007 type: solid_wall components: - parent: 15 pos: 10.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1009 +- uid: 1008 type: solid_wall components: - parent: 15 pos: 9.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1010 +- uid: 1009 type: Wire components: - parent: 15 pos: 8.5,16.5 type: Transform -- uid: 1011 +- uid: 1010 type: Wire components: - parent: 15 pos: 8.5,17.5 type: Transform -- uid: 1012 +- uid: 1011 type: solid_wall components: - parent: 15 pos: 6.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1013 +- uid: 1012 type: solid_wall components: - parent: 15 pos: 5.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1014 +- uid: 1013 type: solid_wall components: - parent: 15 pos: 6.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1015 +- uid: 1014 type: solid_wall components: - parent: 15 pos: 5.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1016 +- uid: 1015 type: solid_wall components: - parent: 15 pos: 6.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1017 +- uid: 1016 type: reinforced_wall components: - parent: 15 pos: 10.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1018 +- uid: 1017 type: reinforced_wall components: - parent: 15 pos: 9.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1019 +- uid: 1018 type: reinforced_wall components: - parent: 15 pos: 8.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1020 +- uid: 1019 type: reinforced_wall components: - parent: 15 pos: 7.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1021 +- uid: 1020 type: reinforced_wall components: - parent: 15 pos: 6.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1022 +- uid: 1021 type: reinforced_wall components: - parent: 15 pos: 5.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1023 +- uid: 1022 type: reinforced_wall components: - parent: 15 pos: 10.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1024 +- uid: 1023 type: reinforced_wall components: - parent: 15 pos: 10.5,24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1025 +- uid: 1024 type: reinforced_wall components: - parent: 15 pos: 10.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1026 +- uid: 1025 type: reinforced_wall components: - parent: 15 pos: 10.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1027 +- uid: 1026 type: reinforced_wall components: - parent: 15 pos: 10.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1028 +- uid: 1027 type: reinforced_wall components: - parent: 15 pos: 10.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1029 +- uid: 1028 type: reinforced_wall components: - parent: 15 pos: 10.5,30.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1030 +- uid: 1029 type: reinforced_wall components: - parent: 15 pos: 10.5,31.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1031 +- uid: 1030 type: reinforced_wall components: - parent: 15 pos: -3.5,31.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1032 +- uid: 1031 type: reinforced_wall components: - parent: 15 pos: -3.5,30.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1033 +- uid: 1032 type: reinforced_wall components: - parent: 15 pos: -3.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1034 +- uid: 1033 type: reinforced_wall components: - parent: 15 pos: -3.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1035 +- uid: 1034 type: reinforced_wall components: - parent: 15 pos: -3.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1036 +- uid: 1035 type: reinforced_wall components: - parent: 15 pos: -3.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1037 +- uid: 1036 type: reinforced_wall components: - parent: 15 pos: 1.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1038 +- uid: 1037 type: reinforced_wall components: - parent: 15 pos: 0.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1039 +- uid: 1038 type: reinforced_wall components: - parent: 15 pos: -0.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1040 +- uid: 1039 type: AirlockCommandLocked components: - name: Head of Personnel's Office @@ -18425,1637 +18443,1644 @@ entities: - access: - - HeadOfPersonnel type: AccessReader -- uid: 1041 +- uid: 1040 type: reinforced_wall components: - parent: 15 pos: -2.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1042 +- uid: 1041 type: reinforced_wall components: - parent: 15 pos: -3.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1043 +- uid: 1042 type: reinforced_wall components: - parent: 15 pos: -3.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1044 +- uid: 1043 type: reinforced_wall components: - parent: 15 pos: -3.5,24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1045 +- uid: 1044 type: solid_wall components: - parent: 15 pos: 1.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1046 +- uid: 1045 type: solid_wall components: - parent: 15 pos: 1.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1047 +- uid: 1046 type: solid_wall components: - parent: 15 pos: 0.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1048 +- uid: 1047 type: solid_wall components: - parent: 15 pos: -2.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1049 +- uid: 1048 type: solid_wall components: - parent: 15 pos: 1.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1050 +- uid: 1049 type: solid_wall components: - parent: 15 pos: 5.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1051 +- uid: 1050 type: solid_wall components: - parent: 15 pos: 5.5,24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1052 +- uid: 1051 type: solid_wall components: - parent: 15 pos: 5.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1053 +- uid: 1052 type: solid_wall components: - parent: 15 pos: 5.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1054 +- uid: 1053 type: solid_wall components: - parent: 15 pos: 6.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1055 +- uid: 1054 type: solid_wall components: - parent: 15 pos: 7.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1056 +- uid: 1055 type: solid_wall components: - parent: 15 pos: 8.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1057 +- uid: 1056 type: solid_wall components: - parent: 15 pos: 9.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1058 +- uid: 1057 type: LowWall components: - parent: 15 pos: 3.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1059 +- uid: 1058 type: LowWall components: - parent: 15 pos: -1.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1060 +- uid: 1059 type: LowWall components: - parent: 15 pos: -0.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1061 +- uid: 1060 type: LowWall components: - parent: 15 pos: -3.5,29.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1062 +- uid: 1061 type: LowWall components: - parent: 15 pos: 10.5,29.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1063 +- uid: 1062 type: LowWall components: - parent: 15 pos: 9.5,31.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1064 +- uid: 1063 type: LowWall components: - parent: 15 pos: 9.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1065 +- uid: 1064 type: LowWall components: - parent: 15 pos: 8.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1066 +- uid: 1065 type: LowWall components: - parent: 15 pos: 8.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1067 +- uid: 1066 type: LowWall components: - parent: 15 pos: 7.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1068 +- uid: 1067 type: LowWall components: - parent: 15 pos: 6.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1069 +- uid: 1068 type: LowWall components: - parent: 15 pos: 5.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1070 +- uid: 1069 type: LowWall components: - parent: 15 pos: 4.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1071 +- uid: 1070 type: LowWall components: - parent: 15 pos: 3.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1072 +- uid: 1071 type: LowWall components: - parent: 15 pos: 2.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1073 +- uid: 1072 type: LowWall components: - parent: 15 pos: 1.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1074 +- uid: 1073 type: LowWall components: - parent: 15 pos: 0.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1075 +- uid: 1074 type: LowWall components: - parent: 15 pos: -0.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1076 +- uid: 1075 type: LowWall components: - parent: 15 pos: -1.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1077 +- uid: 1076 type: LowWall components: - parent: 15 pos: -1.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1078 +- uid: 1077 type: LowWall components: - parent: 15 pos: -2.5,31.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1079 +- uid: 1078 type: LowWall components: - parent: 15 pos: -2.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1080 +- uid: 1079 type: LowWall components: - parent: 15 pos: 6.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1081 +- uid: 1080 type: LowWall components: - parent: 15 pos: 6.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1082 +- uid: 1081 type: reinforced_wall components: - parent: 15 pos: 1.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1083 +- uid: 1082 type: reinforced_wall components: - parent: 15 pos: 0.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1084 +- uid: 1083 type: reinforced_wall components: - parent: 15 pos: -0.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1085 +- uid: 1084 type: reinforced_wall components: - parent: 15 pos: -1.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1086 +- uid: 1085 type: reinforced_wall components: - parent: 15 pos: -2.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1087 +- uid: 1086 type: reinforced_wall components: - parent: 15 pos: -3.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1088 +- uid: 1087 type: reinforced_wall components: - parent: 15 pos: -4.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1089 +- uid: 1088 type: reinforced_wall components: - parent: 15 pos: -4.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1090 +- uid: 1089 type: reinforced_wall components: - parent: 15 pos: -4.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1091 +- uid: 1090 type: reinforced_wall components: - parent: 15 pos: -4.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1092 +- uid: 1091 type: reinforced_wall components: - parent: 15 pos: -4.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1093 +- uid: 1092 type: reinforced_wall components: - parent: 15 pos: -5.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1094 +- uid: 1093 type: LowWall components: - parent: 15 pos: -7.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1095 +- uid: 1094 type: reinforced_wall components: - parent: 15 pos: -3.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1096 +- uid: 1095 type: reinforced_wall components: - parent: 15 pos: -2.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1097 +- uid: 1096 type: reinforced_wall components: - parent: 15 pos: -1.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1098 +- uid: 1097 type: reinforced_wall components: - parent: 15 pos: -0.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1099 +- uid: 1098 type: reinforced_wall components: - parent: 15 pos: 0.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1100 +- uid: 1099 type: reinforced_wall components: - parent: 15 pos: 0.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1101 +- uid: 1100 type: reinforced_wall components: - parent: 15 pos: 0.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1102 +- uid: 1101 type: reinforced_wall components: - parent: 15 pos: -5.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1103 +- uid: 1102 type: reinforced_wall components: - parent: 15 pos: -5.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1104 +- uid: 1103 type: reinforced_wall components: - parent: 15 pos: -5.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1105 +- uid: 1104 type: reinforced_wall components: - parent: 15 pos: -6.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1106 +- uid: 1105 type: reinforced_wall components: - parent: 15 pos: -7.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1107 +- uid: 1106 type: reinforced_wall components: - parent: 15 pos: -8.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1108 +- uid: 1107 type: reinforced_wall components: - parent: 15 pos: -9.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1109 +- uid: 1108 type: Wire components: - parent: 15 pos: -13.5,15.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1110 +- uid: 1109 type: reinforced_wall components: - parent: 15 pos: -11.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1111 +- uid: 1110 type: reinforced_wall components: - parent: 15 pos: -12.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1112 +- uid: 1111 type: reinforced_wall components: - parent: 15 pos: -13.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1113 +- uid: 1112 type: reinforced_wall components: - parent: 15 pos: -14.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1114 +- uid: 1113 type: reinforced_wall components: - parent: 15 pos: -15.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1115 +- uid: 1114 type: reinforced_wall components: - parent: 15 pos: -16.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1116 +- uid: 1115 type: reinforced_wall components: - parent: 15 pos: -16.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1117 +- uid: 1116 type: reinforced_wall components: - parent: 15 pos: -15.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1118 +- uid: 1117 type: reinforced_wall components: - parent: 15 pos: -14.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1119 +- uid: 1118 type: reinforced_wall components: - parent: 15 pos: -13.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1120 +- uid: 1119 type: reinforced_wall components: - parent: 15 pos: -12.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1121 +- uid: 1120 type: reinforced_wall components: - parent: 15 pos: -11.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1122 +- uid: 1121 type: reinforced_wall components: - parent: 15 pos: -10.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1123 +- uid: 1122 type: Wire components: - parent: 15 pos: -9.5,26.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1124 +- uid: 1123 type: reinforced_wall components: - parent: 15 pos: -16.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1125 +- uid: 1124 type: reinforced_wall components: - parent: 15 pos: -16.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1126 +- uid: 1125 type: reinforced_wall components: - parent: 15 pos: -16.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1127 +- uid: 1126 type: reinforced_wall components: - parent: 15 pos: -16.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1128 +- uid: 1127 type: reinforced_wall components: - parent: 15 pos: -16.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1129 +- uid: 1128 type: reinforced_wall components: - parent: 15 pos: -15.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1130 +- uid: 1129 type: reinforced_wall components: - parent: 15 pos: -15.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1131 +- uid: 1130 type: reinforced_wall components: - parent: 15 pos: -15.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1132 +- uid: 1131 type: reinforced_wall components: - parent: 15 pos: -15.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1133 +- uid: 1132 type: reinforced_wall components: - parent: 15 pos: -15.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1134 +- uid: 1133 type: reinforced_wall components: - parent: 15 pos: -14.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1135 +- uid: 1134 type: reinforced_wall components: - parent: 15 pos: -13.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1136 +- uid: 1135 type: reinforced_wall components: - parent: 15 pos: -11.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1137 +- uid: 1136 type: reinforced_wall components: - parent: 15 pos: -10.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1138 +- uid: 1137 type: reinforced_wall components: - parent: 15 pos: -10.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1139 +- uid: 1138 type: reinforced_wall components: - parent: 15 pos: -10.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1140 +- uid: 1139 type: reinforced_wall components: - parent: 15 pos: -14.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1141 +- uid: 1140 type: reinforced_wall components: - parent: 15 pos: -14.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1142 +- uid: 1141 type: reinforced_wall components: - parent: 15 pos: -14.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1143 +- uid: 1142 type: reinforced_wall components: - parent: 15 pos: -13.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1144 +- uid: 1143 type: reinforced_wall components: - parent: 15 pos: -12.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1145 +- uid: 1144 type: reinforced_wall components: - parent: 15 pos: -11.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1146 +- uid: 1145 type: reinforced_wall components: - parent: 15 pos: -10.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1147 +- uid: 1146 type: reinforced_wall components: - parent: 15 pos: -10.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1148 +- uid: 1147 type: reinforced_wall components: - parent: 15 pos: -10.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1149 +- uid: 1148 type: reinforced_wall components: - parent: 15 pos: -10.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1150 +- uid: 1149 type: reinforced_wall components: - parent: 15 pos: -14.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1151 +- uid: 1150 type: reinforced_wall components: - parent: 15 pos: -15.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1152 +- uid: 1151 type: reinforced_wall components: - parent: 15 pos: -15.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1153 +- uid: 1152 type: reinforced_wall components: - parent: 15 pos: -15.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1154 +- uid: 1153 type: reinforced_wall components: - parent: 15 pos: -15.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1155 +- uid: 1154 type: AirlockMaintSecLocked components: - parent: 15 pos: -14.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1156 +- uid: 1155 type: reinforced_wall components: - parent: 15 pos: -14.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1157 +- uid: 1156 type: reinforced_wall components: - parent: 15 pos: -14.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1158 +- uid: 1157 type: solid_wall components: - parent: 15 pos: -6.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1159 +- uid: 1158 type: LowWall components: - parent: 15 pos: -10.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1160 +- uid: 1159 type: solid_wall components: - parent: 15 pos: -9.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1161 +- uid: 1160 type: solid_wall components: - parent: 15 pos: -10.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1162 +- uid: 1161 type: solid_wall components: - parent: 15 pos: -10.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1163 +- uid: 1162 type: solid_wall components: - parent: 15 pos: -10.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1164 +- uid: 1163 type: solid_wall components: - parent: 15 pos: -11.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1165 +- uid: 1164 type: solid_wall components: - parent: 15 pos: -12.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1166 +- uid: 1165 type: solid_wall components: - parent: 15 pos: -13.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1167 +- uid: 1166 type: solid_wall components: - parent: 15 pos: -5.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1168 +- uid: 1167 type: reinforced_wall components: - parent: 15 pos: 1.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1169 +- uid: 1168 type: reinforced_wall components: - parent: 15 pos: 1.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1170 +- uid: 1169 type: reinforced_wall components: - parent: 15 pos: 1.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1171 +- uid: 1170 type: reinforced_wall components: - parent: 15 pos: 1.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1172 +- uid: 1171 type: reinforced_wall components: - parent: 15 pos: 1.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1173 +- uid: 1172 type: reinforced_wall components: - parent: 15 pos: 1.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1174 +- uid: 1173 type: reinforced_wall components: - parent: 15 pos: 1.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1175 +- uid: 1174 type: reinforced_wall components: - parent: 15 pos: 1.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1176 +- uid: 1175 type: reinforced_wall components: - parent: 15 pos: 1.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1177 +- uid: 1176 type: reinforced_wall components: - parent: 15 pos: -4.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1178 +- uid: 1177 type: reinforced_wall components: - parent: 15 pos: -1.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1179 +- uid: 1178 type: reinforced_wall components: - parent: 15 pos: -7.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1180 +- uid: 1179 type: solid_wall components: - parent: 15 pos: -4.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1181 +- uid: 1180 type: solid_wall components: - parent: 15 pos: -4.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1182 +- uid: 1181 type: solid_wall components: - parent: 15 pos: -4.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1183 +- uid: 1182 type: solid_wall components: - parent: 15 pos: -1.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1184 +- uid: 1183 type: solid_wall components: - parent: 15 pos: -1.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1185 +- uid: 1184 type: solid_wall components: - parent: 15 pos: -1.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1186 +- uid: 1185 type: LowWall components: - parent: 15 pos: -0.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1187 +- uid: 1186 type: LowWall components: - parent: 15 pos: -3.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1188 +- uid: 1187 type: LowWall components: - parent: 15 pos: -7.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1189 +- uid: 1188 type: LowWall components: - parent: 15 pos: -8.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1190 +- uid: 1189 type: solid_wall components: - parent: 15 pos: -15.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1191 +- uid: 1190 type: solid_wall components: - parent: 15 pos: -17.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1192 +- uid: 1191 type: solid_wall components: - parent: 15 pos: -18.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1193 +- uid: 1192 type: solid_wall components: - parent: 15 pos: -18.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1194 +- uid: 1193 type: solid_wall components: - parent: 15 pos: -18.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1195 +- uid: 1194 type: solid_wall components: - parent: 15 pos: -18.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1196 +- uid: 1195 type: solid_wall components: - parent: 15 pos: -18.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1197 +- uid: 1196 type: solid_wall components: - parent: 15 pos: -18.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1198 +- uid: 1197 type: solid_wall components: - parent: 15 pos: -19.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1199 +- uid: 1198 type: solid_wall components: - parent: 15 pos: -18.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1200 +- uid: 1199 type: solid_wall components: - parent: 15 pos: -19.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1201 +- uid: 1200 type: solid_wall components: - parent: 15 pos: -19.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1202 +- uid: 1201 type: solid_wall components: - parent: 15 pos: -19.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1203 +- uid: 1202 type: solid_wall components: - parent: 15 pos: -19.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1204 +- uid: 1203 type: solid_wall components: - parent: 15 pos: -19.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1205 +- uid: 1204 type: solid_wall components: - parent: 15 pos: -19.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1206 +- uid: 1205 type: solid_wall components: - parent: 15 pos: -19.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1207 +- uid: 1206 type: solid_wall components: - parent: 15 pos: -19.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1208 +- uid: 1207 type: solid_wall components: - parent: 15 pos: -19.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1209 +- uid: 1208 type: solid_wall components: - parent: 15 pos: -19.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1210 +- uid: 1209 type: solid_wall components: - parent: 15 pos: -19.5,24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1211 +- uid: 1210 type: solid_wall components: - parent: 15 pos: -19.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1212 +- uid: 1211 type: solid_wall components: - parent: 15 pos: -19.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1213 +- uid: 1212 type: solid_wall components: - parent: 15 pos: -18.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1214 +- uid: 1213 type: solid_wall components: - parent: 15 pos: -17.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1215 +- uid: 1214 type: solid_wall components: - parent: 15 pos: -16.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1216 +- uid: 1215 type: solid_wall components: - parent: 15 pos: -15.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1217 +- uid: 1216 type: solid_wall components: - parent: 15 pos: -14.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1218 +- uid: 1217 type: solid_wall components: - parent: 15 pos: -13.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1219 +- uid: 1218 type: solid_wall components: - parent: 15 pos: -12.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1220 +- uid: 1219 type: solid_wall components: - parent: 15 pos: -11.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1221 +- uid: 1220 type: solid_wall components: - parent: 15 pos: -10.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1222 +- uid: 1221 type: solid_wall components: - parent: 15 pos: -9.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1223 +- uid: 1222 type: solid_wall components: - parent: 15 pos: -8.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1224 +- uid: 1223 type: solid_wall components: - parent: 15 pos: -7.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1225 +- uid: 1224 type: solid_wall components: - parent: 15 pos: -6.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1226 +- uid: 1225 type: solid_wall components: - parent: 15 pos: -6.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1227 +- uid: 1226 type: solid_wall components: - parent: 15 pos: -4.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1228 +- uid: 1227 type: solid_wall components: - parent: 15 pos: -5.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1229 +- uid: 1228 type: solid_wall components: - parent: 15 pos: -20.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1230 +- uid: 1229 type: solid_wall components: - parent: 15 pos: -21.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1231 +- uid: 1230 type: solid_wall components: - parent: 15 pos: -22.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1232 +- uid: 1231 type: solid_wall components: - parent: 15 pos: -23.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1233 +- uid: 1232 type: solid_wall components: - parent: 15 pos: -24.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1234 +- uid: 1233 type: solid_wall components: - parent: 15 pos: -25.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1235 +- uid: 1234 type: solid_wall components: - parent: 15 pos: -26.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1236 +- uid: 1235 type: solid_wall components: - parent: 15 pos: -27.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1237 +- uid: 1236 type: solid_wall components: - parent: 15 pos: -28.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1238 +- uid: 1237 type: solid_wall components: - parent: 15 pos: -29.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1239 +- uid: 1238 type: solid_wall components: - parent: 15 pos: -30.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1240 +- uid: 1239 type: solid_wall components: - parent: 15 pos: -31.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1241 +- uid: 1240 type: solid_wall components: - parent: 15 pos: -32.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1242 +- uid: 1241 type: solid_wall components: - parent: 15 pos: -33.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1243 +- uid: 1242 type: solid_wall components: - parent: 15 pos: -33.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1244 +- uid: 1243 type: solid_wall components: - parent: 15 pos: -33.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1245 +- uid: 1244 type: solid_wall components: - parent: 15 pos: -33.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1246 +- uid: 1245 type: solid_wall components: - parent: 15 pos: -33.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1247 +- uid: 1246 type: solid_wall components: - parent: 15 pos: -33.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1248 +- uid: 1247 type: APC components: - parent: 15 pos: -34.5,-5.5 rot: 3.141592653589793 rad type: Transform -- uid: 1249 +- uid: 1248 type: solid_wall components: - parent: 15 pos: -33.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1250 +- uid: 1249 type: solid_wall components: - parent: 15 pos: -33.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1251 +- uid: 1250 type: solid_wall components: - parent: 15 pos: -32.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1252 +- uid: 1251 type: solid_wall components: - parent: 15 pos: -31.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1253 +- uid: 1252 type: solid_wall components: - parent: 15 pos: -30.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1254 +- uid: 1253 type: LowWall components: - parent: 15 pos: -28.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1255 +- uid: 1254 type: Window components: - parent: 15 pos: -8.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1256 +- uid: 1255 type: Window components: - parent: 15 pos: -7.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1257 +- uid: 1256 type: solid_wall components: - parent: 15 pos: -26.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1258 +- uid: 1257 type: solid_wall components: - parent: 15 pos: -26.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1259 +- uid: 1258 type: solid_wall components: - parent: 15 pos: -25.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1260 +- uid: 1259 type: solid_wall components: - parent: 15 pos: -30.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1261 +- uid: 1260 type: solid_wall components: - parent: 15 pos: -30.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1262 +- uid: 1261 type: solid_wall components: - parent: 15 pos: -30.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1263 +- uid: 1262 type: solid_wall components: - parent: 15 pos: -30.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1264 +- uid: 1263 type: solid_wall components: - parent: 15 pos: -30.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1265 +- uid: 1264 type: solid_wall components: - parent: 15 pos: -30.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1266 +- uid: 1265 type: solid_wall components: - parent: 15 pos: -28.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1267 +- uid: 1266 type: solid_wall components: - parent: 15 pos: -27.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1268 +- uid: 1267 type: solid_wall components: - parent: 15 pos: -26.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1269 +- uid: 1268 type: solid_wall components: - parent: 15 pos: -25.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1270 +- uid: 1269 type: solid_wall components: - parent: 15 pos: -24.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1271 +- uid: 1270 type: solid_wall components: - parent: 15 pos: -23.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1272 +- uid: 1271 type: solid_wall components: - parent: 15 pos: -22.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1273 +- uid: 1272 type: solid_wall components: - parent: 15 pos: -29.5,12.5 rot: -1.5707963267948966 rad type: Transform +- uid: 1273 + type: solid_wall + components: + - parent: 15 + pos: -22.5,11.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 1274 type: solid_wall components: @@ -20067,1326 +20092,1319 @@ entities: type: solid_wall components: - parent: 15 - pos: -22.5,11.5 + pos: -21.5,11.5 rot: -1.5707963267948966 rad type: Transform - uid: 1276 type: solid_wall components: - parent: 15 - pos: -21.5,11.5 + pos: -22.5,10.5 rot: -1.5707963267948966 rad type: Transform - uid: 1277 type: solid_wall components: - parent: 15 - pos: -22.5,10.5 + pos: -22.5,8.5 rot: -1.5707963267948966 rad type: Transform - uid: 1278 type: solid_wall components: - parent: 15 - pos: -22.5,8.5 + pos: -22.5,7.5 rot: -1.5707963267948966 rad type: Transform - uid: 1279 type: solid_wall components: - parent: 15 - pos: -22.5,7.5 + pos: -21.5,7.5 rot: -1.5707963267948966 rad type: Transform - uid: 1280 type: solid_wall components: - parent: 15 - pos: -21.5,7.5 + pos: -21.5,6.5 rot: -1.5707963267948966 rad type: Transform - uid: 1281 type: solid_wall components: - parent: 15 - pos: -21.5,6.5 + pos: -20.5,6.5 rot: -1.5707963267948966 rad type: Transform - uid: 1282 type: solid_wall components: - parent: 15 - pos: -20.5,6.5 + pos: -19.5,6.5 rot: -1.5707963267948966 rad type: Transform - uid: 1283 - type: solid_wall - components: - - parent: 15 - pos: -19.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1284 type: solid_wall components: - parent: 15 pos: -25.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1285 +- uid: 1284 type: LowWall components: - parent: 15 pos: -25.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1286 +- uid: 1285 type: LowWall components: - parent: 15 pos: -2.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1287 +- uid: 1286 type: LowWall components: - parent: 15 pos: -3.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1288 +- uid: 1287 type: LowWall components: - parent: 15 pos: -0.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1289 +- uid: 1288 type: LowWall components: - parent: 15 pos: 0.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1290 +- uid: 1289 type: LowWall components: - parent: 15 pos: 14.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1291 +- uid: 1290 type: solid_wall components: - parent: 15 pos: 30.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1292 +- uid: 1291 type: solid_wall components: - parent: 15 pos: 30.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1293 +- uid: 1292 type: solid_wall components: - parent: 15 pos: 29.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1294 +- uid: 1293 type: solid_wall components: - parent: 15 pos: 28.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1295 +- uid: 1294 type: solid_wall components: - parent: 15 pos: 27.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1296 +- uid: 1295 type: solid_wall components: - parent: 15 pos: 26.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1297 +- uid: 1296 type: solid_wall components: - parent: 15 pos: 25.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1298 +- uid: 1297 type: solid_wall components: - parent: 15 pos: 24.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1299 +- uid: 1298 type: solid_wall components: - parent: 15 pos: 24.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1300 +- uid: 1299 type: solid_wall components: - parent: 15 pos: 24.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1301 +- uid: 1300 type: solid_wall components: - parent: 15 pos: 24.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1302 +- uid: 1301 type: solid_wall components: - parent: 15 pos: 23.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1303 +- uid: 1302 type: solid_wall components: - parent: 15 pos: 22.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1304 +- uid: 1303 type: solid_wall components: - parent: 15 pos: 19.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1305 +- uid: 1304 type: solid_wall components: - parent: 15 pos: 18.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1306 +- uid: 1305 type: solid_wall components: - parent: 15 pos: 17.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1307 +- uid: 1306 type: solid_wall components: - parent: 15 pos: 16.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1308 +- uid: 1307 type: solid_wall components: - parent: 15 pos: 15.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1309 +- uid: 1308 type: solid_wall components: - parent: 15 pos: 14.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1310 +- uid: 1309 type: solid_wall components: - parent: 15 pos: 13.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1311 +- uid: 1310 type: solid_wall components: - parent: 15 pos: 12.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1312 +- uid: 1311 type: solid_wall components: - parent: 15 pos: 6.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1313 +- uid: 1312 type: solid_wall components: - parent: 15 pos: 5.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1314 +- uid: 1313 type: solid_wall components: - parent: 15 pos: 5.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1315 +- uid: 1314 type: solid_wall components: - parent: 15 pos: 20.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1316 +- uid: 1315 type: solid_wall components: - parent: 15 pos: 19.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1317 +- uid: 1316 type: solid_wall components: - parent: 15 pos: 19.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1318 +- uid: 1317 type: solid_wall components: - parent: 15 pos: 19.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1319 +- uid: 1318 type: solid_wall components: - parent: 15 pos: 19.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1320 +- uid: 1319 type: solid_wall components: - parent: 15 pos: 19.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1321 +- uid: 1320 type: solid_wall components: - parent: 15 pos: 13.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1322 +- uid: 1321 type: solid_wall components: - parent: 15 pos: 13.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1323 +- uid: 1322 type: solid_wall components: - parent: 15 pos: 14.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1324 +- uid: 1323 type: solid_wall components: - parent: 15 pos: 13.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1325 +- uid: 1324 type: solid_wall components: - parent: 15 pos: 5.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1326 +- uid: 1325 type: solid_wall components: - parent: 15 pos: 5.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1327 +- uid: 1326 type: solid_wall components: - parent: 15 pos: 5.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1328 +- uid: 1327 type: solid_wall components: - parent: 15 pos: 5.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1329 +- uid: 1328 type: solid_wall components: - parent: 15 pos: 5.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1330 +- uid: 1329 type: solid_wall components: - parent: 15 pos: 5.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1331 +- uid: 1330 type: solid_wall components: - parent: 15 pos: 5.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1332 +- uid: 1331 type: LowWall components: - parent: 15 pos: 5.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1333 +- uid: 1332 type: LowWall components: - parent: 15 pos: 5.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1334 +- uid: 1333 type: LowWall components: - parent: 15 pos: 5.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1335 +- uid: 1334 type: LowWall components: - parent: 15 pos: 13.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1336 +- uid: 1335 type: LowWall components: - parent: 15 pos: 13.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1337 +- uid: 1336 type: LowWall components: - parent: 15 pos: 13.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1338 +- uid: 1337 type: LowWall components: - parent: 15 pos: 16.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1339 +- uid: 1338 type: LowWall components: - parent: 15 pos: 11.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1340 +- uid: 1339 type: LowWall components: - parent: 15 pos: 10.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1341 +- uid: 1340 type: LowWall components: - parent: 15 pos: 9.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1342 +- uid: 1341 type: LowWall components: - parent: 15 pos: 8.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1343 +- uid: 1342 type: LowWall components: - parent: 15 pos: 7.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1344 +- uid: 1343 type: LowWall components: - parent: 15 pos: 6.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1345 +- uid: 1344 type: LowWall components: - parent: 15 pos: 9.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1346 +- uid: 1345 type: LowWall components: - parent: 15 pos: 8.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1347 +- uid: 1346 type: LowWall components: - parent: 15 pos: 13.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1348 +- uid: 1347 type: LowWall components: - parent: 15 pos: 13.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1349 +- uid: 1348 type: LowWall components: - parent: 15 pos: 12.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1350 +- uid: 1349 type: LowWall components: - parent: 15 pos: 18.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1351 +- uid: 1350 type: solid_wall components: - parent: 15 pos: 19.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1352 +- uid: 1351 type: solid_wall components: - parent: 15 pos: 20.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1353 +- uid: 1352 type: solid_wall components: - parent: 15 pos: 21.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1354 +- uid: 1353 type: solid_wall components: - parent: 15 pos: 22.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1355 +- uid: 1354 type: solid_wall components: - parent: 15 pos: 23.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1356 +- uid: 1355 type: solid_wall components: - parent: 15 pos: 24.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1357 +- uid: 1356 type: solid_wall components: - parent: 15 pos: 25.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1358 +- uid: 1357 type: solid_wall components: - parent: 15 pos: 25.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1359 +- uid: 1358 type: solid_wall components: - parent: 15 pos: 25.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1360 +- uid: 1359 type: solid_wall components: - parent: 15 pos: 25.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1361 +- uid: 1360 type: solid_wall components: - parent: 15 pos: 25.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1362 +- uid: 1361 type: solid_wall components: - parent: 15 pos: 24.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1363 +- uid: 1362 type: solid_wall components: - parent: 15 pos: 23.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1364 +- uid: 1363 type: solid_wall components: - parent: 15 pos: 22.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1365 +- uid: 1364 type: solid_wall components: - parent: 15 pos: 21.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1366 +- uid: 1365 type: solid_wall components: - parent: 15 pos: 20.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1367 +- uid: 1366 type: solid_wall components: - parent: 15 pos: 20.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1368 +- uid: 1367 type: solid_wall components: - parent: 15 pos: 16.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1369 +- uid: 1368 type: solid_wall components: - parent: 15 pos: 20.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1370 +- uid: 1369 type: solid_wall components: - parent: 15 pos: 20.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1371 +- uid: 1370 type: Window components: - parent: 15 pos: 20.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1372 +- uid: 1371 type: solid_wall components: - parent: 15 pos: 20.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1373 +- uid: 1372 type: solid_wall components: - parent: 15 pos: 21.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1374 +- uid: 1373 type: solid_wall components: - parent: 15 pos: 22.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1375 +- uid: 1374 type: solid_wall components: - parent: 15 pos: 23.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1376 +- uid: 1375 type: solid_wall components: - parent: 15 pos: 24.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1377 +- uid: 1376 type: solid_wall components: - parent: 15 pos: 25.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1378 +- uid: 1377 type: solid_wall components: - parent: 15 pos: 25.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1379 +- uid: 1378 type: solid_wall components: - parent: 15 pos: 25.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1380 +- uid: 1379 type: solid_wall components: - parent: 15 pos: 25.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1381 +- uid: 1380 type: solid_wall components: - parent: 15 pos: 25.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1382 +- uid: 1381 type: solid_wall components: - parent: 15 pos: 25.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1383 +- uid: 1382 type: solid_wall components: - parent: 15 pos: 24.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1384 +- uid: 1383 type: solid_wall components: - parent: 15 pos: 23.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1385 +- uid: 1384 type: solid_wall components: - parent: 15 pos: 22.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1386 +- uid: 1385 type: solid_wall components: - parent: 15 pos: 21.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1387 +- uid: 1386 type: solid_wall components: - parent: 15 pos: 20.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1388 +- uid: 1387 type: Window components: - parent: 15 pos: 20.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1389 +- uid: 1388 type: solid_wall components: - parent: 15 pos: 15.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1390 +- uid: 1389 type: solid_wall components: - parent: 15 pos: 20.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1391 +- uid: 1390 type: solid_wall components: - parent: 15 pos: 20.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1392 +- uid: 1391 type: solid_wall components: - parent: 15 pos: 46.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1393 +- uid: 1392 type: solid_wall components: - parent: 15 pos: 45.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1394 +- uid: 1393 type: solid_wall components: - parent: 15 pos: 48.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1395 +- uid: 1394 type: LowWall components: - parent: 15 pos: 20.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1396 +- uid: 1395 type: LowWall components: - parent: 15 pos: 20.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1397 +- uid: 1396 type: LowWall components: - parent: 15 pos: 11.5,-14.5 rot: -1.5707963267948966 rad type: Transform +- uid: 1397 + type: LowWall + components: + - parent: 15 + pos: 11.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 1398 type: LowWall components: - parent: 15 - pos: 11.5,-15.5 + pos: 9.5,-12.5 rot: -1.5707963267948966 rad type: Transform - uid: 1399 - type: LowWall + type: Window components: - parent: 15 pos: 9.5,-12.5 rot: -1.5707963267948966 rad type: Transform - uid: 1400 - type: Window - components: - - parent: 15 - pos: 9.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1401 type: solid_wall components: - parent: 15 pos: 11.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1402 +- uid: 1401 type: Window components: - parent: 15 pos: 11.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1403 +- uid: 1402 type: solid_wall components: - parent: 15 pos: 6.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1404 +- uid: 1403 type: Window components: - parent: 15 pos: 20.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1405 +- uid: 1404 type: solid_wall components: - parent: 15 pos: 6.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1406 +- uid: 1405 type: solid_wall components: - parent: 15 pos: 6.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1407 +- uid: 1406 type: solid_wall components: - parent: 15 pos: 6.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1408 +- uid: 1407 type: solid_wall components: - parent: 15 pos: 6.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1409 +- uid: 1408 type: solid_wall components: - parent: 15 pos: 6.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1410 +- uid: 1409 type: solid_wall components: - parent: 15 pos: 7.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1411 +- uid: 1410 type: solid_wall components: - parent: 15 pos: 8.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1412 +- uid: 1411 type: solid_wall components: - parent: 15 pos: 9.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1413 +- uid: 1412 type: solid_wall components: - parent: 15 pos: 10.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1414 +- uid: 1413 type: solid_wall components: - parent: 15 pos: 11.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1415 +- uid: 1414 type: Window components: - parent: 15 pos: 11.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1416 +- uid: 1415 type: solid_wall components: - parent: 15 pos: 11.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1417 +- uid: 1416 type: solid_wall components: - parent: 15 pos: 12.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1418 +- uid: 1417 type: solid_wall components: - parent: 15 pos: 13.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1419 +- uid: 1418 type: solid_wall components: - parent: 15 pos: 6.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1420 +- uid: 1419 type: solid_wall components: - parent: 15 pos: 6.5,-20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1421 +- uid: 1420 type: solid_wall components: - parent: 15 pos: 28.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1422 +- uid: 1421 type: solid_wall components: - parent: 15 pos: 28.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1423 +- uid: 1422 type: solid_wall components: - parent: 15 pos: 28.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1424 +- uid: 1423 type: solid_wall components: - parent: 15 pos: 28.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1425 +- uid: 1424 type: solid_wall components: - parent: 15 pos: 28.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1426 +- uid: 1425 type: solid_wall components: - parent: 15 pos: 29.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1427 +- uid: 1426 type: solid_wall components: - parent: 15 pos: 30.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1428 +- uid: 1427 type: solid_wall components: - parent: 15 pos: 31.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1429 +- uid: 1428 type: solid_wall components: - parent: 15 pos: 32.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1430 +- uid: 1429 type: solid_wall components: - parent: 15 pos: 34.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1431 +- uid: 1430 type: solid_wall components: - parent: 15 pos: 35.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1432 +- uid: 1431 type: solid_wall components: - parent: 15 pos: 36.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1433 +- uid: 1432 type: solid_wall components: - parent: 15 pos: 36.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1434 +- uid: 1433 type: solid_wall components: - parent: 15 pos: 36.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1435 +- uid: 1434 type: solid_wall components: - parent: 15 pos: 1.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1436 +- uid: 1435 type: solid_wall components: - parent: 15 pos: 1.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1437 +- uid: 1436 type: solid_wall components: - parent: 15 pos: 0.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1438 +- uid: 1437 type: solid_wall components: - parent: 15 pos: 1.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1439 +- uid: 1438 type: solid_wall components: - parent: 15 pos: 1.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1440 +- uid: 1439 type: solid_wall components: - parent: 15 pos: 1.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1441 +- uid: 1440 type: solid_wall components: - parent: 15 pos: 1.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1442 +- uid: 1441 type: solid_wall components: - parent: 15 pos: 0.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1443 +- uid: 1442 type: solid_wall components: - parent: 15 pos: -0.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1444 +- uid: 1443 type: solid_wall components: - parent: 15 pos: -1.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1445 +- uid: 1444 type: solid_wall components: - parent: 15 pos: -2.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1446 +- uid: 1445 type: solid_wall components: - parent: 15 pos: 1.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1447 +- uid: 1446 type: solid_wall components: - parent: 15 pos: 1.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1448 +- uid: 1447 type: solid_wall components: - parent: 15 pos: 1.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1449 +- uid: 1448 type: solid_wall components: - parent: 15 pos: 1.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1450 +- uid: 1449 type: solid_wall components: - parent: 15 pos: 1.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1451 +- uid: 1450 type: solid_wall components: - parent: 15 pos: 0.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1452 +- uid: 1451 type: solid_wall components: - parent: 15 pos: -0.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1453 +- uid: 1452 type: solid_wall components: - parent: 15 pos: -1.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1454 +- uid: 1453 type: solid_wall components: - parent: 15 pos: -2.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1455 +- uid: 1454 type: solid_wall components: - parent: 15 pos: 0.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1456 +- uid: 1455 type: solid_wall components: - parent: 15 pos: -5.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1457 +- uid: 1456 type: solid_wall components: - parent: 15 pos: 0.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1458 +- uid: 1457 type: solid_wall components: - parent: 15 pos: 0.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1459 +- uid: 1458 type: solid_wall components: - parent: 15 pos: -0.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1460 +- uid: 1459 type: solid_wall components: - parent: 15 pos: -6.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1461 +- uid: 1460 type: solid_wall components: - parent: 15 pos: -1.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1462 +- uid: 1461 type: solid_wall components: - parent: 15 pos: -2.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1463 +- uid: 1462 type: solid_wall components: - parent: 15 pos: -3.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1464 +- uid: 1463 type: AirlockServiceLocked components: - name: Freezer @@ -21395,637 +21413,637 @@ entities: pos: -12.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1465 +- uid: 1464 type: solid_wall components: - parent: 15 pos: -5.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1466 +- uid: 1465 type: solid_wall components: - parent: 15 pos: -6.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1467 +- uid: 1466 type: solid_wall components: - parent: 15 pos: -6.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1468 +- uid: 1467 type: solid_wall components: - parent: 15 pos: -6.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1469 +- uid: 1468 type: solid_wall components: - parent: 15 pos: -6.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1470 +- uid: 1469 type: solid_wall components: - parent: 15 pos: -6.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1471 +- uid: 1470 type: solid_wall components: - parent: 15 pos: -6.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1472 +- uid: 1471 type: solid_wall components: - parent: 15 pos: -6.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1473 +- uid: 1472 type: LowWall components: - parent: 15 pos: -2.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1474 +- uid: 1473 type: LowWall components: - parent: 15 pos: -4.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1475 +- uid: 1474 type: LowWall components: - parent: 15 pos: 0.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1476 +- uid: 1475 type: solid_wall components: - parent: 15 pos: -7.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1477 +- uid: 1476 type: solid_wall components: - parent: 15 pos: 1.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1478 +- uid: 1477 type: solid_wall components: - parent: 15 pos: 0.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1479 +- uid: 1478 type: solid_wall components: - parent: 15 pos: 0.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1480 +- uid: 1479 type: solid_wall components: - parent: 15 pos: -0.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1481 +- uid: 1480 type: solid_wall components: - parent: 15 pos: -1.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1482 +- uid: 1481 type: LowWall components: - parent: 15 pos: -4.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1483 +- uid: 1482 type: solid_wall components: - parent: 15 pos: -1.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1484 +- uid: 1483 type: solid_wall components: - parent: 15 pos: -1.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1485 +- uid: 1484 type: solid_wall components: - parent: 15 pos: -1.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1486 +- uid: 1485 type: solid_wall components: - parent: 15 pos: -1.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1487 +- uid: 1486 type: solid_wall components: - parent: 15 pos: -2.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1488 +- uid: 1487 type: solid_wall components: - parent: 15 pos: -3.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1489 +- uid: 1488 type: solid_wall components: - parent: 15 pos: -4.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1490 +- uid: 1489 type: solid_wall components: - parent: 15 pos: -5.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1491 +- uid: 1490 type: solid_wall components: - parent: 15 pos: -6.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1492 +- uid: 1491 type: solid_wall components: - parent: 15 pos: -6.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1493 +- uid: 1492 type: solid_wall components: - parent: 15 pos: -6.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1494 +- uid: 1493 type: solid_wall components: - parent: 15 pos: -6.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1495 +- uid: 1494 type: solid_wall components: - parent: 15 pos: -6.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1496 +- uid: 1495 type: LowWall components: - parent: 15 pos: -2.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1497 +- uid: 1496 type: LowWall components: - parent: 15 pos: -5.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1498 +- uid: 1497 type: solid_wall components: - parent: 15 pos: -9.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1499 +- uid: 1498 type: reinforced_wall components: - parent: 15 pos: -12.5,-27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1500 +- uid: 1499 type: reinforced_wall components: - parent: 15 pos: -13.5,-27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1501 +- uid: 1500 type: reinforced_wall components: - parent: 15 pos: -14.5,-27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1502 +- uid: 1501 type: reinforced_wall components: - parent: 15 pos: -15.5,-27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1503 +- uid: 1502 type: reinforced_wall components: - parent: 15 pos: -16.5,-27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1504 +- uid: 1503 type: reinforced_wall components: - parent: 15 pos: -17.5,-27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1505 +- uid: 1504 type: reinforced_wall components: - parent: 15 pos: -18.5,-27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1506 +- uid: 1505 type: reinforced_wall components: - parent: 15 pos: -18.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1507 +- uid: 1506 type: reinforced_wall components: - parent: 15 pos: -18.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1508 +- uid: 1507 type: reinforced_wall components: - parent: 15 pos: -18.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1509 +- uid: 1508 type: reinforced_wall components: - parent: 15 pos: -18.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1510 +- uid: 1509 type: reinforced_wall components: - parent: 15 pos: -17.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1511 +- uid: 1510 type: reinforced_wall components: - parent: 15 pos: -13.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1512 +- uid: 1511 type: reinforced_wall components: - parent: 15 pos: -12.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1513 +- uid: 1512 type: reinforced_wall components: - parent: 15 pos: -12.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1514 +- uid: 1513 type: reinforced_wall components: - parent: 15 pos: -12.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1515 +- uid: 1514 type: reinforced_wall components: - parent: 15 pos: -12.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1516 +- uid: 1515 type: solid_wall components: - parent: 15 pos: -12.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1517 +- uid: 1516 type: solid_wall components: - parent: 15 pos: -11.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1518 +- uid: 1517 type: solid_wall components: - parent: 15 pos: -10.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1519 +- uid: 1518 type: solid_wall components: - parent: 15 pos: -6.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1520 +- uid: 1519 type: solid_wall components: - parent: 15 pos: -5.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1521 +- uid: 1520 type: solid_wall components: - parent: 15 pos: -4.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1522 +- uid: 1521 type: solid_wall components: - parent: 15 pos: -3.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1523 +- uid: 1522 type: solid_wall components: - parent: 15 pos: -2.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1524 +- uid: 1523 type: solid_wall components: - parent: 15 pos: -1.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1525 +- uid: 1524 type: solid_wall components: - parent: 15 pos: -0.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1526 +- uid: 1525 type: solid_wall components: - parent: 15 pos: -10.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1527 +- uid: 1526 type: solid_wall components: - parent: 15 pos: -10.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1528 +- uid: 1527 type: solid_wall components: - parent: 15 pos: -10.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1529 +- uid: 1528 type: solid_wall components: - parent: 15 pos: -10.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1530 +- uid: 1529 type: solid_wall components: - parent: 15 pos: -10.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1531 +- uid: 1530 type: solid_wall components: - parent: 15 pos: -12.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1532 +- uid: 1531 type: solid_wall components: - parent: 15 pos: -12.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1533 +- uid: 1532 type: solid_wall components: - parent: 15 pos: -12.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1534 +- uid: 1533 type: solid_wall components: - parent: 15 pos: -12.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1535 +- uid: 1534 type: solid_wall components: - parent: 15 pos: -12.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1536 +- uid: 1535 type: solid_wall components: - parent: 15 pos: -11.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1537 +- uid: 1536 type: solid_wall components: - parent: 15 pos: -10.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1538 +- uid: 1537 type: solid_wall components: - parent: 15 pos: -9.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1539 +- uid: 1538 type: solid_wall components: - parent: 15 pos: -8.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1540 +- uid: 1539 type: solid_wall components: - parent: 15 pos: -7.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1541 +- uid: 1540 type: solid_wall components: - parent: 15 pos: -13.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1542 +- uid: 1541 type: solid_wall components: - parent: 15 pos: -14.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1543 +- uid: 1542 type: solid_wall components: - parent: 15 pos: -15.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1544 +- uid: 1543 type: solid_wall components: - parent: 15 pos: -17.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1545 +- uid: 1544 type: solid_wall components: - parent: 15 pos: -18.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1546 +- uid: 1545 type: solid_wall components: - parent: 15 pos: -18.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1547 +- uid: 1546 type: solid_wall components: - parent: 15 pos: -18.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1548 +- uid: 1547 type: solid_wall components: - parent: 15 pos: -18.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1549 +- uid: 1548 type: solid_wall components: - parent: 15 pos: -18.5,-20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1550 +- uid: 1549 type: solid_wall components: - parent: 15 pos: -18.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1551 +- uid: 1550 type: solid_wall components: - parent: 15 pos: -18.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1552 +- uid: 1551 type: Table components: - parent: 15 pos: 6.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1553 +- uid: 1552 type: Table components: - parent: 15 pos: 5.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1554 +- uid: 1553 type: VendingMachineCoffee components: - parent: 15 pos: 5.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1555 +- uid: 1554 type: ToolboxElectricalFilled components: - parent: 15 @@ -22038,287 +22056,287 @@ entities: storagebase: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 1556 +- uid: 1555 type: solid_wall components: - parent: 15 pos: -16.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1557 +- uid: 1556 type: solid_wall components: - parent: 15 pos: -15.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1558 +- uid: 1557 type: solid_wall components: - parent: 15 pos: -14.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1559 +- uid: 1558 type: solid_wall components: - parent: 15 pos: -12.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1560 +- uid: 1559 type: solid_wall components: - parent: 15 pos: -11.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1561 +- uid: 1560 type: solid_wall components: - parent: 15 pos: -10.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1562 +- uid: 1561 type: solid_wall components: - parent: 15 pos: -10.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1563 +- uid: 1562 type: solid_wall components: - parent: 15 pos: -10.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1564 +- uid: 1563 type: solid_wall components: - parent: 15 pos: -10.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1565 +- uid: 1564 type: solid_wall components: - parent: 15 pos: -10.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1566 +- uid: 1565 type: solid_wall components: - parent: 15 pos: -10.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1567 +- uid: 1566 type: solid_wall components: - parent: 15 pos: -11.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1568 +- uid: 1567 type: solid_wall components: - parent: 15 pos: -13.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1569 +- uid: 1568 type: solid_wall components: - parent: 15 pos: -14.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1570 +- uid: 1569 type: solid_wall components: - parent: 15 pos: -15.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1571 +- uid: 1570 type: solid_wall components: - parent: 15 pos: -16.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1572 +- uid: 1571 type: solid_wall components: - parent: 15 pos: -16.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1573 +- uid: 1572 type: solid_wall components: - parent: 15 pos: -16.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1574 +- uid: 1573 type: solid_wall components: - parent: 15 pos: -16.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1575 +- uid: 1574 type: solid_wall components: - parent: 15 pos: -16.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1576 +- uid: 1575 type: solid_wall components: - parent: 15 pos: -9.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1577 +- uid: 1576 type: solid_wall components: - parent: 15 pos: -8.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1578 +- uid: 1577 type: solid_wall components: - parent: 15 pos: -7.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1579 +- uid: 1578 type: solid_wall components: - parent: 15 pos: -2.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1580 +- uid: 1579 type: solid_wall components: - parent: 15 pos: -2.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1581 +- uid: 1580 type: solid_wall components: - parent: 15 pos: -2.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1582 +- uid: 1581 type: solid_wall components: - parent: 15 pos: -3.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1583 +- uid: 1582 type: solid_wall components: - parent: 15 pos: -4.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1584 +- uid: 1583 type: solid_wall components: - parent: 15 pos: -5.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1585 +- uid: 1584 type: solid_wall components: - parent: 15 pos: -6.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1586 +- uid: 1585 type: solid_wall components: - parent: 15 pos: -7.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1587 +- uid: 1586 type: solid_wall components: - parent: 15 pos: -8.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1588 +- uid: 1587 type: solid_wall components: - parent: 15 pos: -8.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1589 +- uid: 1588 type: solid_wall components: - parent: 15 pos: -8.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1590 +- uid: 1589 type: solid_wall components: - parent: 15 pos: -7.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1591 +- uid: 1590 type: solid_wall components: - parent: 15 pos: -9.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1592 +- uid: 1591 type: solid_wall components: - parent: 15 pos: -10.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1593 +- uid: 1592 type: Table components: - parent: 15 pos: -15.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1594 +- uid: 1593 type: Table components: - parent: 15 pos: -15.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1595 +- uid: 1594 type: Table components: - parent: 15 pos: -29.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1596 +- uid: 1595 type: DisposalTrunk components: - parent: 15 @@ -22331,14 +22349,14 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 1597 +- uid: 1596 type: VendingMachineSovietSoda components: - parent: 15 pos: -11.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1598 +- uid: 1597 type: ChairOfficeDark components: - parent: 15 @@ -22347,42 +22365,42 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1599 +- uid: 1598 type: solid_wall components: - parent: 15 pos: -10.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1600 +- uid: 1599 type: solid_wall components: - parent: 15 pos: -4.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1601 +- uid: 1600 type: solid_wall components: - parent: 15 pos: -9.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1602 +- uid: 1601 type: solid_wall components: - parent: 15 pos: -11.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1603 +- uid: 1602 type: Table components: - parent: 15 pos: 26.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1604 +- uid: 1603 type: Multitool components: - parent: 15 @@ -22391,7 +22409,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1605 +- uid: 1604 type: Medkit components: - parent: 15 @@ -22404,35 +22422,35 @@ entities: storagebase: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 1606 +- uid: 1605 type: VendingMachineCola components: - parent: 15 pos: 29.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1607 +- uid: 1606 type: Table components: - parent: 15 pos: 28.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1608 +- uid: 1607 type: Table components: - parent: 15 pos: 20.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1609 +- uid: 1608 type: Table components: - parent: 15 pos: 19.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1610 +- uid: 1609 type: WeldingFuelTank components: - parent: 15 @@ -22441,7 +22459,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1611 +- uid: 1610 type: WeldingFuelTank components: - parent: 15 @@ -22450,7 +22468,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1612 +- uid: 1611 type: WeldingFuelTank components: - parent: 15 @@ -22459,7 +22477,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1613 +- uid: 1612 type: DrinkMugMoebius components: - parent: 15 @@ -22470,49 +22488,49 @@ entities: type: Solution - anchored: False type: Collidable -- uid: 1614 +- uid: 1613 type: VendingMachineSnack components: - parent: 15 pos: 9.5,28.5 rot: 3.141592653589793 rad type: Transform -- uid: 1615 +- uid: 1614 type: Table components: - parent: 15 pos: 0.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1616 +- uid: 1615 type: Table components: - parent: 15 pos: 1.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1617 +- uid: 1616 type: Table components: - parent: 15 pos: -0.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1618 +- uid: 1617 type: solid_wall components: - parent: 15 pos: -21.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1619 +- uid: 1618 type: solid_wall components: - parent: 15 pos: -22.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1620 +- uid: 1619 type: Paper components: - parent: 15 @@ -22521,259 +22539,259 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1621 +- uid: 1620 type: solid_wall components: - parent: 15 pos: -24.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1622 +- uid: 1621 type: solid_wall components: - parent: 15 pos: -25.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1623 +- uid: 1622 type: solid_wall components: - parent: 15 pos: -26.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1624 +- uid: 1623 type: solid_wall components: - parent: 15 pos: -27.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1625 +- uid: 1624 type: solid_wall components: - parent: 15 pos: -28.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1626 +- uid: 1625 type: solid_wall components: - parent: 15 pos: -29.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1627 +- uid: 1626 type: solid_wall components: - parent: 15 pos: -30.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1628 +- uid: 1627 type: solid_wall components: - parent: 15 pos: -31.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1629 +- uid: 1628 type: solid_wall components: - parent: 15 pos: -31.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1630 +- uid: 1629 type: solid_wall components: - parent: 15 pos: -31.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1631 +- uid: 1630 type: Table components: - parent: 15 pos: -1.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1632 +- uid: 1631 type: Table components: - parent: 15 pos: -2.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1633 +- uid: 1632 type: solid_wall components: - parent: 15 pos: -34.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1634 +- uid: 1633 type: solid_wall components: - parent: 15 pos: -34.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1635 +- uid: 1634 type: solid_wall components: - parent: 15 pos: -31.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1636 +- uid: 1635 type: solid_wall components: - parent: 15 pos: -31.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1637 +- uid: 1636 type: solid_wall components: - parent: 15 pos: -31.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1638 +- uid: 1637 type: solid_wall components: - parent: 15 pos: -30.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1639 +- uid: 1638 type: solid_wall components: - parent: 15 pos: -29.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1640 +- uid: 1639 type: solid_wall components: - parent: 15 pos: -28.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1641 +- uid: 1640 type: solid_wall components: - parent: 15 pos: -27.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1642 +- uid: 1641 type: solid_wall components: - parent: 15 pos: -26.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1643 +- uid: 1642 type: solid_wall components: - parent: 15 pos: -26.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1644 +- uid: 1643 type: solid_wall components: - parent: 15 pos: -26.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1645 +- uid: 1644 type: solid_wall components: - parent: 15 pos: -26.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1646 +- uid: 1645 type: solid_wall components: - parent: 15 pos: -26.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1647 +- uid: 1646 type: solid_wall components: - parent: 15 pos: -26.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1648 +- uid: 1647 type: Table components: - parent: 15 pos: -7.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1649 +- uid: 1648 type: solid_wall components: - parent: 15 pos: -21.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1650 +- uid: 1649 type: solid_wall components: - parent: 15 pos: -21.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1651 +- uid: 1650 type: solid_wall components: - parent: 15 pos: -20.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1652 +- uid: 1651 type: solid_wall components: - parent: 15 pos: -19.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1653 +- uid: 1652 type: solid_wall components: - parent: 15 pos: -18.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1654 +- uid: 1653 type: solid_wall components: - parent: 15 pos: -17.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1655 +- uid: 1654 type: SpawnPointLatejoin components: - parent: 15 pos: -36.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1656 +- uid: 1655 type: SpawnPointLatejoin components: - parent: 15 pos: -36.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1657 +- uid: 1656 type: CrateInternals components: - parent: 15 @@ -22788,7 +22806,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 1658 +- uid: 1657 type: CrateRadiation components: - parent: 15 @@ -22803,147 +22821,147 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 1659 +- uid: 1658 type: solid_wall components: - parent: 15 pos: -17.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1660 +- uid: 1659 type: solid_wall components: - parent: 15 pos: -17.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1661 +- uid: 1660 type: solid_wall components: - parent: 15 pos: -17.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1662 +- uid: 1661 type: solid_wall components: - parent: 15 pos: -18.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1663 +- uid: 1662 type: solid_wall components: - parent: 15 pos: -19.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1664 +- uid: 1663 type: solid_wall components: - parent: 15 pos: -20.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1665 +- uid: 1664 type: solid_wall components: - parent: 15 pos: -21.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1666 +- uid: 1665 type: solid_wall components: - parent: 15 pos: -21.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1667 +- uid: 1666 type: solid_wall components: - parent: 15 pos: -17.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1668 +- uid: 1667 type: solid_wall components: - parent: 15 pos: -20.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1669 +- uid: 1668 type: solid_wall components: - parent: 15 pos: -21.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1670 +- uid: 1669 type: solid_wall components: - parent: 15 pos: -21.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1671 +- uid: 1670 type: solid_wall components: - parent: 15 pos: -21.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1672 +- uid: 1671 type: solid_wall components: - parent: 15 pos: -21.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1673 +- uid: 1672 type: solid_wall components: - parent: 15 pos: -22.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1674 +- uid: 1673 type: solid_wall components: - parent: 15 pos: -25.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1675 +- uid: 1674 type: solid_wall components: - parent: 15 pos: -26.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1676 +- uid: 1675 type: solid_wall components: - parent: 15 pos: -26.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1677 +- uid: 1676 type: solid_wall components: - parent: 15 pos: -26.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1678 +- uid: 1677 type: solid_wall components: - parent: 15 pos: -27.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1679 +- uid: 1678 type: Poweredlight components: - parent: 15 @@ -22958,399 +22976,399 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1680 +- uid: 1679 type: Window components: - parent: 15 pos: -25.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1681 +- uid: 1680 type: solid_wall components: - parent: 15 pos: -30.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1682 +- uid: 1681 type: solid_wall components: - parent: 15 pos: -31.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1683 +- uid: 1682 type: solid_wall components: - parent: 15 pos: -31.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1684 +- uid: 1683 type: solid_wall components: - parent: 15 pos: -31.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1685 +- uid: 1684 type: solid_wall components: - parent: 15 pos: -31.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1686 +- uid: 1685 type: solid_wall components: - parent: 15 pos: -31.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1687 +- uid: 1686 type: solid_wall components: - parent: 15 pos: -31.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1688 +- uid: 1687 type: solid_wall components: - parent: 15 pos: -34.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1689 +- uid: 1688 type: solid_wall components: - parent: 15 pos: -34.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1690 +- uid: 1689 type: solid_wall components: - parent: 15 pos: -34.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1691 +- uid: 1690 type: solid_wall components: - parent: 15 pos: -34.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1692 +- uid: 1691 type: solid_wall components: - parent: 15 pos: -34.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1693 +- uid: 1692 type: solid_wall components: - parent: 15 pos: -34.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1694 +- uid: 1693 type: solid_wall components: - parent: 15 pos: -34.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1695 +- uid: 1694 type: solid_wall components: - parent: 15 pos: -34.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1696 +- uid: 1695 type: solid_wall components: - parent: 15 pos: -33.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1697 +- uid: 1696 type: solid_wall components: - parent: 15 pos: -33.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1698 +- uid: 1697 type: LowWall components: - parent: 15 pos: -5.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1699 +- uid: 1698 type: LowWall components: - parent: 15 pos: -6.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1700 +- uid: 1699 type: LowWall components: - parent: 15 pos: -7.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1701 +- uid: 1700 type: LowWall components: - parent: 15 pos: -8.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1702 +- uid: 1701 type: LowWall components: - parent: 15 pos: -35.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1703 +- uid: 1702 type: LowWall components: - parent: 15 pos: -36.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1704 +- uid: 1703 type: LowWall components: - parent: 15 pos: -37.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1705 +- uid: 1704 type: LowWall components: - parent: 15 pos: -38.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1706 +- uid: 1705 type: LowWall components: - parent: 15 pos: -38.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1707 +- uid: 1706 type: LowWall components: - parent: 15 pos: -38.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1708 +- uid: 1707 type: LowWall components: - parent: 15 pos: -38.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1709 +- uid: 1708 type: LowWall components: - parent: 15 pos: -38.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1710 +- uid: 1709 type: LowWall components: - parent: 15 pos: -39.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1711 +- uid: 1710 type: LowWall components: - parent: 15 pos: -37.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1712 +- uid: 1711 type: LowWall components: - parent: 15 pos: -39.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1713 +- uid: 1712 type: LowWall components: - parent: 15 pos: -38.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1714 +- uid: 1713 type: LowWall components: - parent: 15 pos: -37.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1715 +- uid: 1714 type: LowWall components: - parent: 15 pos: -38.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1716 +- uid: 1715 type: LowWall components: - parent: 15 pos: -38.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1717 +- uid: 1716 type: LowWall components: - parent: 15 pos: -38.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1718 +- uid: 1717 type: ReinforcedWindow components: - parent: 15 pos: -37.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1719 +- uid: 1718 type: LowWall components: - parent: 15 pos: -39.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1720 +- uid: 1719 type: LowWall components: - parent: 15 pos: -40.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1721 +- uid: 1720 type: LowWall components: - parent: 15 pos: -40.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1722 +- uid: 1721 type: LowWall components: - parent: 15 pos: -40.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1723 +- uid: 1722 type: LowWall components: - parent: 15 pos: -41.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1724 +- uid: 1723 type: LowWall components: - parent: 15 pos: -39.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1725 +- uid: 1724 type: LowWall components: - parent: 15 pos: -39.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1726 +- uid: 1725 type: LowWall components: - parent: 15 pos: -40.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1727 +- uid: 1726 type: LowWall components: - parent: 15 pos: -41.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1728 +- uid: 1727 type: LowWall components: - parent: 15 pos: -40.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1729 +- uid: 1728 type: LowWall components: - parent: 15 pos: -40.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1730 +- uid: 1729 type: LowWall components: - parent: 15 pos: -41.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1731 +- uid: 1730 type: LowWall components: - parent: 15 pos: -39.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1732 +- uid: 1731 type: LowWall components: - parent: 15 pos: -39.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1733 +- uid: 1732 type: LowWall components: - parent: 15 pos: -40.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1734 +- uid: 1733 type: LowWall components: - parent: 15 pos: -41.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1735 +- uid: 1734 type: LowWall components: - parent: 15 pos: -40.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1736 +- uid: 1735 type: Poweredlight components: - parent: 15 @@ -23365,104 +23383,104 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1737 +- uid: 1736 type: solid_wall components: - parent: 15 pos: -40.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1738 +- uid: 1737 type: LowWall components: - parent: 15 pos: -37.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1739 +- uid: 1738 type: LowWall components: - parent: 15 pos: -36.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1740 +- uid: 1739 type: LowWall components: - parent: 15 pos: -35.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1741 +- uid: 1740 type: Catwalk components: - parent: 15 pos: -32.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1742 +- uid: 1741 type: solid_wall components: - parent: 15 pos: 0.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1743 +- uid: 1742 type: ReinforcedWindow components: - parent: 15 pos: 30.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1744 +- uid: 1743 type: Window components: - parent: 15 pos: 32.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1745 +- uid: 1744 type: Window components: - parent: 15 pos: 34.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1746 +- uid: 1745 type: Window components: - parent: 15 pos: 36.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1747 +- uid: 1746 type: Window components: - parent: 15 pos: 37.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1748 +- uid: 1747 type: Window components: - parent: 15 pos: 39.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1749 +- uid: 1748 type: Window components: - parent: 15 pos: 40.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1750 +- uid: 1749 type: APC components: - parent: 15 pos: -11.5,2.5 type: Transform -- uid: 1751 +- uid: 1750 type: Poweredlight components: - parent: 15 @@ -23477,1224 +23495,1223 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1752 - type: solid_wall +- uid: 1751 + type: SignCloning components: - parent: 15 - pos: -25.5,-16.5 + pos: 7.326743,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1752 + type: SignSmoking + components: + - parent: 15 + pos: 42.70487,10.5 rot: -1.5707963267948966 rad type: Transform - uid: 1753 - type: solid_wall - components: - - parent: 15 - pos: -25.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1754 type: Window components: - parent: 15 pos: 32.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1755 +- uid: 1754 type: Window components: - parent: 15 pos: 34.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1756 +- uid: 1755 type: ReinforcedWindow components: - parent: 15 pos: 30.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1757 +- uid: 1756 type: ReinforcedWindow components: - parent: 15 pos: 30.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1758 +- uid: 1757 type: ReinforcedWindow components: - parent: 15 pos: 31.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1759 +- uid: 1758 type: ReinforcedWindow components: - parent: 15 pos: 32.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1760 +- uid: 1759 type: ReinforcedWindow components: - parent: 15 pos: 33.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1761 +- uid: 1760 type: ReinforcedWindow components: - parent: 15 pos: 34.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1762 +- uid: 1761 type: ReinforcedWindow components: - parent: 15 pos: 35.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1763 +- uid: 1762 type: ReinforcedWindow components: - parent: 15 pos: 36.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1764 +- uid: 1763 type: ReinforcedWindow components: - parent: 15 pos: 36.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1765 - type: ReinforcedWindow +- uid: 1764 + type: solid_wall components: - parent: 15 - pos: 28.5,14.5 + pos: -20.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1765 + type: solid_wall + components: + - parent: 15 + pos: -1.5,-7.5 rot: -1.5707963267948966 rad type: Transform - uid: 1766 - type: ReinforcedWindow + type: SignSmoking components: - parent: 15 - pos: 27.5,14.5 + pos: -1.2919803,-7.6148567 rot: -1.5707963267948966 rad type: Transform - uid: 1767 type: ReinforcedWindow components: - parent: 15 - pos: 26.5,14.5 + pos: 21.5,14.5 rot: -1.5707963267948966 rad type: Transform - uid: 1768 type: ReinforcedWindow components: - parent: 15 - pos: 24.5,14.5 + pos: 23.5,14.5 rot: -1.5707963267948966 rad type: Transform - uid: 1769 type: ReinforcedWindow components: - parent: 15 - pos: 23.5,14.5 + pos: 23.5,15.5 rot: -1.5707963267948966 rad type: Transform - uid: 1770 - type: ReinforcedWindow - components: - - parent: 15 - pos: 23.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1771 type: ReinforcedWindow components: - parent: 15 pos: 23.5,16.5 rot: -1.5707963267948966 rad type: Transform +- uid: 1771 + type: SignDirectionalBridge + components: + - parent: 15 + pos: 1.3437586,6.5 + rot: 1.5707963267948966 rad + type: Transform - uid: 1772 + type: SignConference + components: + - parent: 15 + pos: -2.6767635,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1773 + type: SignArmory + components: + - parent: 15 + pos: -13.678196,17.5 + type: Transform +- uid: 1774 type: ReinforcedWindow components: - parent: 15 pos: 21.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1773 - type: ReinforcedWindow - components: - - parent: 15 - pos: 21.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1774 - type: ReinforcedWindow - components: - - parent: 15 - pos: 21.5,14.5 - rot: -1.5707963267948966 rad - type: Transform - uid: 1775 - type: ReinforcedWindow + type: LowWall components: - parent: 15 - pos: 18.5,14.5 + pos: 14.5,18.5 rot: -1.5707963267948966 rad type: Transform - uid: 1776 type: LowWall components: - parent: 15 - pos: 14.5,18.5 + pos: 14.5,19.5 rot: -1.5707963267948966 rad type: Transform - uid: 1777 - type: LowWall - components: - - parent: 15 - pos: 14.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1778 type: LowWall components: - parent: 15 pos: 14.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1779 +- uid: 1778 type: ReinforcedWindow components: - parent: 15 pos: 14.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1780 +- uid: 1779 type: ReinforcedWindow components: - parent: 15 pos: 14.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1781 +- uid: 1780 type: ReinforcedWindow components: - parent: 15 pos: 14.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1782 +- uid: 1781 type: ReinforcedWindow components: - parent: 15 pos: 6.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1783 +- uid: 1782 type: ReinforcedWindow components: - parent: 15 pos: 6.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1784 +- uid: 1783 type: ReinforcedWindow components: - parent: 15 pos: 8.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1785 +- uid: 1784 type: Window components: - parent: 15 pos: 14.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1786 +- uid: 1785 type: Window components: - parent: 15 pos: 19.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1787 +- uid: 1786 type: Window components: - parent: 15 pos: 20.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1788 +- uid: 1787 type: Window components: - parent: 15 pos: 21.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1789 +- uid: 1788 type: Window components: - parent: 15 pos: 22.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1790 +- uid: 1789 type: Window components: - parent: 15 pos: 13.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1791 +- uid: 1790 type: Window components: - parent: 15 pos: 13.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1792 +- uid: 1791 type: Window components: - parent: 15 pos: 13.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1793 +- uid: 1792 type: Window components: - parent: 15 pos: 11.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1794 +- uid: 1793 type: Window components: - parent: 15 pos: 10.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1795 +- uid: 1794 type: Window components: - parent: 15 pos: 9.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1796 +- uid: 1795 type: Window components: - parent: 15 pos: 8.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1797 +- uid: 1796 type: Window components: - parent: 15 pos: 7.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1798 +- uid: 1797 type: Window components: - parent: 15 pos: 8.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1799 +- uid: 1798 type: Window components: - parent: 15 pos: 9.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1800 +- uid: 1799 type: Window components: - parent: 15 pos: 6.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1801 +- uid: 1800 type: Window components: - parent: 15 pos: 12.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1802 +- uid: 1801 type: Window components: - parent: 15 pos: 13.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1803 +- uid: 1802 type: Window components: - parent: 15 pos: 13.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1804 +- uid: 1803 type: Window components: - parent: 15 pos: 16.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1805 +- uid: 1804 type: Window components: - parent: 15 pos: 18.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1806 +- uid: 1805 type: LowWall components: - parent: 15 pos: 20.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1807 +- uid: 1806 type: LowWall components: - parent: 15 pos: 20.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1808 +- uid: 1807 type: Window components: - parent: 15 pos: 20.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1809 +- uid: 1808 type: LowWall components: - parent: 15 pos: 10.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1810 +- uid: 1809 type: LowWall components: - parent: 15 pos: 7.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1811 +- uid: 1810 type: LowWall components: - parent: 15 pos: 11.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1812 +- uid: 1811 type: LowWall components: - parent: 15 pos: 11.5,-16.5 rot: -1.5707963267948966 rad type: Transform +- uid: 1812 + type: Window + components: + - parent: 15 + pos: 11.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 1813 type: Window components: - parent: 15 - pos: 11.5,-16.5 + pos: 11.5,-13.5 rot: -1.5707963267948966 rad type: Transform - uid: 1814 type: Window components: - parent: 15 - pos: 11.5,-13.5 + pos: 10.5,-12.5 rot: -1.5707963267948966 rad type: Transform - uid: 1815 type: Window components: - parent: 15 - pos: 10.5,-12.5 + pos: 7.5,-12.5 rot: -1.5707963267948966 rad type: Transform - uid: 1816 type: Window components: - parent: 15 - pos: 7.5,-12.5 + pos: 5.5,-10.5 rot: -1.5707963267948966 rad type: Transform - uid: 1817 type: Window components: - parent: 15 - pos: 5.5,-10.5 + pos: 5.5,-9.5 rot: -1.5707963267948966 rad type: Transform - uid: 1818 type: Window components: - parent: 15 - pos: 5.5,-9.5 + pos: 5.5,-8.5 rot: -1.5707963267948966 rad type: Transform - uid: 1819 type: Window components: - parent: 15 - pos: 5.5,-8.5 + pos: 0.5,-16.5 rot: -1.5707963267948966 rad type: Transform - uid: 1820 type: Window components: - parent: 15 - pos: 0.5,-16.5 + pos: -2.5,-18.5 rot: -1.5707963267948966 rad type: Transform - uid: 1821 type: Window components: - parent: 15 - pos: -2.5,-18.5 + pos: -4.5,-18.5 rot: -1.5707963267948966 rad type: Transform - uid: 1822 type: Window components: - parent: 15 - pos: -4.5,-18.5 + pos: -5.5,-21.5 rot: -1.5707963267948966 rad type: Transform - uid: 1823 type: Window components: - parent: 15 - pos: -5.5,-21.5 + pos: -4.5,-21.5 rot: -1.5707963267948966 rad type: Transform - uid: 1824 type: Window components: - parent: 15 - pos: -4.5,-21.5 + pos: -2.5,-21.5 rot: -1.5707963267948966 rad type: Transform - uid: 1825 type: Window components: - parent: 15 - pos: -2.5,-21.5 + pos: -5.5,2.5 rot: -1.5707963267948966 rad type: Transform - uid: 1826 type: Window components: - parent: 15 - pos: -5.5,2.5 + pos: -6.5,2.5 rot: -1.5707963267948966 rad type: Transform - uid: 1827 type: Window components: - parent: 15 - pos: -6.5,2.5 + pos: -27.5,6.5 rot: -1.5707963267948966 rad type: Transform - uid: 1828 type: Window components: - parent: 15 - pos: -27.5,6.5 + pos: -28.5,6.5 rot: -1.5707963267948966 rad type: Transform - uid: 1829 type: Window components: - parent: 15 - pos: -28.5,6.5 + pos: -29.5,6.5 rot: -1.5707963267948966 rad type: Transform - uid: 1830 - type: Window + type: LowWall components: - parent: 15 pos: -29.5,6.5 rot: -1.5707963267948966 rad type: Transform - uid: 1831 - type: LowWall - components: - - parent: 15 - pos: -29.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1832 type: LowWall components: - parent: 15 pos: -27.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1833 +- uid: 1832 type: ReinforcedWindow components: - parent: 15 pos: -35.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1834 +- uid: 1833 type: ReinforcedWindow components: - parent: 15 pos: -36.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1835 +- uid: 1834 type: ReinforcedWindow components: - parent: 15 pos: -37.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1836 +- uid: 1835 type: ReinforcedWindow components: - parent: 15 pos: -38.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1837 +- uid: 1836 type: ReinforcedWindow components: - parent: 15 pos: -38.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1838 +- uid: 1837 type: ReinforcedWindow components: - parent: 15 pos: -38.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1839 +- uid: 1838 type: ReinforcedWindow components: - parent: 15 pos: -38.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1840 +- uid: 1839 type: ReinforcedWindow components: - parent: 15 pos: -38.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1841 +- uid: 1840 type: ReinforcedWindow components: - parent: 15 pos: -37.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1842 +- uid: 1841 type: ReinforcedWindow components: - parent: 15 pos: -39.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1843 +- uid: 1842 type: ReinforcedWindow components: - parent: 15 pos: -38.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1844 +- uid: 1843 type: ReinforcedWindow components: - parent: 15 pos: -39.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1845 +- uid: 1844 type: solid_wall components: - parent: 15 pos: -38.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1846 +- uid: 1845 type: ReinforcedWindow components: - parent: 15 pos: -38.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1847 +- uid: 1846 type: ReinforcedWindow components: - parent: 15 pos: -38.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1848 +- uid: 1847 type: ReinforcedWindow components: - parent: 15 pos: -38.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1849 +- uid: 1848 type: ReinforcedWindow components: - parent: 15 pos: -39.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1850 +- uid: 1849 type: ReinforcedWindow components: - parent: 15 pos: -40.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1851 +- uid: 1850 type: ReinforcedWindow components: - parent: 15 pos: -40.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1852 +- uid: 1851 type: ReinforcedWindow components: - parent: 15 pos: -40.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1853 +- uid: 1852 type: ReinforcedWindow components: - parent: 15 pos: -41.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1854 +- uid: 1853 type: ReinforcedWindow components: - parent: 15 pos: -39.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1855 +- uid: 1854 type: ReinforcedWindow components: - parent: 15 pos: -39.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1856 +- uid: 1855 type: ReinforcedWindow components: - parent: 15 pos: -40.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1857 +- uid: 1856 type: ReinforcedWindow components: - parent: 15 pos: -41.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1858 +- uid: 1857 type: ReinforcedWindow components: - parent: 15 pos: -40.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1859 +- uid: 1858 type: ReinforcedWindow components: - parent: 15 pos: -40.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1860 +- uid: 1859 type: ReinforcedWindow components: - parent: 15 pos: -41.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1861 +- uid: 1860 type: ReinforcedWindow components: - parent: 15 pos: -39.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1862 +- uid: 1861 type: ReinforcedWindow components: - parent: 15 pos: -39.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1863 +- uid: 1862 type: ReinforcedWindow components: - parent: 15 pos: -40.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1864 +- uid: 1863 type: ReinforcedWindow components: - parent: 15 pos: -41.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1865 +- uid: 1864 type: ReinforcedWindow components: - parent: 15 pos: -40.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1866 +- uid: 1865 type: APC components: - parent: 15 pos: -33.5,7.5 type: Transform -- uid: 1867 +- uid: 1866 type: solid_wall components: - parent: 15 pos: -39.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1868 +- uid: 1867 type: ReinforcedWindow components: - parent: 15 pos: -37.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1869 +- uid: 1868 type: ReinforcedWindow components: - parent: 15 pos: -36.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1870 +- uid: 1869 type: ReinforcedWindow components: - parent: 15 pos: -35.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1871 +- uid: 1870 type: solid_wall components: - parent: 15 pos: -29.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1872 +- uid: 1871 type: solid_wall components: - parent: 15 pos: -28.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1873 +- uid: 1872 type: ReinforcedWindow components: - parent: 15 pos: -3.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1874 +- uid: 1873 type: ReinforcedWindow components: - parent: 15 pos: -2.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1875 +- uid: 1874 type: ReinforcedWindow components: - parent: 15 pos: -0.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1876 +- uid: 1875 type: ReinforcedWindow components: - parent: 15 pos: 0.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1877 +- uid: 1876 type: ReinforcedWindow components: - parent: 15 pos: -0.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1878 +- uid: 1877 type: ReinforcedWindow components: - parent: 15 pos: -3.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1879 +- uid: 1878 type: ReinforcedWindow components: - parent: 15 pos: -8.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1880 +- uid: 1879 type: ReinforcedWindow components: - parent: 15 pos: -7.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1881 +- uid: 1880 type: Window components: - parent: 15 pos: -10.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1882 +- uid: 1881 type: Window components: - parent: 15 pos: -7.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1883 +- uid: 1882 type: ReinforcedWindow components: - parent: 15 pos: -2.5,31.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1884 +- uid: 1883 type: ReinforcedWindow components: - parent: 15 pos: -2.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1885 +- uid: 1884 type: ReinforcedWindow components: - parent: 15 pos: -3.5,29.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1886 +- uid: 1885 type: ReinforcedWindow components: - parent: 15 pos: -1.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1887 +- uid: 1886 type: ReinforcedWindow components: - parent: 15 pos: -1.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1888 +- uid: 1887 type: ReinforcedWindow components: - parent: 15 pos: -0.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1889 +- uid: 1888 type: ReinforcedWindow components: - parent: 15 pos: 0.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1890 +- uid: 1889 type: ReinforcedWindow components: - parent: 15 pos: 1.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1891 +- uid: 1890 type: ReinforcedWindow components: - parent: 15 pos: 2.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1892 +- uid: 1891 type: ReinforcedWindow components: - parent: 15 pos: 3.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1893 +- uid: 1892 type: ReinforcedWindow components: - parent: 15 pos: 4.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1894 +- uid: 1893 type: ReinforcedWindow components: - parent: 15 pos: 5.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1895 +- uid: 1894 type: ReinforcedWindow components: - parent: 15 pos: 6.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1896 +- uid: 1895 type: ReinforcedWindow components: - parent: 15 pos: 7.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1897 +- uid: 1896 type: ReinforcedWindow components: - parent: 15 pos: 8.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1898 +- uid: 1897 type: ReinforcedWindow components: - parent: 15 pos: 8.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1899 +- uid: 1898 type: ReinforcedWindow components: - parent: 15 pos: 9.5,31.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1900 +- uid: 1899 type: ReinforcedWindow components: - parent: 15 pos: 9.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1901 +- uid: 1900 type: ReinforcedWindow components: - parent: 15 pos: 10.5,29.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1902 +- uid: 1901 type: ReinforcedWindow components: - parent: 15 pos: 3.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1903 +- uid: 1902 type: Window components: - parent: 15 pos: -0.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1904 +- uid: 1903 type: Window components: - parent: 15 pos: -1.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1905 +- uid: 1904 type: ReinforcedWindow components: - parent: 15 pos: 2.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1906 +- uid: 1905 type: ReinforcedWindow components: - parent: 15 pos: 3.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1907 +- uid: 1906 type: ReinforcedWindow components: - parent: 15 pos: 4.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1908 +- uid: 1907 type: ReinforcedWindow components: - parent: 15 pos: 5.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1909 +- uid: 1908 type: ReinforcedWindow components: - parent: 15 pos: 5.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1910 +- uid: 1909 type: Window components: - parent: 15 pos: 9.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1911 +- uid: 1910 type: Window components: - parent: 15 pos: 10.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1912 +- uid: 1911 type: Window components: - parent: 15 pos: 11.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1913 +- uid: 1912 type: ReinforcedWindow components: - parent: 15 pos: 51.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1914 +- uid: 1913 type: Wire components: - parent: 15 pos: 40.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1915 +- uid: 1914 type: Wire components: - parent: 15 pos: 41.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1916 +- uid: 1915 type: Wire components: - parent: 15 pos: 42.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1917 +- uid: 1916 type: Wire components: - parent: 15 pos: 43.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1918 +- uid: 1917 type: Wire components: - parent: 15 pos: 43.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1919 +- uid: 1918 type: Wire components: - parent: 15 pos: 43.5,10.5 rot: -1.5707963267948966 rad type: Transform +- uid: 1919 + type: APC + components: + - parent: 15 + pos: 43.5,10.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 1920 - type: APC - components: - - parent: 15 - pos: 43.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1921 type: Wire components: - parent: 15 pos: 41.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1922 +- uid: 1921 type: Wire components: - parent: 15 pos: 41.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1923 +- uid: 1922 type: Wire components: - parent: 15 pos: 41.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1924 +- uid: 1923 type: Wire components: - parent: 15 pos: 41.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1925 +- uid: 1924 type: APC components: - parent: 15 pos: 41.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1926 +- uid: 1925 type: WaterTankFull components: - parent: 15 @@ -24703,7 +24720,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1927 +- uid: 1926 type: WaterTankFull components: - parent: 15 @@ -24712,22 +24729,13 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1928 - type: Poweredlight +- uid: 1927 + type: SignDirectionalEng components: - parent: 15 - pos: 42.5,10 - rot: -1.5707963267948966 rad + pos: 18.507353,6.5 type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1929 +- uid: 1928 type: Poweredlight components: - parent: 15 @@ -24741,7 +24749,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1930 +- uid: 1929 type: Poweredlight components: - parent: 15 @@ -24756,7 +24764,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1931 +- uid: 1930 type: Poweredlight components: - parent: 15 @@ -24771,34 +24779,24 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer +- uid: 1931 + type: Poweredlight + components: + - parent: 15 + pos: -14.5,17 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer - uid: 1932 - type: PoweredSmallLight + type: PaintingMonkey components: - parent: 15 - pos: 38,12.5 - rot: 3.141592653589793 rad + pos: -7.6996727,-5.5 type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer - uid: 1933 - type: PoweredSmallLight - components: - - parent: 15 - pos: 44,12.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1934 type: PoweredSmallLight components: - parent: 15 @@ -24810,7 +24808,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1935 +- uid: 1934 type: Poweredlight components: - parent: 15 @@ -24825,7 +24823,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1936 +- uid: 1935 type: Poweredlight components: - parent: 15 @@ -24838,7 +24836,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1937 +- uid: 1936 type: Poweredlight components: - parent: 15 @@ -24850,65 +24848,65 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1938 +- uid: 1937 type: Wire components: - parent: 15 pos: 32.5,9.5 type: Transform -- uid: 1939 +- uid: 1938 type: Wire components: - parent: 15 pos: 31.5,9.5 type: Transform -- uid: 1940 +- uid: 1939 type: Wire components: - parent: 15 pos: 30.5,9.5 type: Transform -- uid: 1941 +- uid: 1940 type: Wire components: - parent: 15 pos: 29.5,9.5 type: Transform -- uid: 1942 +- uid: 1941 type: APC components: - parent: 15 pos: 29.5,9.5 type: Transform -- uid: 1943 +- uid: 1942 type: Wire components: - parent: 15 pos: 35.5,-1.5 rot: 3.141592653589793 rad type: Transform -- uid: 1944 +- uid: 1943 type: Wire components: - parent: 15 pos: 34.5,-1.5 rot: 3.141592653589793 rad type: Transform -- uid: 1945 +- uid: 1944 type: Wire components: - parent: 15 pos: 36.5,-1.5 rot: 3.141592653589793 rad type: Transform -- uid: 1946 +- uid: 1945 type: APC components: - parent: 15 pos: 36.5,-1.5 rot: 3.141592653589793 rad type: Transform -- uid: 1947 +- uid: 1946 type: Poweredlight components: - parent: 15 @@ -24923,7 +24921,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1948 +- uid: 1947 type: Poweredlight components: - parent: 15 @@ -24937,7 +24935,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1949 +- uid: 1948 type: Poweredlight components: - parent: 15 @@ -24952,7 +24950,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1950 +- uid: 1949 type: Poweredlight components: - parent: 15 @@ -24967,7 +24965,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1951 +- uid: 1950 type: Poweredlight components: - parent: 15 @@ -24981,22 +24979,14 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1952 - type: Poweredlight +- uid: 1951 + type: SignEngineering components: - parent: 15 - pos: 28.5,7 + pos: 26.30795,7.5 rot: -1.5707963267948966 rad type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1953 +- uid: 1952 type: Poweredlight components: - parent: 15 @@ -25011,7 +25001,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1954 +- uid: 1953 type: Poweredlight components: - parent: 15 @@ -25025,49 +25015,49 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1955 +- uid: 1954 type: Wire components: - parent: 15 pos: 27.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1956 +- uid: 1955 type: Wire components: - parent: 15 pos: 27.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1957 +- uid: 1956 type: Wire components: - parent: 15 pos: 27.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1958 +- uid: 1957 type: Wire components: - parent: 15 pos: 27.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1959 +- uid: 1958 type: Wire components: - parent: 15 pos: 27.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1960 +- uid: 1959 type: APC components: - parent: 15 pos: 27.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1961 +- uid: 1960 type: PoweredSmallLight components: - parent: 15 @@ -25082,7 +25072,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1962 +- uid: 1961 type: PoweredSmallLight components: - parent: 15 @@ -25097,7 +25087,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1963 +- uid: 1962 type: PoweredSmallLight components: - parent: 15 @@ -25112,7 +25102,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1964 +- uid: 1963 type: PoweredSmallLight components: - parent: 15 @@ -25127,7 +25117,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1965 +- uid: 1964 type: PoweredSmallLight components: - parent: 15 @@ -25141,7 +25131,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1966 +- uid: 1965 type: PoweredSmallLight components: - parent: 15 @@ -25155,7 +25145,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1967 +- uid: 1966 type: PoweredSmallLight components: - parent: 15 @@ -25169,7 +25159,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1968 +- uid: 1967 type: PoweredSmallLight components: - parent: 15 @@ -25184,21 +25174,21 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1969 +- uid: 1968 type: solid_wall components: - parent: 15 pos: 45.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1970 +- uid: 1969 type: solid_wall components: - parent: 15 pos: 45.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1971 +- uid: 1970 type: PoweredSmallLight components: - parent: 15 @@ -25213,98 +25203,98 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1972 +- uid: 1971 type: APC components: - parent: 15 pos: 20.5,-4.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1973 +- uid: 1972 type: Wire components: - parent: 15 pos: 23.5,-12.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1974 +- uid: 1973 type: Wire components: - parent: 15 pos: 23.5,-11.5 rot: 1.5707963267948966 rad type: Transform +- uid: 1974 + type: APC + components: + - parent: 15 + pos: 23.5,-11.5 + rot: 1.5707963267948966 rad + type: Transform - uid: 1975 - type: APC - components: - - parent: 15 - pos: 23.5,-11.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1976 type: Wire components: - parent: 15 pos: 15.5,-16.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1977 +- uid: 1976 type: Wire components: - parent: 15 pos: 16.5,-16.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1978 +- uid: 1977 type: Wire components: - parent: 15 pos: 16.5,-17.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1979 +- uid: 1978 type: Wire components: - parent: 15 pos: 16.5,-18.5 rot: 1.5707963267948966 rad type: Transform +- uid: 1979 + type: APC + components: + - parent: 15 + pos: 16.5,-18.5 + rot: 1.5707963267948966 rad + type: Transform - uid: 1980 - type: APC - components: - - parent: 15 - pos: 16.5,-18.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1981 type: Wire components: - parent: 15 pos: 8.5,-15.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1982 +- uid: 1981 type: Wire components: - parent: 15 pos: 8.5,-17.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1983 +- uid: 1982 type: Wire components: - parent: 15 pos: 8.5,-16.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1984 +- uid: 1983 type: APC components: - parent: 15 pos: 8.5,-17.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1985 +- uid: 1984 type: PoweredSmallLight components: - parent: 15 @@ -25319,7 +25309,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1986 +- uid: 1985 type: PoweredSmallLight components: - parent: 15 @@ -25334,7 +25324,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1987 +- uid: 1986 type: PoweredSmallLight components: - parent: 15 @@ -25349,7 +25339,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1988 +- uid: 1987 type: Poweredlight components: - parent: 15 @@ -25364,7 +25354,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1989 +- uid: 1988 type: Poweredlight components: - parent: 15 @@ -25377,7 +25367,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1990 +- uid: 1989 type: Poweredlight components: - parent: 15 @@ -25392,7 +25382,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1991 +- uid: 1990 type: Poweredlight components: - parent: 15 @@ -25407,7 +25397,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1992 +- uid: 1991 type: Poweredlight components: - parent: 15 @@ -25422,7 +25412,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1993 +- uid: 1992 type: ChairOfficeLight components: - parent: 15 @@ -25431,7 +25421,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1994 +- uid: 1993 type: ChairOfficeLight components: - parent: 15 @@ -25440,21 +25430,21 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1995 +- uid: 1994 type: solid_wall components: - parent: 15 pos: 47.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1996 +- uid: 1995 type: solid_wall components: - parent: 15 pos: 51.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1997 +- uid: 1996 type: Poweredlight components: - parent: 15 @@ -25468,7 +25458,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1998 +- uid: 1997 type: Poweredlight components: - parent: 15 @@ -25483,7 +25473,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1999 +- uid: 1998 type: Poweredlight components: - parent: 15 @@ -25498,7 +25488,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2000 +- uid: 1999 type: Poweredlight components: - parent: 15 @@ -25512,51 +25502,44 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2001 +- uid: 2000 type: Wire components: - parent: 15 pos: 6.5,-1.5 type: Transform -- uid: 2002 +- uid: 2001 type: Wire components: - parent: 15 pos: 6.5,-2.5 type: Transform -- uid: 2003 +- uid: 2002 type: Wire components: - parent: 15 pos: 6.5,-3.5 type: Transform -- uid: 2004 +- uid: 2003 type: Wire components: - parent: 15 pos: 5.5,-3.5 type: Transform -- uid: 2005 +- uid: 2004 type: APC components: - parent: 15 pos: 5.5,-3.5 type: Transform -- uid: 2006 - type: Poweredlight +- uid: 2005 + type: SignDirectionalMed components: - parent: 15 - pos: 6,1.5 + pos: 5.768486,-12.5 + rot: 1.5707963267948966 rad type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2007 +- uid: 2006 type: Poweredlight components: - parent: 15 @@ -25571,28 +25554,28 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2008 +- uid: 2007 type: Wire components: - parent: 15 pos: 17.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2009 +- uid: 2008 type: Wire components: - parent: 15 pos: 17.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2010 +- uid: 2009 type: APC components: - parent: 15 pos: 17.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2011 +- uid: 2010 type: Poweredlight components: - parent: 15 @@ -25607,20 +25590,14 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2012 - type: Poweredlight +- uid: 2011 + type: SignCargo components: - parent: 15 - pos: 14.5,-4 + pos: 16.688538,8.5 rot: -1.5707963267948966 rad type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2013 +- uid: 2012 type: Poweredlight components: - parent: 15 @@ -25634,7 +25611,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2014 +- uid: 2013 type: Poweredlight components: - parent: 15 @@ -25649,7 +25626,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2015 +- uid: 2014 type: Poweredlight components: - parent: 15 @@ -25664,7 +25641,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2016 +- uid: 2015 type: Poweredlight components: - parent: 15 @@ -25679,70 +25656,70 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2017 +- uid: 2016 type: Wire components: - parent: 15 pos: 14.5,11.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2018 +- uid: 2017 type: Wire components: - parent: 15 pos: 14.5,12.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2019 +- uid: 2018 type: Wire components: - parent: 15 pos: 14.5,13.5 rot: 1.5707963267948966 rad type: Transform +- uid: 2019 + type: APC + components: + - parent: 15 + pos: 14.5,13.5 + rot: 1.5707963267948966 rad + type: Transform - uid: 2020 - type: APC - components: - - parent: 15 - pos: 14.5,13.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2021 type: Wire components: - parent: 15 pos: 8.5,10.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2022 +- uid: 2021 type: Wire components: - parent: 15 pos: 7.5,10.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2023 +- uid: 2022 type: Wire components: - parent: 15 pos: 6.5,10.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2024 +- uid: 2023 type: Wire components: - parent: 15 pos: 5.5,10.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2025 +- uid: 2024 type: APC components: - parent: 15 pos: 5.5,10.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2026 +- uid: 2025 type: Poweredlight components: - parent: 15 @@ -25754,7 +25731,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2027 +- uid: 2026 type: Poweredlight components: - parent: 15 @@ -25768,7 +25745,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2028 +- uid: 2027 type: Poweredlight components: - parent: 15 @@ -25783,7 +25760,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2029 +- uid: 2028 type: Poweredlight components: - parent: 15 @@ -25797,7 +25774,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2030 +- uid: 2029 type: Poweredlight components: - parent: 15 @@ -25810,7 +25787,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2031 +- uid: 2030 type: Poweredlight components: - parent: 15 @@ -25825,7 +25802,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2032 +- uid: 2031 type: Poweredlight components: - parent: 15 @@ -25840,7 +25817,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2033 +- uid: 2032 type: Poweredlight components: - parent: 15 @@ -25855,7 +25832,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2034 +- uid: 2033 type: Poweredlight components: - parent: 15 @@ -25870,7 +25847,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2035 +- uid: 2034 type: Poweredlight components: - parent: 15 @@ -25884,7 +25861,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2036 +- uid: 2035 type: PoweredSmallLight components: - parent: 15 @@ -25899,7 +25876,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2037 +- uid: 2036 type: PoweredSmallLight components: - parent: 15 @@ -25913,7 +25890,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2038 +- uid: 2037 type: PoweredSmallLight components: - parent: 15 @@ -25925,115 +25902,115 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2039 +- uid: 2038 type: Wire components: - parent: 15 pos: 9.5,20.5 type: Transform -- uid: 2040 +- uid: 2039 type: Wire components: - parent: 15 pos: 8.5,20.5 type: Transform -- uid: 2041 +- uid: 2040 type: Wire components: - parent: 15 pos: 8.5,19.5 type: Transform -- uid: 2042 +- uid: 2041 type: Wire components: - parent: 15 pos: 8.5,18.5 type: Transform -- uid: 2043 +- uid: 2042 type: solid_wall components: - parent: 15 pos: 7.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2044 +- uid: 2043 type: solid_wall components: - parent: 15 pos: 8.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2045 +- uid: 2044 type: Wire components: - parent: 15 pos: 9.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2046 +- uid: 2045 type: Wire components: - parent: 15 pos: 9.5,15.5 rot: -1.5707963267948966 rad type: Transform +- uid: 2046 + type: APC + components: + - parent: 15 + pos: 9.5,15.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 2047 - type: APC + type: Wire components: - parent: 15 - pos: 9.5,15.5 + pos: -2.5,19.5 rot: -1.5707963267948966 rad type: Transform - uid: 2048 type: Wire components: - parent: 15 - pos: -2.5,19.5 + pos: -2.5,18.5 rot: -1.5707963267948966 rad type: Transform - uid: 2049 type: Wire components: - parent: 15 - pos: -2.5,18.5 + pos: -2.5,17.5 rot: -1.5707963267948966 rad type: Transform - uid: 2050 - type: Wire - components: - - parent: 15 - pos: -2.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2051 type: Wire components: - parent: 15 pos: -0.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2052 +- uid: 2051 type: APC components: - parent: 15 pos: -2.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2053 +- uid: 2052 type: Wire components: - parent: 15 pos: 7.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2054 +- uid: 2053 type: Wire components: - parent: 15 pos: 7.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2055 +- uid: 2054 type: Poweredlight components: - parent: 15 @@ -26048,7 +26025,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2056 +- uid: 2055 type: Poweredlight components: - parent: 15 @@ -26063,7 +26040,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2057 +- uid: 2056 type: Poweredlight components: - parent: 15 @@ -26078,7 +26055,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2058 +- uid: 2057 type: Poweredlight components: - parent: 15 @@ -26093,7 +26070,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2059 +- uid: 2058 type: Poweredlight components: - parent: 15 @@ -26107,7 +26084,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2060 +- uid: 2059 type: Poweredlight components: - parent: 15 @@ -26122,7 +26099,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2061 +- uid: 2060 type: Poweredlight components: - parent: 15 @@ -26137,7 +26114,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2062 +- uid: 2061 type: Poweredlight components: - parent: 15 @@ -26152,7 +26129,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2063 +- uid: 2062 type: Poweredlight components: - parent: 15 @@ -26167,7 +26144,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2064 +- uid: 2063 type: Poweredlight components: - parent: 15 @@ -26179,7 +26156,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2065 +- uid: 2064 type: Poweredlight components: - parent: 15 @@ -26192,7 +26169,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2066 +- uid: 2065 type: Poweredlight components: - parent: 15 @@ -26206,7 +26183,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2067 +- uid: 2066 type: PoweredSmallLight components: - parent: 15 @@ -26221,14 +26198,14 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2068 +- uid: 2067 type: AirlockMaintCommonLocked components: - parent: 15 pos: 1.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2069 +- uid: 2068 type: PoweredSmallLight components: - parent: 15 @@ -26243,49 +26220,49 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2070 +- uid: 2069 type: Wire components: - parent: 15 pos: -9.5,20.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2071 +- uid: 2070 type: Wire components: - parent: 15 pos: -10.5,20.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2072 +- uid: 2071 type: Wire components: - parent: 15 pos: -10.5,21.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2073 +- uid: 2072 type: reinforced_wall components: - parent: 15 pos: -10.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2074 +- uid: 2073 type: reinforced_wall components: - parent: 15 pos: -10.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2075 +- uid: 2074 type: APC components: - parent: 15 pos: -10.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2076 +- uid: 2075 type: Poweredlight components: - parent: 15 @@ -26300,7 +26277,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2077 +- uid: 2076 type: Poweredlight components: - parent: 15 @@ -26312,22 +26289,18 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2078 +- uid: 2077 type: Poweredlight components: - parent: 15 - pos: -12.5,13 - rot: 1.5707963267948966 rad + pos: -6.0158176,18 + rot: -1.5707963267948966 rad type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - containers: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2079 +- uid: 2078 type: Poweredlight components: - parent: 15 @@ -26342,21 +26315,18 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2080 +- uid: 2079 type: Poweredlight components: - parent: 15 - pos: -10,12.5 + pos: -1.5,19 + rot: -1.5707963267948966 rad type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - containers: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2081 +- uid: 2080 type: Poweredlight components: - parent: 15 @@ -26368,7 +26338,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2082 +- uid: 2081 type: Poweredlight components: - parent: 15 @@ -26383,7 +26353,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2083 +- uid: 2082 type: PoweredSmallLight components: - parent: 15 @@ -26398,7 +26368,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2084 +- uid: 2083 type: PoweredSmallLight components: - parent: 15 @@ -26411,7 +26381,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2085 +- uid: 2084 type: Poweredlight components: - parent: 15 @@ -26426,7 +26396,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2086 +- uid: 2085 type: Poweredlight components: - parent: 15 @@ -26440,7 +26410,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2087 +- uid: 2086 type: Poweredlight components: - parent: 15 @@ -26454,21 +26424,14 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2088 - type: Poweredlight +- uid: 2087 + type: SignDirectionalSci components: - parent: 15 - pos: 2,1.5 + pos: 1.3437586,6.2515917 + rot: -1.5707963267948966 rad type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2089 +- uid: 2088 type: Poweredlight components: - parent: 15 @@ -26482,7 +26445,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2090 +- uid: 2089 type: Poweredlight components: - parent: 15 @@ -26496,7 +26459,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2091 +- uid: 2090 type: Poweredlight components: - parent: 15 @@ -26511,57 +26474,52 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2092 +- uid: 2091 type: Poweredlight components: - parent: 15 - pos: -4.5,2 - rot: -1.5707963267948966 rad + pos: 6.0308504,2 type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - containers: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2093 +- uid: 2092 type: Table components: - parent: 15 pos: 29.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2094 +- uid: 2093 type: Table components: - parent: 15 pos: 25.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2095 +- uid: 2094 type: VendingMachineEngivend components: - parent: 15 pos: 31.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2096 +- uid: 2095 type: Wire components: - parent: 15 pos: -6.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2097 +- uid: 2096 type: APC components: - parent: 15 pos: -6.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2098 +- uid: 2097 type: Poweredlight components: - parent: 15 @@ -26576,7 +26534,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2099 +- uid: 2098 type: Poweredlight components: - parent: 15 @@ -26591,7 +26549,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2100 +- uid: 2099 type: Poweredlight components: - parent: 15 @@ -26606,7 +26564,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2101 +- uid: 2100 type: Poweredlight components: - parent: 15 @@ -26619,22 +26577,15 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2102 - type: PoweredSmallLight +- uid: 2101 + type: Paper components: - parent: 15 - pos: -0.5,-6 - rot: 1.5707963267948966 rad + pos: 8.598616,26.075901 type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2103 + - anchored: False + type: Collidable +- uid: 2102 type: PoweredSmallLight components: - parent: 15 @@ -26649,7 +26600,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2104 +- uid: 2103 type: PoweredSmallLight components: - parent: 15 @@ -26664,7 +26615,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2105 +- uid: 2104 type: PoweredSmallLight components: - parent: 15 @@ -26679,7 +26630,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2106 +- uid: 2105 type: PoweredSmallLight components: - parent: 15 @@ -26694,7 +26645,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2107 +- uid: 2106 type: PoweredSmallLight components: - parent: 15 @@ -26709,35 +26660,35 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2108 +- uid: 2107 type: Wire components: - parent: 15 pos: -29.5,8.5 rot: 3.141592653589793 rad type: Transform -- uid: 2109 +- uid: 2108 type: Wire components: - parent: 15 pos: -30.5,8.5 rot: 3.141592653589793 rad type: Transform -- uid: 2110 +- uid: 2109 type: Wire components: - parent: 15 pos: -28.5,-2.5 rot: 3.141592653589793 rad type: Transform -- uid: 2111 +- uid: 2110 type: APC components: - parent: 15 pos: -28.5,-3.5 rot: 3.141592653589793 rad type: Transform -- uid: 2112 +- uid: 2111 type: Chair components: - parent: 15 @@ -26745,70 +26696,70 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2113 +- uid: 2112 type: APC components: - parent: 15 pos: -33.5,2.5 rot: 3.141592653589793 rad type: Transform -- uid: 2114 +- uid: 2113 type: solid_wall components: - parent: 15 pos: -33.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2115 +- uid: 2114 type: APC components: - parent: 15 pos: -12.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2116 +- uid: 2115 type: APC components: - parent: 15 pos: -1.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2117 +- uid: 2116 type: APC components: - parent: 15 pos: -7.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2118 +- uid: 2117 type: APC components: - parent: 15 pos: -12.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2119 +- uid: 2118 type: APC components: - parent: 15 pos: 0.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2120 +- uid: 2119 type: Table components: - parent: 15 pos: -29.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2121 +- uid: 2120 type: Table components: - parent: 15 pos: -29.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2122 +- uid: 2121 type: Poweredlight components: - parent: 15 @@ -26821,7 +26772,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2123 +- uid: 2122 type: Poweredlight components: - parent: 15 @@ -26836,35 +26787,35 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2124 +- uid: 2123 type: Table components: - parent: 15 pos: 18.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2125 +- uid: 2124 type: Table components: - parent: 15 pos: 15.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2126 +- uid: 2125 type: VendingMachineSnack components: - parent: 15 pos: -22.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2127 +- uid: 2126 type: VendingMachineCola components: - parent: 15 pos: -34.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2128 +- uid: 2127 type: Poweredlight components: - parent: 15 @@ -26879,7 +26830,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2129 +- uid: 2128 type: LockerToolFilled components: - parent: 15 @@ -26894,7 +26845,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2130 +- uid: 2129 type: PoweredSmallLight components: - parent: 15 @@ -26908,7 +26859,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2131 +- uid: 2130 type: PoweredSmallLight components: - parent: 15 @@ -26922,7 +26873,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2132 +- uid: 2131 type: PoweredSmallLight components: - parent: 15 @@ -26937,6 +26888,13 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer +- uid: 2132 + type: Table + components: + - parent: 15 + pos: 10.5,7.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 2133 type: Table components: @@ -26945,13 +26903,6 @@ entities: rot: -1.5707963267948966 rad type: Transform - uid: 2134 - type: Table - components: - - parent: 15 - pos: 10.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2135 type: PoweredSmallLight components: - parent: 15 @@ -26965,7 +26916,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2136 +- uid: 2135 type: Poweredlight components: - parent: 15 @@ -26979,7 +26930,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2137 +- uid: 2136 type: Welder components: - parent: 15 @@ -26988,7 +26939,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2138 +- uid: 2137 type: LockerWeldingSupplies components: - parent: 15 @@ -27003,7 +26954,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2139 +- uid: 2138 type: Poweredlight components: - parent: 15 @@ -27018,7 +26969,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2140 +- uid: 2139 type: Poweredlight components: - parent: 15 @@ -27033,7 +26984,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2141 +- uid: 2140 type: Poweredlight components: - parent: 15 @@ -27048,7 +26999,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2142 +- uid: 2141 type: Poweredlight components: - parent: 15 @@ -27063,7 +27014,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2143 +- uid: 2142 type: Poweredlight components: - parent: 15 @@ -27077,7 +27028,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2144 +- uid: 2143 type: Poweredlight components: - parent: 15 @@ -27092,7 +27043,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2145 +- uid: 2144 type: Poweredlight components: - parent: 15 @@ -27106,7 +27057,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2146 +- uid: 2145 type: Poweredlight components: - parent: 15 @@ -27119,7 +27070,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2147 +- uid: 2146 type: PoweredSmallLight components: - parent: 15 @@ -27134,7 +27085,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2148 +- uid: 2147 type: PoweredSmallLight components: - parent: 15 @@ -27149,7 +27100,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2149 +- uid: 2148 type: Food4NoRaisins components: - parent: 15 @@ -27160,7 +27111,7 @@ entities: type: Solution - anchored: False type: Collidable -- uid: 2150 +- uid: 2149 type: Pen components: - parent: 15 @@ -27169,7 +27120,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2151 +- uid: 2150 type: PoweredSmallLight components: - parent: 15 @@ -27183,7 +27134,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2152 +- uid: 2151 type: PoweredSmallLight components: - parent: 15 @@ -27198,21 +27149,21 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2153 +- uid: 2152 type: Table components: - parent: 15 pos: 7.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2154 +- uid: 2153 type: Table components: - parent: 15 pos: 8.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2155 +- uid: 2154 type: PoweredSmallLight components: - parent: 15 @@ -27227,7 +27178,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2156 +- uid: 2155 type: Poweredlight components: - parent: 15 @@ -27242,21 +27193,14 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2157 - type: Poweredlight +- uid: 2156 + type: SignShipDock components: - parent: 15 - pos: -26,6.5 + pos: -33.298416,6.5 + rot: -1.5707963267948966 rad type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2158 +- uid: 2157 type: Poweredlight components: - parent: 15 @@ -27271,7 +27215,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2159 +- uid: 2158 type: Poweredlight components: - parent: 15 @@ -27286,7 +27230,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2160 +- uid: 2159 type: Poweredlight components: - parent: 15 @@ -27301,70 +27245,70 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2161 +- uid: 2160 type: solid_wall components: - parent: 15 pos: -38.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2162 +- uid: 2161 type: solid_wall components: - parent: 15 pos: -34.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2163 +- uid: 2162 type: SpawnPointStationEngineer components: - parent: 15 pos: 33.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2164 +- uid: 2163 type: SpawnPointSecurityOfficer components: - parent: 15 pos: -7.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2165 +- uid: 2164 type: Table components: - parent: 15 pos: 8.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2166 +- uid: 2165 type: Table components: - parent: 15 pos: 8.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2167 +- uid: 2166 type: Table components: - parent: 15 pos: 8.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2168 +- uid: 2167 type: Table components: - parent: 15 pos: 7.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2169 +- uid: 2168 type: Table components: - parent: 15 pos: 6.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2170 +- uid: 2169 type: ChairOfficeLight components: - parent: 15 @@ -27373,14 +27317,14 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2171 +- uid: 2170 type: ComputerMedicalRecords components: - parent: 15 pos: 6.5,-5.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2172 +- uid: 2171 type: chem_dispenser components: - parent: 15 @@ -27391,28 +27335,28 @@ entities: ReagentDispenser-reagentContainerContainer: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2173 +- uid: 2172 type: Table components: - parent: 15 pos: 14.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2174 +- uid: 2173 type: Table components: - parent: 15 pos: 18.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2175 +- uid: 2174 type: Table components: - parent: 15 pos: 18.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2176 +- uid: 2175 type: chem_master components: - parent: 15 @@ -27423,28 +27367,28 @@ entities: ChemMaster-reagentContainerContainer: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2177 +- uid: 2176 type: Table components: - parent: 15 pos: 14.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2178 +- uid: 2177 type: Table components: - parent: 15 pos: 15.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2179 +- uid: 2178 type: Table components: - parent: 15 pos: 15.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2180 +- uid: 2179 type: LockerHeadOfSecurityFilled components: - parent: 15 @@ -27459,7 +27403,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2181 +- uid: 2180 type: LockerChemistry components: - parent: 15 @@ -27474,14 +27418,14 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2182 +- uid: 2181 type: Table components: - parent: 15 pos: 13.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2183 +- uid: 2182 type: WarpPoint components: - parent: 15 @@ -27490,7 +27434,7 @@ entities: type: Transform - location: eva type: WarpPoint -- uid: 2184 +- uid: 2183 type: WarpPoint components: - parent: 15 @@ -27499,7 +27443,7 @@ entities: type: Transform - location: cap type: WarpPoint -- uid: 2185 +- uid: 2184 type: WarpPoint components: - parent: 15 @@ -27508,7 +27452,7 @@ entities: type: Transform - location: chem type: WarpPoint -- uid: 2186 +- uid: 2185 type: WarpPoint components: - parent: 15 @@ -27517,7 +27461,7 @@ entities: type: Transform - location: hop type: WarpPoint -- uid: 2187 +- uid: 2186 type: WarpPoint components: - parent: 15 @@ -27526,7 +27470,7 @@ entities: type: Transform - location: grav type: WarpPoint -- uid: 2188 +- uid: 2187 type: LockerMedical components: - parent: 15 @@ -27541,7 +27485,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2189 +- uid: 2188 type: LockerMedical components: - parent: 15 @@ -27556,42 +27500,42 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2190 +- uid: 2189 type: VendingMachineMedical components: - parent: 15 pos: 19.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2191 +- uid: 2190 type: VendingMachineMedical components: - parent: 15 pos: 6.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2192 +- uid: 2191 type: Table components: - parent: 15 pos: 21.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2193 +- uid: 2192 type: Table components: - parent: 15 pos: 22.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2194 +- uid: 2193 type: Table components: - parent: 15 pos: 23.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2195 +- uid: 2194 type: CrateMedical components: - parent: 15 @@ -27606,49 +27550,49 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2196 +- uid: 2195 type: Table components: - parent: 15 pos: 6.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2197 +- uid: 2196 type: Table components: - parent: 15 pos: 6.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2198 +- uid: 2197 type: Table components: - parent: 15 pos: 6.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2199 +- uid: 2198 type: Table components: - parent: 15 pos: 6.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2200 +- uid: 2199 type: Table components: - parent: 15 pos: 10.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2201 +- uid: 2200 type: Table components: - parent: 15 pos: 9.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2202 +- uid: 2201 type: Beaker components: - parent: 15 @@ -27657,7 +27601,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2203 +- uid: 2202 type: MedicalScanner components: - parent: 15 @@ -27668,7 +27612,7 @@ entities: MedicalScanner-bodyContainer: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2204 +- uid: 2203 type: MedicalScanner components: - parent: 15 @@ -27679,49 +27623,49 @@ entities: MedicalScanner-bodyContainer: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2205 +- uid: 2204 type: LowWall components: - parent: 15 pos: 15.5,-12.5 rot: -1.5707963267948966 rad type: Transform +- uid: 2205 + type: LowWall + components: + - parent: 15 + pos: 16.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 2206 - type: LowWall - components: - - parent: 15 - pos: 16.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2207 type: LowWall components: - parent: 15 pos: 17.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2208 +- uid: 2207 type: Window components: - parent: 15 pos: 15.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2209 +- uid: 2208 type: Window components: - parent: 15 pos: 16.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2210 +- uid: 2209 type: Window components: - parent: 15 pos: 17.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2211 +- uid: 2210 type: Poweredlight components: - parent: 15 @@ -27736,7 +27680,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2212 +- uid: 2211 type: Poweredlight components: - parent: 15 @@ -27750,7 +27694,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2213 +- uid: 2212 type: Poweredlight components: - parent: 15 @@ -27765,7 +27709,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2214 +- uid: 2213 type: Poweredlight components: - parent: 15 @@ -27780,7 +27724,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2215 +- uid: 2214 type: Medkit components: - parent: 15 @@ -27793,7 +27737,7 @@ entities: storagebase: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2216 +- uid: 2215 type: Medkit components: - parent: 15 @@ -27806,7 +27750,7 @@ entities: storagebase: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2217 +- uid: 2216 type: Medkit components: - parent: 15 @@ -27819,7 +27763,7 @@ entities: storagebase: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2218 +- uid: 2217 type: Medkit components: - parent: 15 @@ -27832,7 +27776,7 @@ entities: storagebase: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2219 +- uid: 2218 type: DisposalUnit components: - parent: 15 @@ -27844,7 +27788,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2220 +- uid: 2219 type: DisposalTrunk components: - parent: 15 @@ -27857,7 +27801,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2221 +- uid: 2220 type: LargeBeaker components: - parent: 15 @@ -27866,7 +27810,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2222 +- uid: 2221 type: Beaker components: - parent: 15 @@ -27875,35 +27819,35 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2223 +- uid: 2222 type: ComputerMedicalRecords components: - parent: 15 pos: 24.5,-15.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2224 +- uid: 2223 type: Table components: - parent: 15 pos: 23.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2225 +- uid: 2224 type: Table components: - parent: 15 pos: 23.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2226 +- uid: 2225 type: Table components: - parent: 15 pos: 23.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2227 +- uid: 2226 type: ChairOfficeLight components: - parent: 15 @@ -27912,7 +27856,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2228 +- uid: 2227 type: Poweredlight components: - parent: 15 @@ -27927,7 +27871,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2229 +- uid: 2228 type: WarpPoint components: - parent: 15 @@ -27936,7 +27880,7 @@ entities: type: Transform - location: dorms type: WarpPoint -- uid: 2230 +- uid: 2229 type: WarpPoint components: - parent: 15 @@ -27945,147 +27889,147 @@ entities: type: Transform - location: escape type: WarpPoint -- uid: 2231 +- uid: 2230 type: SpawnPointChef components: - parent: 15 pos: -12.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2232 +- uid: 2231 type: SpawnPointLatejoin components: - parent: 15 pos: -36.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2233 +- uid: 2232 type: SpawnPointAssistant components: - parent: 15 pos: -29.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2234 +- uid: 2233 type: SpawnPointAssistant components: - parent: 15 pos: -23.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2235 +- uid: 2234 type: Table components: - parent: 15 pos: -4.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2236 +- uid: 2235 type: Table components: - parent: 15 pos: -4.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2237 +- uid: 2236 type: LowWall components: - parent: 15 pos: -10.5,-29.5 rot: -1.5707963267948966 rad type: Transform +- uid: 2237 + type: LowWall + components: + - parent: 15 + pos: -10.5,-30.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 2238 type: LowWall components: - parent: 15 - pos: -10.5,-30.5 + pos: -9.5,-30.5 rot: -1.5707963267948966 rad type: Transform - uid: 2239 type: LowWall components: - parent: 15 - pos: -9.5,-30.5 + pos: -6.5,-29.5 rot: -1.5707963267948966 rad type: Transform - uid: 2240 type: LowWall components: - parent: 15 - pos: -6.5,-29.5 + pos: -7.5,-30.5 rot: -1.5707963267948966 rad type: Transform - uid: 2241 type: LowWall components: - parent: 15 - pos: -7.5,-30.5 + pos: -6.5,-30.5 rot: -1.5707963267948966 rad type: Transform - uid: 2242 - type: LowWall - components: - - parent: 15 - pos: -6.5,-30.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2243 type: LowWall components: - parent: 15 pos: -8.5,-30.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2244 +- uid: 2243 type: ReinforcedWindow components: - parent: 15 pos: -10.5,-29.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2245 +- uid: 2244 type: ReinforcedWindow components: - parent: 15 pos: -10.5,-30.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2246 +- uid: 2245 type: ReinforcedWindow components: - parent: 15 pos: -9.5,-30.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2247 +- uid: 2246 type: ReinforcedWindow components: - parent: 15 pos: -8.5,-30.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2248 +- uid: 2247 type: ReinforcedWindow components: - parent: 15 pos: -7.5,-30.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2249 +- uid: 2248 type: ReinforcedWindow components: - parent: 15 pos: -6.5,-30.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2250 +- uid: 2249 type: ReinforcedWindow components: - parent: 15 pos: -6.5,-29.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2251 +- uid: 2250 type: Poweredlight components: - parent: 15 @@ -28100,7 +28044,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2252 +- uid: 2251 type: Poweredlight components: - parent: 15 @@ -28114,7 +28058,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2253 +- uid: 2252 type: Poweredlight components: - parent: 15 @@ -28129,7 +28073,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2254 +- uid: 2253 type: Poweredlight components: - parent: 15 @@ -28144,7 +28088,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2255 +- uid: 2254 type: Poweredlight components: - parent: 15 @@ -28159,7 +28103,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2256 +- uid: 2255 type: Poweredlight components: - parent: 15 @@ -28174,7 +28118,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2257 +- uid: 2256 type: Poweredlight components: - parent: 15 @@ -28189,7 +28133,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2258 +- uid: 2257 type: PoweredSmallLight components: - parent: 15 @@ -28203,7 +28147,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2259 +- uid: 2258 type: ResearchAndDevelopmentServer components: - parent: 15 @@ -28211,7 +28155,7 @@ entities: type: Transform - points: 136000 type: ResearchServer -- uid: 2260 +- uid: 2259 type: Poweredlight components: - parent: 15 @@ -28223,7 +28167,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2261 +- uid: 2260 type: Poweredlight components: - parent: 15 @@ -28237,7 +28181,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2262 +- uid: 2261 type: Poweredlight components: - parent: 15 @@ -28252,7 +28196,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2263 +- uid: 2262 type: Poweredlight components: - parent: 15 @@ -28267,42 +28211,34 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2264 - type: Poweredlight +- uid: 2263 + type: SignScience components: - parent: 15 - pos: -15.5,-17 + pos: -8.494434,-16.5 rot: -1.5707963267948966 rad type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2265 +- uid: 2264 type: Wire components: - parent: 15 pos: -17.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2266 +- uid: 2265 type: APC components: - parent: 15 pos: -18.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2267 +- uid: 2266 type: ComputerResearchAndDevelopment components: - parent: 15 pos: -5.5,-15.5 type: Transform -- uid: 2268 +- uid: 2267 type: PoweredSmallLight components: - parent: 15 @@ -28317,49 +28253,49 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2269 +- uid: 2268 type: Table components: - parent: 15 pos: -0.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2270 +- uid: 2269 type: Table components: - parent: 15 pos: -1.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2271 +- uid: 2270 type: Table components: - parent: 15 pos: -2.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2272 +- uid: 2271 type: Table components: - parent: 15 pos: 0.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2273 +- uid: 2272 type: Table components: - parent: 15 pos: 0.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2274 +- uid: 2273 type: BaseResearchAndDevelopmentPointSource components: - parent: 15 pos: -5.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2275 +- uid: 2274 type: ChairOfficeLight components: - parent: 15 @@ -28367,7 +28303,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2276 +- uid: 2275 type: ChairOfficeLight components: - parent: 15 @@ -28375,19 +28311,19 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2277 +- uid: 2276 type: VendingMachineCoffee components: - parent: 15 pos: -7.5,-17.5 type: Transform -- uid: 2278 +- uid: 2277 type: Table components: - parent: 15 pos: -8.5,-17.5 type: Transform -- uid: 2279 +- uid: 2278 type: ChairOfficeLight components: - parent: 15 @@ -28395,7 +28331,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2280 +- uid: 2279 type: ChairOfficeLight components: - parent: 15 @@ -28404,7 +28340,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2281 +- uid: 2280 type: Autolathe components: - parent: 15 @@ -28424,7 +28360,7 @@ entities: - Crowbar - Multitool type: LatheDatabase -- uid: 2282 +- uid: 2281 type: Protolathe components: - parent: 15 @@ -28444,56 +28380,56 @@ entities: - Crowbar - Multitool type: ProtolatheDatabase -- uid: 2283 +- uid: 2282 type: Table components: - parent: 15 pos: -2.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2284 +- uid: 2283 type: Table components: - parent: 15 pos: -1.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2285 +- uid: 2284 type: Table components: - parent: 15 pos: -0.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2286 +- uid: 2285 type: SpawnPointStationEngineer components: - parent: 15 pos: 41.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2287 +- uid: 2286 type: SpawnPointStationEngineer components: - parent: 15 pos: 33.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2288 +- uid: 2287 type: SpawnPointSecurityOfficer components: - parent: 15 pos: -2.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2289 +- uid: 2288 type: SpawnPointSecurityOfficer components: - parent: 15 pos: -13.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2290 +- uid: 2289 type: Poweredlight components: - parent: 15 @@ -28508,91 +28444,91 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2291 +- uid: 2290 type: Table components: - parent: 15 pos: -2.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2292 +- uid: 2291 type: Table components: - parent: 15 pos: -7.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2293 +- uid: 2292 type: Table components: - parent: 15 pos: -6.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2294 +- uid: 2293 type: Table components: - parent: 15 pos: -5.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2295 +- uid: 2294 type: Table components: - parent: 15 pos: -4.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2296 +- uid: 2295 type: Table components: - parent: 15 pos: -3.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2297 +- uid: 2296 type: Table components: - parent: 15 pos: -2.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2298 +- uid: 2297 type: Table components: - parent: 15 pos: 39.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2299 +- uid: 2298 type: SpawnPointAssistant components: - parent: 15 pos: -27.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2300 +- uid: 2299 type: SpawnPointSecurityOfficer components: - parent: 15 pos: -12.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2301 +- uid: 2300 type: SpawnPointAssistant components: - parent: 15 pos: -27.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2302 +- uid: 2301 type: SpawnPointStationEngineer components: - parent: 15 pos: 33.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2303 +- uid: 2302 type: StoolBar components: - parent: 15 @@ -28601,7 +28537,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2304 +- uid: 2303 type: StoolBar components: - parent: 15 @@ -28610,7 +28546,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2305 +- uid: 2304 type: StoolBar components: - parent: 15 @@ -28619,7 +28555,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2306 +- uid: 2305 type: StoolBar components: - parent: 15 @@ -28628,7 +28564,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2307 +- uid: 2306 type: StoolBar components: - parent: 15 @@ -28637,7 +28573,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2308 +- uid: 2307 type: StoolBar components: - parent: 15 @@ -28646,7 +28582,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2309 +- uid: 2308 type: Fork components: - parent: 15 @@ -28654,41 +28590,41 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2310 +- uid: 2309 type: Arcade components: - parent: 15 pos: -1.5,-4.5 type: Transform -- uid: 2311 +- uid: 2310 type: TableWood components: - parent: 15 pos: -7.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2312 +- uid: 2311 type: TableWood components: - parent: 15 pos: -6.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2313 +- uid: 2312 type: TableWood components: - parent: 15 pos: -0.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2314 +- uid: 2313 type: TableWood components: - parent: 15 pos: -3.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2315 +- uid: 2314 type: ChairWood components: - parent: 15 @@ -28697,7 +28633,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2316 +- uid: 2315 type: ChairWood components: - parent: 15 @@ -28706,7 +28642,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2317 +- uid: 2316 type: ChairWood components: - parent: 15 @@ -28715,7 +28651,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2318 +- uid: 2317 type: ChairWood components: - parent: 15 @@ -28724,7 +28660,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2319 +- uid: 2318 type: ChairWood components: - parent: 15 @@ -28733,7 +28669,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2320 +- uid: 2319 type: ChairWood components: - parent: 15 @@ -28742,7 +28678,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2321 +- uid: 2320 type: ChairWood components: - parent: 15 @@ -28751,7 +28687,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2322 +- uid: 2321 type: ChairWood components: - parent: 15 @@ -28760,14 +28696,14 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2323 +- uid: 2322 type: BarSign components: - parent: 15 pos: 1,2.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2324 +- uid: 2323 type: Spoon components: - parent: 15 @@ -28775,19 +28711,19 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2325 +- uid: 2324 type: VendingMachineCigs components: - parent: 15 pos: 0.5,-4.5 type: Transform -- uid: 2326 +- uid: 2325 type: VendingMachineSnack components: - parent: 15 pos: -0.5,-4.5 type: Transform -- uid: 2327 +- uid: 2326 type: Chair components: - parent: 15 @@ -28795,7 +28731,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2328 +- uid: 2327 type: Stool components: - parent: 15 @@ -28803,21 +28739,21 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2329 +- uid: 2328 type: Table components: - parent: 15 pos: -15.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2330 +- uid: 2329 type: ComputerComms components: - parent: 15 pos: 3.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2331 +- uid: 2330 type: WarpPoint components: - parent: 15 @@ -28826,7 +28762,7 @@ entities: type: Transform - location: bar type: WarpPoint -- uid: 2332 +- uid: 2331 type: WarpPoint components: - parent: 15 @@ -28835,7 +28771,7 @@ entities: type: Transform - location: sci type: WarpPoint -- uid: 2333 +- uid: 2332 type: WarpPoint components: - parent: 15 @@ -28844,7 +28780,7 @@ entities: type: Transform - location: med type: WarpPoint -- uid: 2334 +- uid: 2333 type: WarpPoint components: - parent: 15 @@ -28853,7 +28789,7 @@ entities: type: Transform - location: cargo type: WarpPoint -- uid: 2335 +- uid: 2334 type: WarpPoint components: - parent: 15 @@ -28862,42 +28798,42 @@ entities: type: Transform - location: eng type: WarpPoint -- uid: 2336 +- uid: 2335 type: VendingMachineCola components: - parent: 15 pos: 1.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2337 +- uid: 2336 type: VendingMachineCoffee components: - parent: 15 pos: 0.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2338 +- uid: 2337 type: VendingMachineCigs components: - parent: 15 pos: 6.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2339 +- uid: 2338 type: TableWood components: - parent: 15 pos: 8.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2340 +- uid: 2339 type: TableWood components: - parent: 15 pos: 8.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2341 +- uid: 2340 type: ChairOfficeDark components: - parent: 15 @@ -28906,14 +28842,14 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2342 +- uid: 2341 type: ComputerComms components: - parent: 15 pos: 9.5,23.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2343 +- uid: 2342 type: ChairOfficeDark components: - parent: 15 @@ -28922,7 +28858,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2344 +- uid: 2343 type: ChairWood components: - parent: 15 @@ -28930,7 +28866,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2345 +- uid: 2344 type: WarpPoint components: - parent: 15 @@ -28939,7 +28875,7 @@ entities: type: Transform - location: sec type: WarpPoint -- uid: 2346 +- uid: 2345 type: WarpPoint components: - parent: 15 @@ -28948,13 +28884,13 @@ entities: type: Transform - location: bridge type: WarpPoint -- uid: 2347 +- uid: 2346 type: Table components: - parent: 15 pos: 6.5,20.5 type: Transform -- uid: 2348 +- uid: 2347 type: ComputerId components: - parent: 15 @@ -28967,7 +28903,7 @@ entities: IdCardConsole-targetId: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2349 +- uid: 2348 type: ComputerId components: - parent: 15 @@ -28980,21 +28916,21 @@ entities: IdCardConsole-targetId: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2350 +- uid: 2349 type: ComputerAlert components: - parent: 15 pos: 6.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2351 +- uid: 2350 type: ComputerPowerMonitoring components: - parent: 15 pos: 7.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2352 +- uid: 2351 type: Paper components: - parent: 15 @@ -29002,7 +28938,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2353 +- uid: 2352 type: Pen components: - parent: 15 @@ -29010,21 +28946,21 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2354 +- uid: 2353 type: TableWood components: - parent: 15 pos: -1.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2355 +- uid: 2354 type: TableWood components: - parent: 15 pos: -1.5,24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2356 +- uid: 2355 type: ChairOfficeDark components: - parent: 15 @@ -29033,7 +28969,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2357 +- uid: 2356 type: ChairOfficeDark components: - parent: 15 @@ -29042,7 +28978,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2358 +- uid: 2357 type: ChairOfficeDark components: - parent: 15 @@ -29050,7 +28986,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2359 +- uid: 2358 type: ChairOfficeDark components: - parent: 15 @@ -29058,7 +28994,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2360 +- uid: 2359 type: ChairOfficeDark components: - parent: 15 @@ -29067,14 +29003,14 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2361 +- uid: 2360 type: ComputerMedicalRecords components: - parent: 15 pos: 0.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2362 +- uid: 2361 type: ChairOfficeDark components: - parent: 15 @@ -29083,7 +29019,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2363 +- uid: 2362 type: ComputerSupplyRequest components: - parent: 15 @@ -29103,28 +29039,28 @@ entities: - cargo.glass - cargo.cable type: GalacticMarket -- uid: 2364 +- uid: 2363 type: Table components: - parent: 15 pos: 9.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2365 +- uid: 2364 type: Table components: - parent: 15 pos: 9.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2366 +- uid: 2365 type: Table components: - parent: 15 pos: 9.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2367 +- uid: 2366 type: Chair components: - parent: 15 @@ -29132,7 +29068,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2368 +- uid: 2367 type: ChairOfficeDark components: - parent: 15 @@ -29141,7 +29077,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2369 +- uid: 2368 type: Paper components: - parent: 15 @@ -29150,665 +29086,669 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2370 +- uid: 2369 type: solid_wall components: - parent: 15 pos: -34.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2371 +- uid: 2370 type: solid_wall components: - parent: 15 pos: -34.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2372 +- uid: 2371 type: solid_wall components: - parent: 15 pos: -34.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2373 +- uid: 2372 type: solid_wall components: - parent: 15 pos: -34.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2374 +- uid: 2373 type: solid_wall components: - parent: 15 pos: -33.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2375 +- uid: 2374 type: solid_wall components: - parent: 15 pos: -32.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2376 +- uid: 2375 type: solid_wall components: - parent: 15 pos: -31.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2377 +- uid: 2376 type: solid_wall components: - parent: 15 pos: -30.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2378 +- uid: 2377 type: solid_wall components: - parent: 15 pos: -29.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2379 +- uid: 2378 type: solid_wall components: - parent: 15 pos: -28.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2380 +- uid: 2379 type: solid_wall components: - parent: 15 pos: -27.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2381 +- uid: 2380 type: solid_wall components: - parent: 15 pos: -26.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2382 - type: solid_wall +- uid: 2381 + type: Brutepack components: - parent: 15 - pos: -25.5,-12.5 + pos: 6.97988,-3.2306285 rot: -1.5707963267948966 rad type: Transform + - anchored: False + type: Collidable +- uid: 2382 + type: SignDirectionalBridge + components: + - parent: 15 + pos: 5.641159,-12.7475605 + rot: 1.5707963267948966 rad + type: Transform - uid: 2383 type: solid_wall components: - parent: 15 - pos: -20.5,-16.5 - rot: -1.5707963267948966 rad + pos: 33.5,11.5 + rot: 1.5707963267948966 rad type: Transform - uid: 2384 type: solid_wall components: - parent: 15 - pos: -21.5,-16.5 + pos: -0.5,-6.5 rot: -1.5707963267948966 rad type: Transform - uid: 2385 - type: solid_wall - components: - - parent: 15 - pos: -25.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2386 type: solid_wall components: - parent: 15 pos: -16.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2387 - type: solid_wall +- uid: 2386 + type: SignSmoking components: - parent: 15 - pos: -22.5,-16.5 + pos: 23.462582,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2387 + type: SignBar + components: + - parent: 15 + pos: -4.6859417,2.5 rot: -1.5707963267948966 rad type: Transform - uid: 2388 - type: solid_wall - components: - - parent: 15 - pos: -24.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2389 type: TrashSpawner components: - parent: 15 pos: 7.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2390 - type: solid_wall +- uid: 2389 + type: Brutepack components: - parent: 15 - pos: -19.5,-16.5 + pos: 7.370505,-3.4650035 rot: -1.5707963267948966 rad type: Transform -- uid: 2391 + - anchored: False + type: Collidable +- uid: 2390 type: solid_wall components: - parent: 15 pos: -20.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2392 +- uid: 2391 type: solid_wall components: - parent: 15 pos: -20.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2393 +- uid: 2392 type: solid_wall components: - parent: 15 pos: -19.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2394 +- uid: 2393 type: solid_wall components: - parent: 15 pos: -18.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2395 +- uid: 2394 type: solid_wall components: - parent: 15 pos: -17.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2396 +- uid: 2395 type: solid_wall components: - parent: 15 pos: -20.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2397 +- uid: 2396 type: solid_wall components: - parent: 15 pos: -15.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2398 +- uid: 2397 type: solid_wall components: - parent: 15 pos: -14.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2399 +- uid: 2398 type: solid_wall components: - parent: 15 pos: -13.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2400 +- uid: 2399 type: solid_wall components: - parent: 15 pos: -12.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2401 +- uid: 2400 type: solid_wall components: - parent: 15 pos: -15.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2402 +- uid: 2401 type: solid_wall components: - parent: 15 pos: -15.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2403 +- uid: 2402 type: solid_wall components: - parent: 15 pos: -15.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2404 +- uid: 2403 type: solid_wall components: - parent: 15 pos: -15.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2405 +- uid: 2404 type: solid_wall components: - parent: 15 pos: -15.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2406 +- uid: 2405 type: solid_wall components: - parent: 15 pos: -10.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2407 +- uid: 2406 type: solid_wall components: - parent: 15 pos: -11.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2408 +- uid: 2407 type: solid_wall components: - parent: 15 pos: -13.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2409 +- uid: 2408 type: solid_wall components: - parent: 15 pos: -14.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2410 +- uid: 2409 type: solid_wall components: - parent: 15 pos: -10.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2411 +- uid: 2410 type: solid_wall components: - parent: 15 pos: -10.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2412 +- uid: 2411 type: solid_wall components: - parent: 15 pos: -11.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2413 +- uid: 2412 type: solid_wall components: - parent: 15 pos: -12.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2414 +- uid: 2413 type: solid_wall components: - parent: 15 pos: -13.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2415 +- uid: 2414 type: solid_wall components: - parent: 15 pos: -14.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2416 +- uid: 2415 type: Catwalk components: - parent: 15 pos: -23.5,-10.5 rot: -1.5707963267948966 rad type: Transform +- uid: 2416 + type: Catwalk + components: + - parent: 15 + pos: -17.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 2417 - type: Catwalk - components: - - parent: 15 - pos: -17.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2418 type: Catwalk components: - parent: 15 pos: -9.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2419 +- uid: 2418 type: Wire components: - parent: 15 pos: -33.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2420 +- uid: 2419 type: Wire components: - parent: 15 pos: -33.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2421 +- uid: 2420 type: Wire components: - parent: 15 pos: -33.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2422 +- uid: 2421 type: Wire components: - parent: 15 pos: -33.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2423 +- uid: 2422 type: Wire components: - parent: 15 pos: -33.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2424 +- uid: 2423 type: Wire components: - parent: 15 pos: -32.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2425 +- uid: 2424 type: Wire components: - parent: 15 pos: -31.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2426 +- uid: 2425 type: Wire components: - parent: 15 pos: -30.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2427 +- uid: 2426 type: Wire components: - parent: 15 pos: -29.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2428 +- uid: 2427 type: Wire components: - parent: 15 pos: -28.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2429 +- uid: 2428 type: Wire components: - parent: 15 pos: -27.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2430 +- uid: 2429 type: Wire components: - parent: 15 pos: -26.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2431 +- uid: 2430 type: Wire components: - parent: 15 pos: -25.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2432 +- uid: 2431 type: Wire components: - parent: 15 pos: -24.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2433 +- uid: 2432 type: Wire components: - parent: 15 pos: -23.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2434 +- uid: 2433 type: Wire components: - parent: 15 pos: -18.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2435 +- uid: 2434 type: Wire components: - parent: 15 pos: -21.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2436 +- uid: 2435 type: Wire components: - parent: 15 pos: -22.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2437 +- uid: 2436 type: Wire components: - parent: 15 pos: -19.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2438 +- uid: 2437 type: Wire components: - parent: 15 pos: -20.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2439 +- uid: 2438 type: Wire components: - parent: 15 pos: -18.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2440 +- uid: 2439 type: Wire components: - parent: 15 pos: -18.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2441 +- uid: 2440 type: Wire components: - parent: 15 pos: -18.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2442 +- uid: 2441 type: Wire components: - parent: 15 pos: -9.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2443 +- uid: 2442 type: Wire components: - parent: 15 pos: -17.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2444 +- uid: 2443 type: Wire components: - parent: 15 pos: -15.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2445 +- uid: 2444 type: Wire components: - parent: 15 pos: -14.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2446 +- uid: 2445 type: Wire components: - parent: 15 pos: -13.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2447 +- uid: 2446 type: Wire components: - parent: 15 pos: -12.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2448 +- uid: 2447 type: Wire components: - parent: 15 pos: -11.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2449 +- uid: 2448 type: Wire components: - parent: 15 pos: -10.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2450 +- uid: 2449 type: Wire components: - parent: 15 pos: -23.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2451 +- uid: 2450 type: Wire components: - parent: 15 pos: -23.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2452 +- uid: 2451 type: Wire components: - parent: 15 pos: -23.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2453 +- uid: 2452 type: Wire components: - parent: 15 pos: -21.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2454 +- uid: 2453 type: Wire components: - parent: 15 pos: -20.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2455 +- uid: 2454 type: SpawnPointLatejoin components: - parent: 15 pos: -36.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2456 +- uid: 2455 type: Table components: - parent: 15 pos: -10.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2457 +- uid: 2456 type: Table components: - parent: 15 pos: -10.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2458 +- uid: 2457 type: Table components: - parent: 15 pos: -10.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2459 +- uid: 2458 type: Wire components: - parent: 15 pos: -9.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2460 +- uid: 2459 type: Wire components: - parent: 15 pos: -10.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2461 +- uid: 2460 type: Wire components: - parent: 15 pos: -11.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2462 +- uid: 2461 type: SpawnPointSecurityOfficer components: - parent: 15 pos: -11.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2463 +- uid: 2462 type: VendingMachineTheater components: - parent: 15 pos: -17.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2464 +- uid: 2463 type: PianoInstrument components: - parent: 15 @@ -29817,7 +29757,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2465 +- uid: 2464 type: Stool components: - parent: 15 @@ -29826,21 +29766,21 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2466 +- uid: 2465 type: Table components: - parent: 15 pos: -14.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2467 +- uid: 2466 type: Table components: - parent: 15 pos: -14.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2468 +- uid: 2467 type: KitchenMicrowave components: - parent: 15 @@ -29851,19 +29791,19 @@ entities: microwave_entity_container: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2469 +- uid: 2468 type: Wire components: - parent: 15 pos: -11.5,-0.5 type: Transform -- uid: 2470 +- uid: 2469 type: Wire components: - parent: 15 pos: -11.5,1.5 type: Transform -- uid: 2471 +- uid: 2470 type: Poweredlight components: - parent: 15 @@ -29878,7 +29818,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2472 +- uid: 2471 type: Poweredlight components: - parent: 15 @@ -29893,7 +29833,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2473 +- uid: 2472 type: PoweredSmallLight components: - parent: 15 @@ -29908,351 +29848,343 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2474 - type: Poweredlight +- uid: 2473 + type: Table components: - parent: 15 - pos: -18.5,-10 - rot: 1.5707963267948966 rad + pos: -18.5,-9.5 + rot: -1.5707963267948966 rad type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2475 +- uid: 2474 type: GravityGenerator components: - parent: 15 pos: 49.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2476 +- uid: 2475 type: reinforced_wall components: - parent: 15 pos: 46.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2477 +- uid: 2476 type: reinforced_wall components: - parent: 15 pos: 46.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2478 +- uid: 2477 type: reinforced_wall components: - parent: 15 pos: 46.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2479 +- uid: 2478 type: reinforced_wall components: - parent: 15 pos: 46.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2480 +- uid: 2479 type: reinforced_wall components: - parent: 15 pos: 46.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2481 +- uid: 2480 type: reinforced_wall components: - parent: 15 pos: 46.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2482 +- uid: 2481 type: reinforced_wall components: - parent: 15 pos: 46.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2483 +- uid: 2482 type: reinforced_wall components: - parent: 15 pos: 47.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2484 +- uid: 2483 type: reinforced_wall components: - parent: 15 pos: 48.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2485 +- uid: 2484 type: reinforced_wall components: - parent: 15 pos: 49.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2486 +- uid: 2485 type: reinforced_wall components: - parent: 15 pos: 50.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2487 +- uid: 2486 type: reinforced_wall components: - parent: 15 pos: 51.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2488 +- uid: 2487 type: reinforced_wall components: - parent: 15 pos: 52.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2489 +- uid: 2488 type: reinforced_wall components: - parent: 15 pos: 52.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2490 +- uid: 2489 type: reinforced_wall components: - parent: 15 pos: 52.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2491 +- uid: 2490 type: reinforced_wall components: - parent: 15 pos: 52.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2492 +- uid: 2491 type: reinforced_wall components: - parent: 15 pos: 52.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2493 +- uid: 2492 type: reinforced_wall components: - parent: 15 pos: 52.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2494 +- uid: 2493 type: reinforced_wall components: - parent: 15 pos: 52.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2495 +- uid: 2494 type: reinforced_wall components: - parent: 15 pos: 51.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2496 +- uid: 2495 type: reinforced_wall components: - parent: 15 pos: 47.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2497 +- uid: 2496 type: solid_wall components: - parent: 15 pos: 51.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2498 +- uid: 2497 type: solid_wall components: - parent: 15 pos: 49.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2499 +- uid: 2498 type: solid_wall components: - parent: 15 pos: 46.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2500 +- uid: 2499 type: solid_wall components: - parent: 15 pos: 47.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2501 +- uid: 2500 type: solid_wall components: - parent: 15 pos: 47.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2502 +- uid: 2501 type: solid_wall components: - parent: 15 pos: 50.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2503 +- uid: 2502 type: solid_wall components: - parent: 15 pos: 51.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2504 +- uid: 2503 type: reinforced_wall components: - parent: 15 pos: 48.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2505 +- uid: 2504 type: reinforced_wall components: - parent: 15 pos: 50.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2506 +- uid: 2505 type: Wire components: - parent: 15 pos: 42.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2507 +- uid: 2506 type: Wire components: - parent: 15 pos: 43.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2508 +- uid: 2507 type: Wire components: - parent: 15 pos: 44.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2509 +- uid: 2508 type: Wire components: - parent: 15 pos: 45.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2510 +- uid: 2509 type: Wire components: - parent: 15 pos: 46.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2511 +- uid: 2510 type: Wire components: - parent: 15 pos: 47.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2512 +- uid: 2511 type: Wire components: - parent: 15 pos: 48.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2513 +- uid: 2512 type: Wire components: - parent: 15 pos: 49.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2514 +- uid: 2513 type: Wire components: - parent: 15 pos: 49.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2515 +- uid: 2514 type: Wire components: - parent: 15 pos: 49.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2516 +- uid: 2515 type: Wire components: - parent: 15 pos: 49.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2517 +- uid: 2516 type: Wire components: - parent: 15 pos: 49.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2518 +- uid: 2517 type: Wire components: - parent: 15 pos: 49.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2519 +- uid: 2518 type: Wire components: - parent: 15 pos: 49.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2520 +- uid: 2519 type: Wire components: - parent: 15 pos: 49.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2521 +- uid: 2520 type: APC components: - parent: 15 pos: 50.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2522 +- uid: 2521 type: Poweredlight components: - parent: 15 @@ -30264,7 +30196,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2523 +- uid: 2522 type: Poweredlight components: - parent: 15 @@ -30277,112 +30209,112 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2524 +- uid: 2523 type: Catwalk components: - parent: 15 pos: 47.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2525 +- uid: 2524 type: Catwalk components: - parent: 15 pos: 48.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2526 +- uid: 2525 type: Catwalk components: - parent: 15 pos: 49.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2527 +- uid: 2526 type: Catwalk components: - parent: 15 pos: 50.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2528 +- uid: 2527 type: Catwalk components: - parent: 15 pos: 51.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2529 +- uid: 2528 type: Catwalk components: - parent: 15 pos: 51.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2530 +- uid: 2529 type: Catwalk components: - parent: 15 pos: 51.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2531 +- uid: 2530 type: Catwalk components: - parent: 15 pos: 51.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2532 +- uid: 2531 type: Catwalk components: - parent: 15 pos: 51.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2533 +- uid: 2532 type: Catwalk components: - parent: 15 pos: 50.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2534 +- uid: 2533 type: Catwalk components: - parent: 15 pos: 49.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2535 +- uid: 2534 type: Catwalk components: - parent: 15 pos: 48.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2536 +- uid: 2535 type: Catwalk components: - parent: 15 pos: 47.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2537 +- uid: 2536 type: Catwalk components: - parent: 15 pos: 47.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2538 +- uid: 2537 type: Catwalk components: - parent: 15 pos: 47.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2539 +- uid: 2538 type: WardrobePajamaFilled components: - parent: 15 @@ -30397,7 +30329,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2540 +- uid: 2539 type: WardrobeGreyFilled components: - parent: 15 @@ -30412,7 +30344,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2541 +- uid: 2540 type: LockerGeneric components: - parent: 15 @@ -30427,7 +30359,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2542 +- uid: 2541 type: LockerL3JanitorFilled components: - parent: 15 @@ -30442,7 +30374,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2543 +- uid: 2542 type: WardrobeScienceFilled components: - parent: 15 @@ -30457,7 +30389,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2544 +- uid: 2543 type: LockerResearchDirectorFilled components: - parent: 15 @@ -30472,7 +30404,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2545 +- uid: 2544 type: LockerEngineerFilled components: - parent: 15 @@ -30487,7 +30419,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2546 +- uid: 2545 type: LockerEngineerFilled components: - parent: 15 @@ -30502,7 +30434,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2547 +- uid: 2546 type: LockerChiefEngineerFilled components: - parent: 15 @@ -30517,7 +30449,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2548 +- uid: 2547 type: LockerAtmosphericsFilled components: - parent: 15 @@ -30532,7 +30464,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2549 +- uid: 2548 type: LockerAtmosphericsFilled components: - parent: 15 @@ -30547,7 +30479,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2550 +- uid: 2549 type: WardrobeAtmosphericsFilled components: - parent: 15 @@ -30562,7 +30494,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2551 +- uid: 2550 type: WardrobeEngineeringFilled components: - parent: 15 @@ -30577,7 +30509,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2552 +- uid: 2551 type: LockerHeadOfPersonnelFilled components: - parent: 15 @@ -30592,7 +30524,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2553 +- uid: 2552 type: WardrobeBlackFilled components: - parent: 15 @@ -30607,7 +30539,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2554 +- uid: 2553 type: LockerChiefMedicalOfficerFilled components: - parent: 15 @@ -30622,7 +30554,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2555 +- uid: 2554 type: LockerL3SecurityFilled components: - parent: 15 @@ -30637,7 +30569,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2556 +- uid: 2555 type: WardrobeMedicalDoctorFilled components: - parent: 15 @@ -30652,7 +30584,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2557 +- uid: 2556 type: LockerSecurityFilled components: - parent: 15 @@ -30667,7 +30599,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2558 +- uid: 2557 type: LockerSecurityFilled components: - parent: 15 @@ -30682,7 +30614,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2559 +- uid: 2558 type: LockerSecurityFilled components: - parent: 15 @@ -30697,7 +30629,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2560 +- uid: 2559 type: LockerL3VirologyFilled components: - parent: 15 @@ -30712,7 +30644,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2561 +- uid: 2560 type: LockerMedicineFilled components: - parent: 15 @@ -30727,7 +30659,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2562 +- uid: 2561 type: WardrobeWhiteFilled components: - parent: 15 @@ -30742,7 +30674,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2563 +- uid: 2562 type: LockerChefFilled components: - parent: 15 @@ -30757,7 +30689,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2564 +- uid: 2563 type: LockerJanitorFilled components: - parent: 15 @@ -30772,7 +30704,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2565 +- uid: 2564 type: LockerL3JanitorFilled components: - parent: 15 @@ -30787,7 +30719,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2566 +- uid: 2565 type: WardrobePrisonFilled components: - parent: 15 @@ -30802,7 +30734,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2567 +- uid: 2566 type: PottedPlantRandom components: - parent: 15 @@ -30813,7 +30745,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2568 +- uid: 2567 type: WardrobeCargoFilled components: - parent: 15 @@ -30828,7 +30760,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2569 +- uid: 2568 type: LockerCaptainFilled components: - parent: 15 @@ -30843,7 +30775,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2570 +- uid: 2569 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -30858,7 +30790,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2571 +- uid: 2570 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -30873,7 +30805,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2572 +- uid: 2571 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -30888,7 +30820,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2573 +- uid: 2572 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -30903,7 +30835,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2574 +- uid: 2573 type: LockerFireFilled components: - parent: 15 @@ -30918,7 +30850,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2575 +- uid: 2574 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -30933,7 +30865,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2576 +- uid: 2575 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -30948,7 +30880,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2577 +- uid: 2576 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -30963,7 +30895,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2578 +- uid: 2577 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -30978,7 +30910,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2579 +- uid: 2578 type: LockerFireFilled components: - parent: 15 @@ -30993,7 +30925,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2580 +- uid: 2579 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31008,7 +30940,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2581 +- uid: 2580 type: LockerFireFilled components: - parent: 15 @@ -31023,7 +30955,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2582 +- uid: 2581 type: LockerFireFilled components: - parent: 15 @@ -31038,7 +30970,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2583 +- uid: 2582 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31053,7 +30985,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2584 +- uid: 2583 type: LockerFireFilled components: - parent: 15 @@ -31068,7 +31000,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2585 +- uid: 2584 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31083,7 +31015,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2586 +- uid: 2585 type: LockerFireFilled components: - parent: 15 @@ -31098,7 +31030,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2587 +- uid: 2586 type: LockerBombFilled components: - parent: 15 @@ -31113,7 +31045,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2588 +- uid: 2587 type: LockerBombFilled components: - parent: 15 @@ -31128,7 +31060,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2589 +- uid: 2588 type: LockerFireFilled components: - parent: 15 @@ -31143,7 +31075,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2590 +- uid: 2589 type: LockerFireFilled components: - parent: 15 @@ -31158,7 +31090,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2591 +- uid: 2590 type: PottedPlantRandom components: - parent: 15 @@ -31169,7 +31101,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2592 +- uid: 2591 type: PottedPlantRandom components: - parent: 15 @@ -31180,7 +31112,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2593 +- uid: 2592 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31195,7 +31127,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2594 +- uid: 2593 type: PottedPlantRD components: - parent: 15 @@ -31206,7 +31138,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2595 +- uid: 2594 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31221,7 +31153,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2596 +- uid: 2595 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31236,7 +31168,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2597 +- uid: 2596 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31251,7 +31183,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2598 +- uid: 2597 type: PottedPlantRandom components: - parent: 15 @@ -31262,7 +31194,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2599 +- uid: 2598 type: PottedPlantRandom components: - parent: 15 @@ -31273,7 +31205,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2600 +- uid: 2599 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31288,7 +31220,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2601 +- uid: 2600 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31303,7 +31235,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2602 +- uid: 2601 type: PottedPlantRandom components: - parent: 15 @@ -31314,7 +31246,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2603 +- uid: 2602 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31329,7 +31261,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2604 +- uid: 2603 type: PottedPlantRandom components: - parent: 15 @@ -31340,7 +31272,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2605 +- uid: 2604 type: LockerBoozeFilled components: - parent: 15 @@ -31355,14 +31287,14 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2606 +- uid: 2605 type: VendingMachineBooze components: - parent: 15 pos: -4.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2607 +- uid: 2606 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31377,7 +31309,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2608 +- uid: 2607 type: PottedPlantRandom components: - parent: 15 @@ -31388,7 +31320,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2609 +- uid: 2608 type: PottedPlantRandom components: - parent: 15 @@ -31399,7 +31331,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2610 +- uid: 2609 type: PottedPlantRandomPlastic components: - parent: 15 @@ -31410,7 +31342,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2611 +- uid: 2610 type: PottedPlantRandom components: - parent: 15 @@ -31421,7 +31353,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2612 +- uid: 2611 type: PottedPlantRandomPlastic components: - parent: 15 @@ -31432,497 +31364,497 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2613 +- uid: 2612 type: SpawnPointCargoTechnician components: - parent: 15 pos: 14.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2614 +- uid: 2613 type: SpawnPointCargoTechnician components: - parent: 15 pos: 21.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2615 +- uid: 2614 type: SpawnPointChiefMedicalOfficer components: - parent: 15 pos: 24.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2616 +- uid: 2615 type: SpawnPointMedicalDoctor components: - parent: 15 pos: 6.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2617 +- uid: 2616 type: SpawnPointMedicalDoctor components: - parent: 15 pos: 14.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2618 +- uid: 2617 type: SpawnPointMedicalDoctor components: - parent: 15 pos: 22.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2619 +- uid: 2618 type: SpawnPointMedicalDoctor components: - parent: 15 pos: 16.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2620 +- uid: 2619 type: SpawnPointMedicalDoctor components: - parent: 15 pos: 11.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2621 +- uid: 2620 type: SpawnPointMedicalDoctor components: - parent: 15 pos: 15.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2622 +- uid: 2621 type: SpawnPointResearchDirector components: - parent: 15 pos: -5.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2623 +- uid: 2622 type: SpawnPointScientist components: - parent: 15 pos: -9.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2624 +- uid: 2623 type: SpawnPointScientist components: - parent: 15 pos: -8.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2625 +- uid: 2624 type: SpawnPointScientist components: - parent: 15 pos: -0.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2626 +- uid: 2625 type: SpawnPointScientist components: - parent: 15 pos: -4.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2627 +- uid: 2626 type: SpawnPointScientist components: - parent: 15 pos: -15.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2628 +- uid: 2627 type: SpawnPointBartender components: - parent: 15 pos: -5.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2629 +- uid: 2628 type: SpawnPointClown components: - parent: 15 pos: -18.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2630 +- uid: 2629 type: SpawnPointJanitor components: - parent: 15 pos: -20.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2631 +- uid: 2630 type: SpawnPointHeadOfSecurity components: - parent: 15 pos: -6.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2632 +- uid: 2631 type: SpawnPointCaptain components: - parent: 15 pos: 9.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2633 +- uid: 2632 type: SpawnPointHeadOfPersonnel components: - parent: 15 pos: 7.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2634 +- uid: 2633 type: SpawnPointChiefEngineer components: - parent: 15 pos: 40.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2635 +- uid: 2634 type: SpawnPointStationEngineer components: - parent: 15 pos: 30.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2636 +- uid: 2635 type: solid_wall components: - parent: 15 pos: 45.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2637 +- uid: 2636 type: Wire components: - parent: 15 pos: 22.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2638 +- uid: 2637 type: Wire components: - parent: 15 pos: 22.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2639 +- uid: 2638 type: Wire components: - parent: 15 pos: 22.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2640 +- uid: 2639 type: Wire components: - parent: 15 pos: 22.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2641 +- uid: 2640 type: Wire components: - parent: 15 pos: 22.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2642 +- uid: 2641 type: Wire components: - parent: 15 pos: 21.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2643 +- uid: 2642 type: Wire components: - parent: 15 pos: 20.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2644 +- uid: 2643 type: Wire components: - parent: 15 pos: 19.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2645 +- uid: 2644 type: Wire components: - parent: 15 pos: 14.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2646 +- uid: 2645 type: Wire components: - parent: 15 pos: 14.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2647 +- uid: 2646 type: solid_wall components: - parent: 15 pos: 23.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2648 +- uid: 2647 type: solid_wall components: - parent: 15 pos: 23.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2649 +- uid: 2648 type: solid_wall components: - parent: 15 pos: 23.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2650 +- uid: 2649 type: solid_wall components: - parent: 15 pos: 23.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2651 +- uid: 2650 type: solid_wall components: - parent: 15 pos: 23.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2652 +- uid: 2651 type: solid_wall components: - parent: 15 pos: 22.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2653 +- uid: 2652 type: solid_wall components: - parent: 15 pos: 21.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2654 +- uid: 2653 type: solid_wall components: - parent: 15 pos: 20.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2655 +- uid: 2654 type: solid_wall components: - parent: 15 pos: 19.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2656 +- uid: 2655 type: solid_wall components: - parent: 15 pos: 18.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2657 +- uid: 2656 type: solid_wall components: - parent: 15 pos: 17.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2658 +- uid: 2657 type: solid_wall components: - parent: 15 pos: 16.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2659 +- uid: 2658 type: solid_wall components: - parent: 15 pos: 15.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2660 +- uid: 2659 type: solid_wall components: - parent: 15 pos: 14.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2661 +- uid: 2660 type: solid_wall components: - parent: 15 pos: 13.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2662 +- uid: 2661 type: solid_wall components: - parent: 15 pos: 13.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2663 +- uid: 2662 type: solid_wall components: - parent: 15 pos: 13.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2664 +- uid: 2663 type: solid_wall components: - parent: 15 pos: 13.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2665 +- uid: 2664 type: solid_wall components: - parent: 15 pos: 13.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2666 +- uid: 2665 type: solid_wall components: - parent: 15 pos: 20.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2667 +- uid: 2666 type: solid_wall components: - parent: 15 pos: 20.5,-20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2668 +- uid: 2667 type: solid_wall components: - parent: 15 pos: 20.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2669 +- uid: 2668 type: solid_wall components: - parent: 15 pos: 20.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2670 +- uid: 2669 type: solid_wall components: - parent: 15 pos: 20.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2671 +- uid: 2670 type: solid_wall components: - parent: 15 pos: 17.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2672 +- uid: 2671 type: solid_wall components: - parent: 15 pos: 16.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2673 +- uid: 2672 type: solid_wall components: - parent: 15 pos: 16.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2674 +- uid: 2673 type: solid_wall components: - parent: 15 pos: 16.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2675 +- uid: 2674 type: solid_wall components: - parent: 15 pos: 16.5,-20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2676 +- uid: 2675 type: solid_wall components: - parent: 15 pos: 16.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2677 +- uid: 2676 type: LowWall components: - parent: 15 pos: 17.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2678 +- uid: 2677 type: LowWall components: - parent: 15 pos: 18.5,-18.5 rot: -1.5707963267948966 rad type: Transform +- uid: 2678 + type: Window + components: + - parent: 15 + pos: 17.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 2679 - type: Window - components: - - parent: 15 - pos: 17.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2680 type: Window components: - parent: 15 pos: 18.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2681 +- uid: 2680 type: Table components: - parent: 15 pos: 19.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2682 +- uid: 2681 type: Table components: - parent: 15 pos: 19.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2683 +- uid: 2682 type: WardrobeWhite components: - parent: 15 @@ -31937,7 +31869,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2684 +- uid: 2683 type: AirlockExternalLocked components: - name: Escape Shuttle Dock @@ -31946,7 +31878,7 @@ entities: pos: -41.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2685 +- uid: 2684 type: AirlockExternalLocked components: - name: Escape Shuttle Dock @@ -31955,7 +31887,7 @@ entities: pos: -39.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2686 +- uid: 2685 type: AirlockExternalLocked components: - name: Escape Shuttle Dock @@ -31964,7 +31896,7 @@ entities: pos: -39.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2687 +- uid: 2686 type: AirlockExternalLocked components: - name: Escape Shuttle Dock @@ -31973,7 +31905,7 @@ entities: pos: -41.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2688 +- uid: 2687 type: AirlockExternalLocked components: - name: Arrivals Shuttle Dock @@ -31982,7 +31914,7 @@ entities: pos: -37.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2689 +- uid: 2688 type: AirlockExternalLocked components: - name: Arrivals Shuttle Dock @@ -31991,7 +31923,7 @@ entities: pos: -39.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2690 +- uid: 2689 type: AirlockSecurityGlassLocked components: - name: Brig @@ -32000,7 +31932,7 @@ entities: pos: -5.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2691 +- uid: 2690 type: AirlockSecurityGlassLocked components: - name: Brig @@ -32009,7 +31941,7 @@ entities: pos: -5.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2692 +- uid: 2691 type: AirlockSecurityGlassLocked components: - name: Brig @@ -32018,7 +31950,7 @@ entities: pos: -6.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2693 +- uid: 2692 type: AirlockEngineeringLocked components: - name: Gravity Generator @@ -32027,7 +31959,7 @@ entities: pos: 49.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2694 +- uid: 2693 type: AirlockEngineeringGlassLocked components: - name: Engineering Equipment @@ -32036,7 +31968,7 @@ entities: pos: 33.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2695 +- uid: 2694 type: AirlockEngineeringGlassLocked components: - name: Atmospherics @@ -32045,7 +31977,7 @@ entities: pos: 33.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2696 +- uid: 2695 type: AirlockEngineeringLocked components: - name: Secure Storage @@ -32054,7 +31986,7 @@ entities: pos: 41.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2697 +- uid: 2696 type: AirlockEngineeringLocked components: - name: Secure Storage @@ -32063,35 +31995,35 @@ entities: pos: 40.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2698 +- uid: 2697 type: AirlockMaintEngiLocked components: - parent: 15 pos: 29.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2699 +- uid: 2698 type: AirlockMaintEngiLocked components: - parent: 15 pos: 43.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2700 +- uid: 2699 type: AirlockMaintCargoLocked components: - parent: 15 pos: 25.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2701 +- uid: 2700 type: AirlockMaintRnDLocked components: - parent: 15 pos: -16.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2702 +- uid: 2701 type: AirlockCommandGlassLocked components: - name: Heads of Staff Meeting Room @@ -32100,7 +32032,7 @@ entities: pos: 1.5,24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2703 +- uid: 2702 type: AirlockCommandGlassLocked components: - name: Heads of Staff Meeting Room @@ -32109,7 +32041,7 @@ entities: pos: 1.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2704 +- uid: 2703 type: AirlockCommandLocked components: - name: Captain's Office @@ -32121,28 +32053,28 @@ entities: - access: - - Captain type: AccessReader -- uid: 2705 +- uid: 2704 type: AirlockMaintCommonLocked components: - parent: 15 pos: 6.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2706 +- uid: 2705 type: AirlockMaintCommonLocked components: - parent: 15 pos: 21.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2707 +- uid: 2706 type: AirlockMaintCommandLocked components: - parent: 15 pos: -1.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2708 +- uid: 2707 type: AirlockMedicalGlassLocked components: - name: Medical Bay @@ -32151,7 +32083,7 @@ entities: pos: 10.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2709 +- uid: 2708 type: AirlockMedicalGlassLocked components: - name: Medical Bay @@ -32160,7 +32092,7 @@ entities: pos: 11.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2710 +- uid: 2709 type: AirlockMedicalGlassLocked components: - name: Medical Storage @@ -32169,7 +32101,7 @@ entities: pos: 20.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2711 +- uid: 2710 type: AirlockMedicalGlassLocked components: - name: Surgery @@ -32178,7 +32110,7 @@ entities: pos: 19.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2712 +- uid: 2711 type: AirlockMedicalGlassLocked components: - name: Cloning @@ -32187,7 +32119,7 @@ entities: pos: 8.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2713 +- uid: 2712 type: AirlockSecurityGlassLocked components: - name: Security Equipment @@ -32196,7 +32128,7 @@ entities: pos: -10.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2714 +- uid: 2713 type: AirlockSecurityGlassLocked components: - name: Reception Desk @@ -32205,35 +32137,35 @@ entities: pos: -9.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2715 +- uid: 2714 type: AirlockMaintCommonLocked components: - parent: 15 pos: 0.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2716 +- uid: 2715 type: AirlockMaintMedLocked components: - parent: 15 pos: 14.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2717 +- uid: 2716 type: AirlockMaintMedLocked components: - parent: 15 pos: 20.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2718 +- uid: 2717 type: AirlockMaintRnDLocked components: - parent: 15 pos: -11.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2719 +- uid: 2718 type: AirlockScienceLocked components: - name: Science @@ -32242,7 +32174,7 @@ entities: pos: 0.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2720 +- uid: 2719 type: AirlockScienceLocked components: - name: Science @@ -32251,7 +32183,7 @@ entities: pos: 0.5,-20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2721 +- uid: 2720 type: AirlockScienceGlassLocked components: - name: Research and Development @@ -32260,14 +32192,14 @@ entities: pos: -3.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2722 +- uid: 2721 type: AirlockMaintCommonLocked components: - parent: 15 pos: -33.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2723 +- uid: 2722 type: AirlockCommandGlassLocked components: - name: Chief Engineer's Office @@ -32280,14 +32212,14 @@ entities: - - Engineering - Command type: AccessReader -- uid: 2724 +- uid: 2723 type: Catwalk components: - parent: 15 pos: 26.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2725 +- uid: 2724 type: AirlockMaintCommandLocked components: - parent: 15 @@ -32297,14 +32229,14 @@ entities: - access: - - HeadOfPersonnel type: AccessReader -- uid: 2726 +- uid: 2725 type: AirlockExternalLocked components: - parent: 15 pos: 15.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2727 +- uid: 2726 type: Airlock components: - name: Custodial Closet @@ -32316,28 +32248,28 @@ entities: - access: - - Janitor type: AccessReader -- uid: 2728 +- uid: 2727 type: AirlockMaintCommonLocked components: - parent: 15 pos: -34.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2729 +- uid: 2728 type: AirlockMaintCommonLocked components: - parent: 15 pos: -23.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2730 +- uid: 2729 type: AirlockMaintCommonLocked components: - parent: 15 pos: 1.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2731 +- uid: 2730 type: AirlockVaultLocked components: - name: Vault @@ -32346,7 +32278,7 @@ entities: pos: 0.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2732 +- uid: 2731 type: AirlockMaintCommonLocked components: - parent: 15 @@ -32356,7 +32288,7 @@ entities: - access: - - Service type: AccessReader -- uid: 2733 +- uid: 2732 type: AirlockServiceGlassLocked components: - name: Kitchen @@ -32365,14 +32297,14 @@ entities: pos: -10.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2734 +- uid: 2733 type: AirlockMaintEngiLocked components: - parent: 15 pos: 28.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2735 +- uid: 2734 type: AirlockServiceGlassLocked components: - name: Bar @@ -32381,7 +32313,7 @@ entities: pos: -7.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2736 +- uid: 2735 type: AirlockSecurityGlassLocked components: - name: Brig @@ -32390,49 +32322,49 @@ entities: pos: -6.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2737 +- uid: 2736 type: AirlockMaintCommonLocked components: - parent: 15 pos: -16.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2738 +- uid: 2737 type: AirlockMaintCommonLocked components: - parent: 15 pos: 5.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2739 +- uid: 2738 type: AirlockMaintRnDLocked components: - parent: 15 pos: -4.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2740 +- uid: 2739 type: AirlockMaintIntLocked components: - parent: 15 pos: -12.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2741 +- uid: 2740 type: AirlockMaintIntLocked components: - parent: 15 pos: -13.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2742 +- uid: 2741 type: AirlockMaintCommonLocked components: - parent: 15 pos: -32.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2743 +- uid: 2742 type: AirlockMaintCommonLocked components: - parent: 15 @@ -32442,7 +32374,7 @@ entities: - access: - - Janitor type: AccessReader -- uid: 2744 +- uid: 2743 type: AirlockEngineeringGlassLocked components: - name: Engineering @@ -32451,7 +32383,7 @@ entities: pos: 30.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2745 +- uid: 2744 type: AirlockEngineeringGlassLocked components: - name: Engineering @@ -32460,7 +32392,7 @@ entities: pos: 30.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2746 +- uid: 2745 type: AirlockMedicalGlassLocked components: - name: Chemistry @@ -32469,7 +32401,7 @@ entities: pos: 7.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2747 +- uid: 2746 type: AirlockMedicalGlassLocked components: - name: Chemistry @@ -32478,7 +32410,7 @@ entities: pos: 17.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2748 +- uid: 2747 type: AirlockCommandGlassLocked components: - name: Chief Medical Officer's Office @@ -32491,7 +32423,7 @@ entities: - - Medical - Command type: AccessReader -- uid: 2749 +- uid: 2748 type: AirlockCommandGlassLocked components: - name: Server Room @@ -32504,7 +32436,7 @@ entities: - - Research - Command type: AccessReader -- uid: 2750 +- uid: 2749 type: AirlockCommandGlassLocked components: - name: Research Director's Office @@ -32517,7 +32449,7 @@ entities: - - Research - Command type: AccessReader -- uid: 2751 +- uid: 2750 type: AirlockScienceLocked components: - name: Testing Area @@ -32526,7 +32458,7 @@ entities: pos: -12.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2752 +- uid: 2751 type: AirlockScienceLocked components: - name: Testing Area @@ -32535,7 +32467,7 @@ entities: pos: -12.5,-20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2753 +- uid: 2752 type: AirlockGlass components: - name: Locker Room @@ -32544,7 +32476,7 @@ entities: pos: -26.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2754 +- uid: 2753 type: AirlockServiceGlassLocked components: - name: Tool Storage @@ -32556,7 +32488,7 @@ entities: - access: - - Maintenance type: AccessReader -- uid: 2755 +- uid: 2754 type: AirlockServiceGlassLocked components: - name: Tool Storage @@ -32568,7 +32500,7 @@ entities: - access: - - Maintenance type: AccessReader -- uid: 2756 +- uid: 2755 type: AirlockGlass components: - name: Locker Room @@ -32577,7 +32509,7 @@ entities: pos: -26.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2757 +- uid: 2756 type: AirlockServiceLocked components: - name: Theatre @@ -32589,7 +32521,7 @@ entities: - access: - - Theatre type: AccessReader -- uid: 2758 +- uid: 2757 type: Airlock components: - name: Bunk Dorms @@ -32598,7 +32530,7 @@ entities: pos: -26.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2759 +- uid: 2758 type: Airlock components: - name: Showers @@ -32607,7 +32539,7 @@ entities: pos: -21.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2760 +- uid: 2759 type: AirlockMaintCommonLocked components: - parent: 15 @@ -32617,49 +32549,49 @@ entities: - access: - - Service type: AccessReader -- uid: 2761 +- uid: 2760 type: AirlockMaintCommonLocked components: - parent: 15 pos: -31.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2762 +- uid: 2761 type: AirlockMaintCommonLocked components: - parent: 15 pos: 27.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2763 +- uid: 2762 type: Table components: - parent: 15 pos: -8.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2764 +- uid: 2763 type: Table components: - parent: 15 pos: -9.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2765 +- uid: 2764 type: Table components: - parent: 15 pos: -7.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2766 +- uid: 2765 type: Table components: - parent: 15 pos: -7.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2767 +- uid: 2766 type: ChairOfficeDark components: - parent: 15 @@ -32668,7 +32600,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2768 +- uid: 2767 type: ChairOfficeDark components: - parent: 15 @@ -32676,7 +32608,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2769 +- uid: 2768 type: AirlockVaultLocked components: - name: Armory @@ -32685,7 +32617,7 @@ entities: pos: -12.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2770 +- uid: 2769 type: AirlockVaultLocked components: - name: Armory @@ -32694,7 +32626,7 @@ entities: pos: -10.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2771 +- uid: 2770 type: AirlockCommandGlassLocked components: - name: Bridge @@ -32703,7 +32635,7 @@ entities: pos: 2.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2772 +- uid: 2771 type: AirlockCommandGlassLocked components: - name: Bridge @@ -32712,7 +32644,7 @@ entities: pos: 4.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2773 +- uid: 2772 type: AirlockCommandGlassLocked components: - name: EVA @@ -32724,7 +32656,7 @@ entities: - access: - - External type: AccessReader -- uid: 2774 +- uid: 2773 type: AirlockCommandGlassLocked components: - name: EVA @@ -32736,7 +32668,7 @@ entities: - access: - - External type: AccessReader -- uid: 2775 +- uid: 2774 type: AirlockMaintCommandLocked components: - parent: 15 @@ -32746,7 +32678,7 @@ entities: - access: - - External type: AccessReader -- uid: 2776 +- uid: 2775 type: AirlockCargoGlassLocked components: - name: Cargo Office @@ -32755,7 +32687,7 @@ entities: pos: 13.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2777 +- uid: 2776 type: AirlockCargoGlassLocked components: - name: Cargo Bay @@ -32764,7 +32696,7 @@ entities: pos: 17.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2778 +- uid: 2777 type: AirlockCargoGlassLocked components: - name: Cargo Bay @@ -32773,7 +32705,7 @@ entities: pos: 17.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2779 +- uid: 2778 type: AirlockExternalLocked components: - name: Supply Shuttle Dock @@ -32785,7 +32717,7 @@ entities: - access: - - Cargo type: AccessReader -- uid: 2780 +- uid: 2779 type: AirlockExternalLocked components: - name: Supply Shuttle Dock @@ -32797,7 +32729,7 @@ entities: - access: - - Cargo type: AccessReader -- uid: 2781 +- uid: 2780 type: AirlockExternalLocked components: - name: Supply Shuttle Dock @@ -32809,7 +32741,7 @@ entities: - access: - - Cargo type: AccessReader -- uid: 2782 +- uid: 2781 type: AirlockExternalLocked components: - name: Supply Shuttle Dock @@ -32821,14 +32753,14 @@ entities: - access: - - Cargo type: AccessReader -- uid: 2783 +- uid: 2782 type: AirlockExternalLocked components: - parent: 15 pos: 14.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2784 +- uid: 2783 type: AirlockCommandGlassLocked components: - name: Head of Security's Office @@ -32841,7 +32773,7 @@ entities: - - Security - Command type: AccessReader -- uid: 2785 +- uid: 2784 type: Poweredlight components: - parent: 15 @@ -32855,7 +32787,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2786 +- uid: 2785 type: Poweredlight components: - parent: 15 @@ -32870,7 +32802,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2787 +- uid: 2786 type: Poweredlight components: - parent: 15 @@ -32885,21 +32817,21 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2788 +- uid: 2787 type: reinforced_wall components: - parent: 15 pos: -15.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2789 +- uid: 2788 type: Catwalk components: - parent: 15 pos: -1.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2790 +- uid: 2789 type: AirlockSecurityGlassLocked components: - name: Cell 1 @@ -32908,7 +32840,7 @@ entities: pos: -2.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2791 +- uid: 2790 type: AirlockSecurityGlassLocked components: - name: Cell 2 @@ -32917,329 +32849,329 @@ entities: pos: 0.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2792 +- uid: 2791 type: SuspicionMeleeSpawner components: - parent: 15 pos: -27.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2793 +- uid: 2792 type: SuspicionMeleeSpawner components: - parent: 15 pos: -28.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2794 +- uid: 2793 type: SuspicionMeleeSpawner components: - parent: 15 pos: -29.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2795 +- uid: 2794 type: SuspicionMeleeSpawner components: - parent: 15 pos: -0.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2796 +- uid: 2795 type: SuspicionMeleeSpawner components: - parent: 15 pos: 6.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2797 +- uid: 2796 type: SuspicionMeleeSpawner components: - parent: 15 pos: 10.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2798 +- uid: 2797 type: SuspicionMeleeSpawner components: - parent: 15 pos: 15.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2799 +- uid: 2798 type: SuspicionMeleeSpawner components: - parent: 15 pos: 10.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2800 +- uid: 2799 type: SuspicionMeleeSpawner components: - parent: 15 pos: 18.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2801 +- uid: 2800 type: SuspicionMeleeSpawner components: - parent: 15 pos: 17.5,-20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2802 +- uid: 2801 type: SuspicionMeleeSpawner components: - parent: 15 pos: 22.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2803 +- uid: 2802 type: SuspicionRifleSpawner components: - parent: 15 pos: 23.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2804 +- uid: 2803 type: SuspicionRifleSpawner components: - parent: 15 pos: -2.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2805 +- uid: 2804 type: SuspicionRifleSpawner components: - parent: 15 pos: -14.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2806 +- uid: 2805 type: SuspicionRifleSpawner components: - parent: 15 pos: -32.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2807 +- uid: 2806 type: SuspicionPistolSpawner components: - parent: 15 pos: -18.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2808 +- uid: 2807 type: SuspicionPistolSpawner components: - parent: 15 pos: -31.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2809 +- uid: 2808 type: SuspicionPistolSpawner components: - parent: 15 pos: -20.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2810 +- uid: 2809 type: SuspicionRifleSpawner components: - parent: 15 pos: -7.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2811 +- uid: 2810 type: SuspicionRifleSpawner components: - parent: 15 pos: -7.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2812 +- uid: 2811 type: SuspicionPistolSpawner components: - parent: 15 pos: 6.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2813 +- uid: 2812 type: SuspicionRifleSpawner components: - parent: 15 pos: 0.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2814 +- uid: 2813 type: SuspicionRifleSpawner components: - parent: 15 pos: 6.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2815 +- uid: 2814 type: SuspicionPistolSpawner components: - parent: 15 pos: -13.5,24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2816 +- uid: 2815 type: SuspicionMeleeSpawner components: - parent: 15 pos: -4.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2817 +- uid: 2816 type: SuspicionRifleSpawner components: - parent: 15 pos: 5.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2818 +- uid: 2817 type: solid_wall components: - parent: 15 pos: -21.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2819 +- uid: 2818 type: Wire components: - parent: 15 pos: -15.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2820 +- uid: 2819 type: Wire components: - parent: 15 pos: -16.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2821 +- uid: 2820 type: Wire components: - parent: 15 pos: -16.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2822 +- uid: 2821 type: Wire components: - parent: 15 pos: -16.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2823 +- uid: 2822 type: Wire components: - parent: 15 pos: -16.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2824 +- uid: 2823 type: Wire components: - parent: 15 pos: -17.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2825 +- uid: 2824 type: Wire components: - parent: 15 pos: -18.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2826 +- uid: 2825 type: Wire components: - parent: 15 pos: -19.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2827 +- uid: 2826 type: Wire components: - parent: 15 pos: -16.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2828 +- uid: 2827 type: Wire components: - parent: 15 pos: -19.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2829 +- uid: 2828 type: Wire components: - parent: 15 pos: -16.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2830 +- uid: 2829 type: Wire components: - parent: 15 pos: -16.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2831 +- uid: 2830 type: Wire components: - parent: 15 pos: -16.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2832 +- uid: 2831 type: Wire components: - parent: 15 pos: -16.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2833 +- uid: 2832 type: Wire components: - parent: 15 pos: -16.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2834 +- uid: 2833 type: solid_wall components: - parent: 15 pos: -14.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2835 +- uid: 2834 type: Table components: - parent: 15 pos: -15.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2836 +- uid: 2835 type: AirlockMaintCommonLocked components: - parent: 15 pos: -14.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2837 +- uid: 2836 type: AirlockMaintCommonLocked components: - parent: 15 pos: -16.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2838 +- uid: 2837 type: Airlock components: - name: Hydroponics @@ -33248,42 +33180,42 @@ entities: pos: -16.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2839 +- uid: 2838 type: Catwalk components: - parent: 15 pos: -16.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2840 +- uid: 2839 type: Catwalk components: - parent: 15 pos: -15.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2841 +- uid: 2840 type: Catwalk components: - parent: 15 pos: -15.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2842 +- uid: 2841 type: Catwalk components: - parent: 15 pos: -16.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2843 +- uid: 2842 type: Catwalk components: - parent: 15 pos: -15.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2844 +- uid: 2843 type: Poweredlight components: - parent: 15 @@ -33294,7 +33226,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2845 +- uid: 2844 type: Poweredlight components: - parent: 15 @@ -33305,7 +33237,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2846 +- uid: 2845 type: Poweredlight components: - parent: 15 @@ -33316,728 +33248,728 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2847 +- uid: 2846 type: TrashSpawner components: - parent: 15 pos: -21.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2848 +- uid: 2847 type: TrashSpawner components: - parent: 15 pos: -31.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2849 +- uid: 2848 type: TrashSpawner components: - parent: 15 pos: -32.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2850 +- uid: 2849 type: TrashSpawner components: - parent: 15 pos: -30.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2851 +- uid: 2850 type: TrashSpawner components: - parent: 15 pos: -25.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2852 +- uid: 2851 type: TrashSpawner components: - parent: 15 pos: -23.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2853 +- uid: 2852 type: TrashSpawner components: - parent: 15 pos: -21.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2854 +- uid: 2853 type: TrashSpawner components: - parent: 15 pos: -17.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2855 +- uid: 2854 type: TrashSpawner components: - parent: 15 pos: -15.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2856 +- uid: 2855 type: TrashSpawner components: - parent: 15 pos: -18.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2857 +- uid: 2856 type: TrashSpawner components: - parent: 15 pos: -18.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2858 +- uid: 2857 type: TrashSpawner components: - parent: 15 pos: -15.5,24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2859 +- uid: 2858 type: TrashSpawner components: - parent: 15 pos: -8.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2860 +- uid: 2859 type: TrashSpawner components: - parent: 15 pos: -7.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2861 +- uid: 2860 type: TrashSpawner components: - parent: 15 pos: -4.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2862 +- uid: 2861 type: TrashSpawner components: - parent: 15 pos: -2.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2863 +- uid: 2862 type: TrashSpawner components: - parent: 15 pos: -3.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2864 +- uid: 2863 type: TrashSpawner components: - parent: 15 pos: 0.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2865 +- uid: 2864 type: TrashSpawner components: - parent: 15 pos: -36.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2866 +- uid: 2865 type: TrashSpawner components: - parent: 15 pos: -35.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2867 +- uid: 2866 type: TrashSpawner components: - parent: 15 pos: -32.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2868 +- uid: 2867 type: TrashSpawner components: - parent: 15 pos: -22.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2869 +- uid: 2868 type: TrashSpawner components: - parent: 15 pos: -30.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2870 +- uid: 2869 type: TrashSpawner components: - parent: 15 pos: -30.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2871 +- uid: 2870 type: TrashSpawner components: - parent: 15 pos: -19.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2872 +- uid: 2871 type: TrashSpawner components: - parent: 15 pos: -32.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2873 +- uid: 2872 type: TrashSpawner components: - parent: 15 pos: -33.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2874 +- uid: 2873 type: TrashSpawner components: - parent: 15 pos: -33.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2875 +- uid: 2874 type: TrashSpawner components: - parent: 15 pos: -32.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2876 +- uid: 2875 type: TrashSpawner components: - parent: 15 pos: -28.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2877 +- uid: 2876 type: TrashSpawner components: - parent: 15 pos: -21.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2878 +- uid: 2877 type: TrashSpawner components: - parent: 15 pos: -21.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2879 +- uid: 2878 type: TrashSpawner components: - parent: 15 pos: -18.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2880 +- uid: 2879 type: TrashSpawner components: - parent: 15 pos: -12.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2881 +- uid: 2880 type: TrashSpawner components: - parent: 15 pos: -8.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2882 +- uid: 2881 type: TrashSpawner components: - parent: 15 pos: -9.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2883 +- uid: 2882 type: TrashSpawner components: - parent: 15 pos: -8.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2884 +- uid: 2883 type: TrashSpawner components: - parent: 15 pos: -11.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2885 +- uid: 2884 type: TrashSpawner components: - parent: 15 pos: -16.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2886 +- uid: 2885 type: TrashSpawner components: - parent: 15 pos: -6.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2887 +- uid: 2886 type: TrashSpawner components: - parent: 15 pos: -2.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2888 +- uid: 2887 type: TrashSpawner components: - parent: 15 pos: -0.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2889 +- uid: 2888 type: TrashSpawner components: - parent: 15 pos: -0.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2890 +- uid: 2889 type: TrashSpawner components: - parent: 15 pos: 0.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2891 +- uid: 2890 type: TrashSpawner components: - parent: 15 pos: -11.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2892 +- uid: 2891 type: TrashSpawner components: - parent: 15 pos: -11.5,-27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2893 +- uid: 2892 type: TrashSpawner components: - parent: 15 pos: -9.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2894 +- uid: 2893 type: TrashSpawner components: - parent: 15 pos: -5.5,-27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2895 +- uid: 2894 type: TrashSpawner components: - parent: 15 pos: -2.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2896 +- uid: 2895 type: TrashSpawner components: - parent: 15 pos: -0.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2897 +- uid: 2896 type: TrashSpawner components: - parent: 15 pos: -10.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2898 +- uid: 2897 type: TrashSpawner components: - parent: 15 pos: 7.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2899 +- uid: 2898 type: TrashSpawner components: - parent: 15 pos: 12.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2900 +- uid: 2899 type: TrashSpawner components: - parent: 15 pos: 14.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2901 +- uid: 2900 type: TrashSpawner components: - parent: 15 pos: 14.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2902 +- uid: 2901 type: TrashSpawner components: - parent: 15 pos: 18.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2903 +- uid: 2902 type: TrashSpawner components: - parent: 15 pos: 22.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2904 +- uid: 2903 type: TrashSpawner components: - parent: 15 pos: 21.5,-20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2905 +- uid: 2904 type: TrashSpawner components: - parent: 15 pos: 21.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2906 +- uid: 2905 type: TrashSpawner components: - parent: 15 pos: 26.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2907 +- uid: 2906 type: TrashSpawner components: - parent: 15 pos: 27.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2908 +- uid: 2907 type: TrashSpawner components: - parent: 15 pos: 24.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2909 +- uid: 2908 type: TrashSpawner components: - parent: 15 pos: 27.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2910 +- uid: 2909 type: TrashSpawner components: - parent: 15 pos: 27.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2911 +- uid: 2910 type: TrashSpawner components: - parent: 15 pos: 25.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2912 +- uid: 2911 type: TrashSpawner components: - parent: 15 pos: 21.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2913 +- uid: 2912 type: TrashSpawner components: - parent: 15 pos: 20.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2914 +- uid: 2913 type: TrashSpawner components: - parent: 15 pos: 32.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2915 +- uid: 2914 type: TrashSpawner components: - parent: 15 pos: 37.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2916 +- uid: 2915 type: TrashSpawner components: - parent: 15 pos: 37.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2917 +- uid: 2916 type: TrashSpawner components: - parent: 15 pos: 42.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2918 +- uid: 2917 type: TrashSpawner components: - parent: 15 pos: 44.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2919 +- uid: 2918 type: TrashSpawner components: - parent: 15 pos: 35.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2920 +- uid: 2919 type: TrashSpawner components: - parent: 15 pos: 27.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2921 +- uid: 2920 type: TrashSpawner components: - parent: 15 pos: 28.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2922 +- uid: 2921 type: TrashSpawner components: - parent: 15 pos: 26.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2923 +- uid: 2922 type: TrashSpawner components: - parent: 15 pos: 27.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2924 +- uid: 2923 type: TrashSpawner components: - parent: 15 pos: 24.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2925 +- uid: 2924 type: TrashSpawner components: - parent: 15 pos: 12.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2926 +- uid: 2925 type: TrashSpawner components: - parent: 15 pos: 12.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2927 +- uid: 2926 type: TrashSpawner components: - parent: 15 pos: 6.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2928 +- uid: 2927 type: TrashSpawner components: - parent: 15 pos: 25.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2929 +- uid: 2928 type: TrashSpawner components: - parent: 15 pos: 19.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2930 +- uid: 2929 type: TrashSpawner components: - parent: 15 pos: -7.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2931 +- uid: 2930 type: TrashSpawner components: - parent: 15 pos: -1.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2932 +- uid: 2931 type: TrashSpawner components: - parent: 15 pos: -8.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2933 +- uid: 2932 type: TrashSpawner components: - parent: 15 pos: -17.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2934 +- uid: 2933 type: TrashSpawner components: - parent: 15 pos: -25.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2935 +- uid: 2934 type: TrashSpawner components: - parent: 15 pos: -22.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2936 +- uid: 2935 type: TrashSpawner components: - parent: 15 pos: 4.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2937 +- uid: 2936 type: TrashSpawner components: - parent: 15 pos: 1.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2938 +- uid: 2937 type: TrashSpawner components: - parent: 15 pos: 13.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2939 +- uid: 2938 type: TrashSpawner components: - parent: 15 pos: 12.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2940 +- uid: 2939 type: TrashSpawner components: - parent: 15 pos: 9.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2941 +- uid: 2940 type: solid_wall components: - parent: 15 pos: -19.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2942 +- uid: 2941 type: solid_wall components: - parent: 15 pos: -19.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2943 +- uid: 2942 type: solid_wall components: - parent: 15 pos: -19.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2944 +- uid: 2943 type: solid_wall components: - parent: 15 pos: -19.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2945 +- uid: 2944 type: solid_wall components: - parent: 15 pos: -20.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2946 +- uid: 2945 type: solid_wall components: - parent: 15 pos: -21.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2947 +- uid: 2946 type: solid_wall components: - parent: 15 pos: -22.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2948 +- uid: 2947 type: solid_wall components: - parent: 15 pos: -23.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2949 +- uid: 2948 type: AirlockMaintCommon components: - parent: 15 pos: -24.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2950 +- uid: 2949 type: DisposalUnit components: - parent: 15 @@ -34050,7 +33982,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2951 +- uid: 2950 type: DisposalPipe components: - parent: 15 @@ -34063,7 +33995,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2952 +- uid: 2951 type: DisposalPipe components: - parent: 15 @@ -34076,7 +34008,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2953 +- uid: 2952 type: DisposalPipe components: - parent: 15 @@ -34089,7 +34021,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2954 +- uid: 2953 type: DisposalUnit components: - parent: 15 @@ -34102,7 +34034,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2955 +- uid: 2954 type: DisposalPipe components: - parent: 15 @@ -34115,7 +34047,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2956 +- uid: 2955 type: DisposalPipe components: - parent: 15 @@ -34128,7 +34060,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2957 +- uid: 2956 type: DisposalPipe components: - parent: 15 @@ -34141,7 +34073,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2958 +- uid: 2957 type: DisposalPipe components: - parent: 15 @@ -34154,7 +34086,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2959 +- uid: 2958 type: DisposalBend components: - parent: 15 @@ -34167,7 +34099,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2960 +- uid: 2959 type: DisposalPipe components: - parent: 15 @@ -34180,7 +34112,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2961 +- uid: 2960 type: DisposalPipe components: - parent: 15 @@ -34193,7 +34125,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2962 +- uid: 2961 type: DisposalPipe components: - parent: 15 @@ -34206,7 +34138,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2963 +- uid: 2962 type: DisposalPipe components: - parent: 15 @@ -34219,7 +34151,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2964 +- uid: 2963 type: DisposalPipe components: - parent: 15 @@ -34232,7 +34164,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2965 +- uid: 2964 type: DisposalPipe components: - parent: 15 @@ -34245,7 +34177,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2966 +- uid: 2965 type: DisposalPipe components: - parent: 15 @@ -34258,7 +34190,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2967 +- uid: 2966 type: DisposalPipe components: - parent: 15 @@ -34271,7 +34203,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2968 +- uid: 2967 type: DisposalPipe components: - parent: 15 @@ -34284,7 +34216,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2969 +- uid: 2968 type: DisposalPipe components: - parent: 15 @@ -34297,7 +34229,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2970 +- uid: 2969 type: DisposalPipe components: - parent: 15 @@ -34310,7 +34242,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2971 +- uid: 2970 type: DisposalPipe components: - parent: 15 @@ -34323,7 +34255,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2972 +- uid: 2971 type: DisposalPipe components: - parent: 15 @@ -34336,7 +34268,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2973 +- uid: 2972 type: DisposalPipe components: - parent: 15 @@ -34349,7 +34281,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2974 +- uid: 2973 type: DisposalPipe components: - parent: 15 @@ -34362,7 +34294,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2975 +- uid: 2974 type: DisposalPipe components: - parent: 15 @@ -34375,7 +34307,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2976 +- uid: 2975 type: DisposalPipe components: - parent: 15 @@ -34388,7 +34320,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2977 +- uid: 2976 type: DisposalPipe components: - parent: 15 @@ -34401,7 +34333,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2978 +- uid: 2977 type: DisposalPipe components: - parent: 15 @@ -34414,7 +34346,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2979 +- uid: 2978 type: DisposalPipe components: - parent: 15 @@ -34427,7 +34359,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2980 +- uid: 2979 type: DisposalPipe components: - parent: 15 @@ -34440,7 +34372,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2981 +- uid: 2980 type: DisposalPipe components: - parent: 15 @@ -34453,7 +34385,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2982 +- uid: 2981 type: DisposalUnit components: - parent: 15 @@ -34466,7 +34398,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2983 +- uid: 2982 type: DisposalPipe components: - parent: 15 @@ -34479,7 +34411,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2984 +- uid: 2983 type: DisposalPipe components: - parent: 15 @@ -34492,7 +34424,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2985 +- uid: 2984 type: DisposalPipe components: - parent: 15 @@ -34505,7 +34437,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2986 +- uid: 2985 type: DisposalPipe components: - parent: 15 @@ -34518,7 +34450,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2987 +- uid: 2986 type: DisposalPipe components: - parent: 15 @@ -34531,7 +34463,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2988 +- uid: 2987 type: DisposalPipe components: - parent: 15 @@ -34544,7 +34476,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2989 +- uid: 2988 type: DisposalPipe components: - parent: 15 @@ -34557,7 +34489,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2990 +- uid: 2989 type: DisposalPipe components: - parent: 15 @@ -34570,7 +34502,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2991 +- uid: 2990 type: DisposalPipe components: - parent: 15 @@ -34583,7 +34515,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2992 +- uid: 2991 type: DisposalUnit components: - parent: 15 @@ -34596,7 +34528,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2993 +- uid: 2992 type: DisposalPipe components: - parent: 15 @@ -34609,7 +34541,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2994 +- uid: 2993 type: DisposalPipe components: - parent: 15 @@ -34622,7 +34554,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2995 +- uid: 2994 type: DisposalPipe components: - parent: 15 @@ -34635,7 +34567,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2996 +- uid: 2995 type: DisposalPipe components: - parent: 15 @@ -34648,7 +34580,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2997 +- uid: 2996 type: DisposalPipe components: - parent: 15 @@ -34661,7 +34593,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2998 +- uid: 2997 type: DisposalPipe components: - parent: 15 @@ -34674,7 +34606,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2999 +- uid: 2998 type: DisposalPipe components: - parent: 15 @@ -34687,7 +34619,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3000 +- uid: 2999 type: DisposalPipe components: - parent: 15 @@ -34700,7 +34632,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3001 +- uid: 3000 type: DisposalPipe components: - parent: 15 @@ -34713,7 +34645,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3002 +- uid: 3001 type: DisposalPipe components: - parent: 15 @@ -34726,7 +34658,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3003 +- uid: 3002 type: DisposalPipe components: - parent: 15 @@ -34739,7 +34671,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3004 +- uid: 3003 type: DisposalPipe components: - parent: 15 @@ -34752,7 +34684,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3005 +- uid: 3004 type: DisposalPipe components: - parent: 15 @@ -34765,7 +34697,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3006 +- uid: 3005 type: DisposalPipe components: - parent: 15 @@ -34778,7 +34710,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3007 +- uid: 3006 type: DisposalBend components: - parent: 15 @@ -34791,7 +34723,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3008 +- uid: 3007 type: DisposalTrunk components: - parent: 15 @@ -34804,7 +34736,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3009 +- uid: 3008 type: DisposalPipe components: - parent: 15 @@ -34817,7 +34749,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3010 +- uid: 3009 type: DisposalPipe components: - parent: 15 @@ -34830,7 +34762,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3011 +- uid: 3010 type: DisposalBend components: - parent: 15 @@ -34842,7 +34774,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3012 +- uid: 3011 type: DisposalPipe components: - parent: 15 @@ -34855,7 +34787,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3013 +- uid: 3012 type: DisposalPipe components: - parent: 15 @@ -34868,7 +34800,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3014 +- uid: 3013 type: DisposalPipe components: - parent: 15 @@ -34880,7 +34812,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3015 +- uid: 3014 type: DisposalTrunk components: - parent: 15 @@ -34893,7 +34825,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3016 +- uid: 3015 type: DisposalPipe components: - parent: 15 @@ -34906,7 +34838,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3017 +- uid: 3016 type: DisposalPipe components: - parent: 15 @@ -34918,7 +34850,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3018 +- uid: 3017 type: DisposalTrunk components: - parent: 15 @@ -34931,7 +34863,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3019 +- uid: 3018 type: DisposalPipe components: - parent: 15 @@ -34944,7 +34876,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3020 +- uid: 3019 type: DisposalUnit components: - parent: 15 @@ -34957,7 +34889,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3021 +- uid: 3020 type: DisposalTrunk components: - parent: 15 @@ -34970,7 +34902,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3022 +- uid: 3021 type: DisposalPipe components: - parent: 15 @@ -34982,7 +34914,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3023 +- uid: 3022 type: DisposalPipe components: - parent: 15 @@ -34995,7 +34927,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3024 +- uid: 3023 type: DisposalPipe components: - parent: 15 @@ -35008,7 +34940,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3025 +- uid: 3024 type: DisposalPipe components: - parent: 15 @@ -35021,7 +34953,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3026 +- uid: 3025 type: DisposalPipe components: - parent: 15 @@ -35034,7 +34966,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3027 +- uid: 3026 type: DisposalPipe components: - parent: 15 @@ -35047,7 +34979,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3028 +- uid: 3027 type: DisposalPipe components: - parent: 15 @@ -35060,7 +34992,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3029 +- uid: 3028 type: DisposalPipe components: - parent: 15 @@ -35073,7 +35005,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3030 +- uid: 3029 type: DisposalPipe components: - parent: 15 @@ -35086,7 +35018,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3031 +- uid: 3030 type: DisposalPipe components: - parent: 15 @@ -35099,7 +35031,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3032 +- uid: 3031 type: DisposalPipe components: - parent: 15 @@ -35112,7 +35044,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3033 +- uid: 3032 type: DisposalPipe components: - parent: 15 @@ -35125,7 +35057,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3034 +- uid: 3033 type: DisposalPipe components: - parent: 15 @@ -35138,7 +35070,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3035 +- uid: 3034 type: DisposalPipe components: - parent: 15 @@ -35151,7 +35083,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3036 +- uid: 3035 type: DisposalPipe components: - parent: 15 @@ -35164,7 +35096,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3037 +- uid: 3036 type: DisposalPipe components: - parent: 15 @@ -35177,7 +35109,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3038 +- uid: 3037 type: DisposalPipe components: - parent: 15 @@ -35190,7 +35122,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3039 +- uid: 3038 type: DisposalPipe components: - parent: 15 @@ -35203,7 +35135,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3040 +- uid: 3039 type: DisposalPipe components: - parent: 15 @@ -35216,7 +35148,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3041 +- uid: 3040 type: DisposalPipe components: - parent: 15 @@ -35229,7 +35161,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3042 +- uid: 3041 type: DisposalPipe components: - parent: 15 @@ -35242,7 +35174,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3043 +- uid: 3042 type: DisposalPipe components: - parent: 15 @@ -35255,7 +35187,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3044 +- uid: 3043 type: DisposalPipe components: - parent: 15 @@ -35268,7 +35200,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3045 +- uid: 3044 type: DisposalPipe components: - parent: 15 @@ -35281,7 +35213,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3046 +- uid: 3045 type: DisposalPipe components: - parent: 15 @@ -35294,7 +35226,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3047 +- uid: 3046 type: DisposalPipe components: - parent: 15 @@ -35307,7 +35239,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3048 +- uid: 3047 type: DisposalPipe components: - parent: 15 @@ -35320,7 +35252,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3049 +- uid: 3048 type: DisposalPipe components: - parent: 15 @@ -35333,7 +35265,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3050 +- uid: 3049 type: DisposalPipe components: - parent: 15 @@ -35346,7 +35278,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3051 +- uid: 3050 type: DisposalUnit components: - parent: 15 @@ -35359,7 +35291,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3052 +- uid: 3051 type: DisposalTrunk components: - parent: 15 @@ -35372,13 +35304,13 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3053 +- uid: 3052 type: ConveyorBelt components: - parent: 15 pos: -22.5,-13.5 type: Transform -- uid: 3054 +- uid: 3053 type: DisposalPipe components: - parent: 15 @@ -35391,7 +35323,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3055 +- uid: 3054 type: DisposalPipe components: - parent: 15 @@ -35404,7 +35336,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3056 +- uid: 3055 type: DisposalPipe components: - parent: 15 @@ -35417,7 +35349,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3057 +- uid: 3056 type: DisposalPipe components: - parent: 15 @@ -35429,7 +35361,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3058 +- uid: 3057 type: DisposalUnit components: - parent: 15 @@ -35442,7 +35374,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3059 +- uid: 3058 type: DisposalTrunk components: - parent: 15 @@ -35455,7 +35387,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3060 +- uid: 3059 type: DisposalPipe components: - parent: 15 @@ -35468,7 +35400,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3061 +- uid: 3060 type: DisposalPipe components: - parent: 15 @@ -35481,7 +35413,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3062 +- uid: 3061 type: DisposalPipe components: - parent: 15 @@ -35494,7 +35426,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3063 +- uid: 3062 type: DisposalPipe components: - parent: 15 @@ -35507,7 +35439,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3064 +- uid: 3063 type: DisposalPipe components: - parent: 15 @@ -35520,7 +35452,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3065 +- uid: 3064 type: DisposalPipe components: - parent: 15 @@ -35533,7 +35465,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3066 +- uid: 3065 type: DisposalPipe components: - parent: 15 @@ -35546,7 +35478,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3067 +- uid: 3066 type: DisposalBend components: - parent: 15 @@ -35559,7 +35491,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3068 +- uid: 3067 type: DisposalPipe components: - parent: 15 @@ -35572,7 +35504,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3069 +- uid: 3068 type: DisposalPipe components: - parent: 15 @@ -35585,7 +35517,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3070 +- uid: 3069 type: DisposalPipe components: - parent: 15 @@ -35598,7 +35530,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3071 +- uid: 3070 type: DisposalPipe components: - parent: 15 @@ -35611,7 +35543,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3072 +- uid: 3071 type: DisposalPipe components: - parent: 15 @@ -35624,7 +35556,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3073 +- uid: 3072 type: DisposalPipe components: - parent: 15 @@ -35637,7 +35569,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3074 +- uid: 3073 type: DisposalPipe components: - parent: 15 @@ -35650,7 +35582,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3075 +- uid: 3074 type: DisposalPipe components: - parent: 15 @@ -35663,7 +35595,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3076 +- uid: 3075 type: DisposalPipe components: - parent: 15 @@ -35676,7 +35608,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3077 +- uid: 3076 type: DisposalPipe components: - parent: 15 @@ -35689,7 +35621,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3078 +- uid: 3077 type: DisposalPipe components: - parent: 15 @@ -35702,7 +35634,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3079 +- uid: 3078 type: DisposalPipe components: - parent: 15 @@ -35715,7 +35647,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3080 +- uid: 3079 type: DisposalPipe components: - parent: 15 @@ -35728,7 +35660,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3081 +- uid: 3080 type: DisposalPipe components: - parent: 15 @@ -35740,7 +35672,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3082 +- uid: 3081 type: DisposalUnit components: - parent: 15 @@ -35753,7 +35685,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3083 +- uid: 3082 type: DisposalTrunk components: - parent: 15 @@ -35765,7 +35697,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3084 +- uid: 3083 type: DisposalPipe components: - parent: 15 @@ -35777,7 +35709,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3085 +- uid: 3084 type: DisposalPipe components: - parent: 15 @@ -35789,7 +35721,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3086 +- uid: 3085 type: DisposalPipe components: - parent: 15 @@ -35801,7 +35733,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3087 +- uid: 3086 type: DisposalPipe components: - parent: 15 @@ -35813,7 +35745,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3088 +- uid: 3087 type: DisposalPipe components: - parent: 15 @@ -35826,7 +35758,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3089 +- uid: 3088 type: DisposalPipe components: - parent: 15 @@ -35839,7 +35771,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3090 +- uid: 3089 type: DisposalPipe components: - parent: 15 @@ -35852,7 +35784,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3091 +- uid: 3090 type: DisposalPipe components: - parent: 15 @@ -35865,7 +35797,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3092 +- uid: 3091 type: DisposalPipe components: - parent: 15 @@ -35878,7 +35810,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3093 +- uid: 3092 type: DisposalPipe components: - parent: 15 @@ -35891,7 +35823,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3094 +- uid: 3093 type: DisposalPipe components: - parent: 15 @@ -35904,7 +35836,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3095 +- uid: 3094 type: DisposalPipe components: - parent: 15 @@ -35917,7 +35849,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3096 +- uid: 3095 type: DisposalPipe components: - parent: 15 @@ -35930,7 +35862,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3097 +- uid: 3096 type: DisposalPipe components: - parent: 15 @@ -35943,7 +35875,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3098 +- uid: 3097 type: DisposalPipe components: - parent: 15 @@ -35956,7 +35888,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3099 +- uid: 3098 type: DisposalPipe components: - parent: 15 @@ -35969,7 +35901,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3100 +- uid: 3099 type: DisposalPipe components: - parent: 15 @@ -35981,7 +35913,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3101 +- uid: 3100 type: DisposalPipe components: - parent: 15 @@ -35994,7 +35926,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3102 +- uid: 3101 type: DisposalPipe components: - parent: 15 @@ -36007,7 +35939,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3103 +- uid: 3102 type: DisposalPipe components: - parent: 15 @@ -36020,7 +35952,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3104 +- uid: 3103 type: DisposalPipe components: - parent: 15 @@ -36033,7 +35965,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3105 +- uid: 3104 type: DisposalPipe components: - parent: 15 @@ -36046,7 +35978,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3106 +- uid: 3105 type: DisposalPipe components: - parent: 15 @@ -36059,7 +35991,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3107 +- uid: 3106 type: DisposalPipe components: - parent: 15 @@ -36072,7 +36004,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3108 +- uid: 3107 type: DisposalPipe components: - parent: 15 @@ -36085,7 +36017,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3109 +- uid: 3108 type: DisposalPipe components: - parent: 15 @@ -36098,7 +36030,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3110 +- uid: 3109 type: DisposalPipe components: - parent: 15 @@ -36111,7 +36043,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3111 +- uid: 3110 type: DisposalPipe components: - parent: 15 @@ -36124,7 +36056,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3112 +- uid: 3111 type: DisposalPipe components: - parent: 15 @@ -36137,7 +36069,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3113 +- uid: 3112 type: DisposalBend components: - parent: 15 @@ -36150,7 +36082,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3114 +- uid: 3113 type: DisposalUnit components: - parent: 15 @@ -36163,7 +36095,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3115 +- uid: 3114 type: DisposalTrunk components: - parent: 15 @@ -36176,7 +36108,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3116 +- uid: 3115 type: DisposalPipe components: - parent: 15 @@ -36189,7 +36121,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3117 +- uid: 3116 type: DisposalPipe components: - parent: 15 @@ -36202,7 +36134,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3118 +- uid: 3117 type: DisposalBend components: - parent: 15 @@ -36215,7 +36147,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3119 +- uid: 3118 type: DisposalPipe components: - parent: 15 @@ -36228,7 +36160,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3120 +- uid: 3119 type: DisposalPipe components: - parent: 15 @@ -36241,7 +36173,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3121 +- uid: 3120 type: DisposalPipe components: - parent: 15 @@ -36254,7 +36186,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3122 +- uid: 3121 type: DisposalPipe components: - parent: 15 @@ -36267,7 +36199,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3123 +- uid: 3122 type: DisposalPipe components: - parent: 15 @@ -36280,7 +36212,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3124 +- uid: 3123 type: DisposalPipe components: - parent: 15 @@ -36293,7 +36225,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3125 +- uid: 3124 type: DisposalPipe components: - parent: 15 @@ -36306,7 +36238,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3126 +- uid: 3125 type: DisposalUnit components: - parent: 15 @@ -36319,7 +36251,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3127 +- uid: 3126 type: DisposalTrunk components: - parent: 15 @@ -36332,7 +36264,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3128 +- uid: 3127 type: DisposalPipe components: - parent: 15 @@ -36345,7 +36277,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3129 +- uid: 3128 type: DisposalPipe components: - parent: 15 @@ -36358,7 +36290,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3130 +- uid: 3129 type: DisposalPipe components: - parent: 15 @@ -36371,7 +36303,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3131 +- uid: 3130 type: DisposalPipe components: - parent: 15 @@ -36384,7 +36316,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3132 +- uid: 3131 type: DisposalPipe components: - parent: 15 @@ -36397,7 +36329,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3133 +- uid: 3132 type: DisposalPipe components: - parent: 15 @@ -36410,7 +36342,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3134 +- uid: 3133 type: DisposalPipe components: - parent: 15 @@ -36423,13 +36355,13 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3135 +- uid: 3134 type: Recycler components: - parent: 15 pos: -21.5,-13.5 type: Transform -- uid: 3136 +- uid: 3135 type: DisposalPipe components: - parent: 15 @@ -36442,7 +36374,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3137 +- uid: 3136 type: DisposalPipe components: - parent: 15 @@ -36454,7 +36386,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3138 +- uid: 3137 type: DisposalPipe components: - parent: 15 @@ -36466,7 +36398,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3139 +- uid: 3138 type: DisposalPipe components: - parent: 15 @@ -36478,7 +36410,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3140 +- uid: 3139 type: DisposalUnit components: - parent: 15 @@ -36491,7 +36423,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3141 +- uid: 3140 type: DisposalTrunk components: - parent: 15 @@ -36504,7 +36436,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3142 +- uid: 3141 type: DisposalPipe components: - parent: 15 @@ -36517,7 +36449,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3143 +- uid: 3142 type: DisposalPipe components: - parent: 15 @@ -36530,7 +36462,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3144 +- uid: 3143 type: DisposalPipe components: - parent: 15 @@ -36543,7 +36475,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3145 +- uid: 3144 type: DisposalPipe components: - parent: 15 @@ -36556,7 +36488,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3146 +- uid: 3145 type: DisposalUnit components: - parent: 15 @@ -36569,7 +36501,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3147 +- uid: 3146 type: DisposalTrunk components: - parent: 15 @@ -36582,7 +36514,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3148 +- uid: 3147 type: DisposalPipe components: - parent: 15 @@ -36595,7 +36527,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3149 +- uid: 3148 type: DisposalPipe components: - parent: 15 @@ -36608,7 +36540,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3150 +- uid: 3149 type: DisposalPipe components: - parent: 15 @@ -36621,7 +36553,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3151 +- uid: 3150 type: DisposalUnit components: - parent: 15 @@ -36634,7 +36566,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3152 +- uid: 3151 type: DisposalTrunk components: - parent: 15 @@ -36646,7 +36578,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3153 +- uid: 3152 type: DisposalPipe components: - parent: 15 @@ -36658,7 +36590,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3154 +- uid: 3153 type: DisposalPipe components: - parent: 15 @@ -36670,7 +36602,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3155 +- uid: 3154 type: DisposalPipe components: - parent: 15 @@ -36682,7 +36614,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3156 +- uid: 3155 type: DisposalPipe components: - parent: 15 @@ -36694,7 +36626,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3157 +- uid: 3156 type: DisposalPipe components: - parent: 15 @@ -36706,7 +36638,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3158 +- uid: 3157 type: DisposalPipe components: - parent: 15 @@ -36718,7 +36650,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3159 +- uid: 3158 type: DisposalPipe components: - parent: 15 @@ -36731,7 +36663,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3160 +- uid: 3159 type: DisposalBend components: - parent: 15 @@ -36744,7 +36676,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3161 +- uid: 3160 type: DisposalUnit components: - parent: 15 @@ -36757,14 +36689,14 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3162 +- uid: 3161 type: VendingMachineYouTool components: - parent: 15 pos: -28.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3163 +- uid: 3162 type: DisposalPipe components: - parent: 15 @@ -36777,7 +36709,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3164 +- uid: 3163 type: DisposalPipe components: - parent: 15 @@ -36790,7 +36722,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3165 +- uid: 3164 type: DisposalPipe components: - parent: 15 @@ -36803,7 +36735,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3166 +- uid: 3165 type: DisposalPipe components: - parent: 15 @@ -36816,7 +36748,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3167 +- uid: 3166 type: DisposalPipe components: - parent: 15 @@ -36829,7 +36761,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3168 +- uid: 3167 type: DisposalPipe components: - parent: 15 @@ -36841,7 +36773,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3169 +- uid: 3168 type: DisposalUnit components: - parent: 15 @@ -36854,7 +36786,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3170 +- uid: 3169 type: DisposalTrunk components: - parent: 15 @@ -36867,7 +36799,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3171 +- uid: 3170 type: DisposalPipe components: - parent: 15 @@ -36880,7 +36812,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3172 +- uid: 3171 type: DisposalPipe components: - parent: 15 @@ -36893,7 +36825,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3173 +- uid: 3172 type: DisposalPipe components: - parent: 15 @@ -36906,7 +36838,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3174 +- uid: 3173 type: DisposalPipe components: - parent: 15 @@ -36919,7 +36851,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3175 +- uid: 3174 type: DisposalJunctionFlipped components: - parent: 15 @@ -36932,7 +36864,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3176 +- uid: 3175 type: DisposalJunction components: - parent: 15 @@ -36945,7 +36877,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3177 +- uid: 3176 type: DisposalJunctionFlipped components: - parent: 15 @@ -36958,7 +36890,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3178 +- uid: 3177 type: DisposalJunctionFlipped components: - parent: 15 @@ -36971,7 +36903,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3179 +- uid: 3178 type: DisposalJunction components: - parent: 15 @@ -36984,7 +36916,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3180 +- uid: 3179 type: DisposalJunction components: - parent: 15 @@ -36997,7 +36929,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3181 +- uid: 3180 type: DisposalJunctionFlipped components: - parent: 15 @@ -37009,7 +36941,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3182 +- uid: 3181 type: DisposalYJunction components: - parent: 15 @@ -37022,7 +36954,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3183 +- uid: 3182 type: DisposalJunction components: - parent: 15 @@ -37035,7 +36967,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3184 +- uid: 3183 type: DisposalJunctionFlipped components: - parent: 15 @@ -37048,7 +36980,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3185 +- uid: 3184 type: DisposalJunctionFlipped components: - parent: 15 @@ -37061,7 +36993,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3186 +- uid: 3185 type: DisposalJunction components: - parent: 15 @@ -37074,7 +37006,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3187 +- uid: 3186 type: DisposalJunctionFlipped components: - parent: 15 @@ -37087,7 +37019,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3188 +- uid: 3187 type: DisposalJunction components: - parent: 15 @@ -37100,7 +37032,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3189 +- uid: 3188 type: DisposalJunction components: - parent: 15 @@ -37113,7 +37045,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3190 +- uid: 3189 type: DisposalJunctionFlipped components: - parent: 15 @@ -37126,7 +37058,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3191 +- uid: 3190 type: ConveyorSwitch components: - parent: 15 @@ -37136,7 +37068,7 @@ entities: - conveyors: [] switches: [] type: ConveyorSwitch -- uid: 3192 +- uid: 3191 type: DisposalPipe components: - parent: 15 @@ -37148,7 +37080,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3193 +- uid: 3192 type: DisposalBend components: - parent: 15 @@ -37161,7 +37093,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3194 +- uid: 3193 type: DisposalBend components: - parent: 15 @@ -37173,7 +37105,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3195 +- uid: 3194 type: Beaker components: - parent: 15 @@ -37182,7 +37114,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 3196 +- uid: 3195 type: LargeBeaker components: - parent: 15 @@ -37191,16 +37123,980 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 3197 +- uid: 3196 type: ConveyorBelt components: - parent: 15 pos: -23.5,-13.5 type: Transform -- uid: 3198 +- uid: 3197 type: AirlockMaintCargo components: - parent: 15 pos: -24.5,-12.5 type: Transform +- uid: 3198 + type: SignDirectionalSupply + components: + - parent: 15 + pos: -25.704908,7.5 + rot: 1.5707963267948966 rad + type: Transform +- uid: 3199 + type: SignDirectionalEvac + components: + - parent: 15 + pos: -20.488556,6.5 + rot: 1.5707963267948966 rad + type: Transform +- uid: 3200 + type: LowWall + components: + - parent: 15 + pos: 21.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3201 + type: LowWall + components: + - parent: 15 + pos: 21.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3202 + type: solid_wall + components: + - parent: 15 + pos: 18.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3203 + type: solid_wall + components: + - parent: 15 + pos: 24.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3204 + type: SignCargoDock + components: + - parent: 15 + pos: 18.501179,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3205 + type: SignChem + components: + - parent: 15 + pos: 14.317627,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3206 + type: SignEVA + components: + - parent: 15 + pos: 10.691145,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3207 + type: Poweredlight + components: + - parent: 15 + pos: 28.73304,7 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3208 + type: SignToolStorage + components: + - parent: 15 + pos: -26.694574,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3209 + type: SignGravity + components: + - parent: 15 + pos: 48.325787,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3210 + type: SignMedical + components: + - parent: 15 + pos: 6.500677,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3211 + type: SignRND + components: + - parent: 15 + pos: -5.506548,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3212 + type: Poweredlight + components: + - parent: 15 + pos: -15.231159,-17 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3213 + type: Poweredlight + components: + - parent: 15 + pos: -25.939785,7 + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3214 + type: SignBridge + components: + - parent: 15 + pos: 5.6507263,22.5 + type: Transform +- uid: 3215 + type: SignDirectionalEng + components: + - parent: 15 + pos: 5.987236,6.2578936 + type: Transform +- uid: 3216 + type: PlaqueZum + components: + - parent: 15 + pos: 33.498077,11.399912 + rot: 1.5707963267948966 rad + type: Transform +- uid: 3217 + type: Poweredlight + components: + - parent: 15 + pos: 49.53657,5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3218 + type: Poweredlight + components: + - parent: 15 + pos: -10,13.5 + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3219 + type: Poweredlight + components: + - parent: 15 + pos: 41.000477,14 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3220 + type: SignEngineering + components: + - parent: 15 + pos: 30.305984,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3221 + type: Table + components: + - parent: 15 + pos: -14.5,21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3222 + type: Table + components: + - parent: 15 + pos: -13.5,21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3223 + type: Table + components: + - parent: 15 + pos: -14.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3224 + type: TaserGun + components: + - parent: 15 + pos: -13.672081,21.719378 + rot: -1.5707963267948966 rad + type: Transform + - type: BatteryBarrel + - anchored: False + type: Collidable + - containers: + BatteryBarrel-powercell-container: + entities: + - 3225 + type: Content.Server.GameObjects.ContainerSlot + BatteryBarrel-ammo-container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3225 + type: PowerCellSmallStandard + components: + - parent: 3224 + type: Transform + - startingCharge: 1000 + type: PowerCell + - anchored: False + type: Collidable +- uid: 3226 + type: TaserGun + components: + - parent: 15 + pos: -14.515831,21.735003 + rot: -1.5707963267948966 rad + type: Transform + - type: BatteryBarrel + - anchored: False + type: Collidable + - containers: + BatteryBarrel-powercell-container: + entities: + - 3227 + type: Content.Server.GameObjects.ContainerSlot + BatteryBarrel-ammo-container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3227 + type: PowerCellSmallStandard + components: + - parent: 3226 + type: Transform + - startingCharge: 1000 + type: PowerCell + - anchored: False + type: Collidable +- uid: 3228 + type: Stunbaton + components: + - parent: 15 + pos: -14.609581,20.969378 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - containers: + stunbaton_cell_container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3229 + type: Stunbaton + components: + - parent: 15 + pos: -14.484581,20.641253 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - containers: + stunbaton_cell_container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3230 + type: Chair + components: + - parent: 15 + pos: 8.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3231 + type: Chair + components: + - parent: 15 + pos: 9.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3232 + type: Chair + components: + - parent: 15 + pos: 10.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3233 + type: S + components: + - parent: 15 + pos: -9.816995,-25.23114 + type: Transform + - anchored: False + type: Collidable +- uid: 3234 + type: HatHardhatRed + components: + - parent: 15 + pos: 31.201477,-4.05181 + type: Transform + - anchored: False + type: Collidable +- uid: 3235 + type: HatHardhatWhite + components: + - parent: 15 + pos: 31.623352,-4.14556 + type: Transform + - anchored: False + type: Collidable +- uid: 3236 + type: HatHardhatYellow + components: + - parent: 15 + pos: 31.357727,-4.36431 + type: Transform + - anchored: False + type: Collidable +- uid: 3237 + type: FlashlightLantern + components: + - parent: 15 + pos: 30.545227,-4.17681 + type: Transform + - anchored: False + type: Collidable + - containers: + flashlight_cell_container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3238 + type: FlashlightLantern + components: + - parent: 15 + pos: 30.248352,-4.36431 + type: Transform + - anchored: False + type: Collidable + - containers: + flashlight_cell_container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3239 + type: RandHandTele + components: + - parent: 15 + pos: 8.379866,26.654026 + type: Transform + - anchored: False + type: Collidable +- uid: 3240 + type: DrinkHotCoffee + components: + - parent: 15 + pos: 8.661116,25.513401 + type: Transform + - caps: PourIn, PourOut, Injectable + type: Solution + - anchored: False + type: Collidable +- uid: 3241 + type: Paper + components: + - parent: 15 + pos: 8.379866,25.982151 + type: Transform + - anchored: False + type: Collidable +- uid: 3242 + type: SignAtmos + components: + - parent: 15 + pos: 31.498556,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3243 + type: SignSomethingOld + components: + - parent: 15 + pos: 17.158585,-23.619913 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3244 + type: SignSomethingOld2 + components: + - parent: 15 + pos: 24.996767,-0.60842 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3245 + type: Basketball + components: + - parent: 15 + pos: -1.5183675,-6.4951944 + type: Transform + - anchored: False + type: Collidable +- uid: 3246 + type: WaterTankFull + components: + - parent: 15 + pos: 0.5,-11.5 + type: Transform + - anchored: False + type: Collidable +- uid: 3247 + type: WeldingFuelTank + components: + - parent: 15 + pos: -1.5,-11.5 + type: Transform + - anchored: False + type: Collidable +- uid: 3248 + type: RCD + components: + - parent: 15 + pos: 29.4025,-4.489469 + type: Transform + - anchored: False + type: Collidable +- uid: 3249 + type: RCD + components: + - parent: 15 + pos: 29.55875,-4.333219 + type: Transform + - anchored: False + type: Collidable +- uid: 3250 + type: MaskJoy + components: + - parent: 15 + pos: -9.360208,-25.487799 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3251 + type: Brutepack + components: + - parent: 15 + pos: 6.839255,-3.3712535 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3252 + type: solid_wall + components: + - parent: 15 + pos: -25.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3253 + type: solid_wall + components: + - parent: 15 + pos: -25.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3254 + type: solid_wall + components: + - parent: 15 + pos: -25.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3255 + type: solid_wall + components: + - parent: 15 + pos: -25.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3256 + type: solid_wall + components: + - parent: 15 + pos: -25.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3257 + type: solid_wall + components: + - parent: 15 + pos: -24.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3258 + type: solid_wall + components: + - parent: 15 + pos: -23.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3259 + type: solid_wall + components: + - parent: 15 + pos: -22.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3260 + type: LowWall + components: + - parent: 15 + pos: 26.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3261 + type: LowWall + components: + - parent: 15 + pos: 27.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3262 + type: LowWall + components: + - parent: 15 + pos: 28.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3263 + type: ReinforcedWindow + components: + - parent: 15 + pos: 26.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3264 + type: ReinforcedWindow + components: + - parent: 15 + pos: 27.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3265 + type: ReinforcedWindow + components: + - parent: 15 + pos: 28.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3266 + type: Table + components: + - parent: 15 + pos: -3.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3267 + type: Table + components: + - parent: 15 + pos: -2.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3268 + type: Table + components: + - parent: 15 + pos: -2.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3269 + type: Table + components: + - parent: 15 + pos: -3.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3270 + type: Bling + components: + - parent: 15 + pos: -2.564289,18.643616 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3271 + type: Bling + components: + - parent: 15 + pos: -2.861164,18.612366 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3272 + type: GoldStack + components: + - parent: 15 + pos: -3.064289,16.53424 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3273 + type: GoldStack + components: + - parent: 15 + pos: -2.861164,16.72174 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3274 + type: GoldStack + components: + - parent: 15 + pos: -2.673664,16.72174 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3275 + type: GoldStack + components: + - parent: 15 + pos: -2.611164,16.549866 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3276 + type: GoldStack + components: + - parent: 15 + pos: -2.798664,16.424866 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3277 + type: GoldStack + components: + - parent: 15 + pos: -2.283039,16.518616 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3278 + type: GoldStack + components: + - parent: 15 + pos: -2.439289,16.72174 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3279 + type: GoldStack + components: + - parent: 15 + pos: -2.579914,16.362366 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3280 + type: DrinkGoldenCup + components: + - parent: 15 + pos: -3.470539,16.956116 + rot: -1.5707963267948966 rad + type: Transform + - caps: PourIn, PourOut, Injectable + type: Solution + - anchored: False + type: Collidable +- uid: 3281 + type: ToolboxGoldFilled + components: + - parent: 15 + pos: -3.454914,18.643616 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - containers: + storagebase: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 3282 + type: metal_wall + components: + - parent: 15 + pos: 13.293709,-8.309891 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3283 + type: PlushieCarp + components: + - parent: 15 + pos: -4.7375913,-3.3900535 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3284 + type: PowerCellRecharger + components: + - parent: 15 + pos: 39.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - containers: + PowerCellCharger-powerCellContainer: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3285 + type: LockerCursed + components: + - parent: 15 + pos: -8.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 3286 + type: hemostat + components: + - parent: 15 + pos: 19.655668,-21.300453 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3287 + type: Bed + components: + - parent: 15 + pos: 18.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3288 + type: BedsheetMedical + components: + - parent: 15 + pos: 18.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3289 + type: drill + components: + - parent: 15 + pos: 19.515043,-22.566078 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3290 + type: SignSurgery + components: + - parent: 15 + pos: 18.296293,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3291 + type: ToyMouse + components: + - parent: 15 + pos: 31.376545,-7.1625524 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3292 + type: retractor + components: + - parent: 15 + pos: 19.482815,-21.853302 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3293 + type: DisgustingSweptSoup + components: + - parent: 15 + pos: -14.96041,24.545767 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3294 + type: DrinkBottleRum + components: + - parent: 15 + pos: -15.694785,24.608267 + rot: -1.5707963267948966 rad + type: Transform + - caps: PourIn, PourOut, Injectable + type: Solution + - anchored: False + type: Collidable +- uid: 3295 + type: scalpel + components: + - parent: 15 + pos: 19.190952,-21.29313 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3296 + type: ToyPhazon + components: + - parent: 15 + pos: 9.449931,16.636608 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3297 + type: FoodMint + components: + - parent: 15 + pos: -2.776661,-3.3271997 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3298 + type: GlovesLatex + components: + - parent: 15 + pos: 21.618128,-4.4133806 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3299 + type: GlovesLatex + components: + - parent: 15 + pos: 22.086878,-4.4133806 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3300 + type: JawsOfLife + components: + - parent: 15 + pos: 39.53893,-0.77325034 + rot: -1.5707963267948966 rad + type: Transform + - useSound: /Audio/Items/jaws_pry.ogg + type: Tool + - anchored: False + type: Collidable +- uid: 3301 + type: ShoesCoder + components: + - parent: 15 + pos: 47.437466,-6.6893435 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3302 + type: bone_saw + components: + - parent: 15 + pos: 19.49593,-21.552101 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3303 + type: Table + components: + - parent: 15 + pos: -19.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3304 + type: Poweredlight + components: + - parent: 15 + pos: -18.5,-7 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3305 + type: FoodBanana + components: + - parent: 15 + pos: -19.728624,-9.576498 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3306 + type: FoodBanana + components: + - parent: 15 + pos: -19.603624,-9.388998 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3307 + type: FoodBanana + components: + - parent: 15 + pos: -19.463,-9.482748 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3308 + type: FoodBananaCreamPie + components: + - parent: 15 + pos: -18.947374,-9.467123 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3309 + type: FoodBananaCreamPie + components: + - parent: 15 + pos: -18.509874,-9.279623 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable ... diff --git a/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml b/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml index 6e8200cf27..ad88ad239f 100644 --- a/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml +++ b/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml @@ -4,6 +4,7 @@ description: It opens, it closes, and maybe crushes you. components: - type: Clickable + - type: RCDDeconstructWhitelist - type: InteractionOutline - type: Sprite netsync: false diff --git a/Resources/Prototypes/Entities/Constructible/Ground/table.yml b/Resources/Prototypes/Entities/Constructible/Ground/table.yml index ed324df1d3..8c28f0aef9 100644 --- a/Resources/Prototypes/Entities/Constructible/Ground/table.yml +++ b/Resources/Prototypes/Entities/Constructible/Ground/table.yml @@ -16,7 +16,7 @@ shapes: - !type:PhysShapeAabb layer: - - SmallImpassable + - VaultImpassable - type: SnapGrid offset: Center - type: IconSmooth diff --git a/Resources/Prototypes/Entities/Constructible/Power/vending_machines.yml b/Resources/Prototypes/Entities/Constructible/Power/vending_machines.yml index c53aa0cc93..83b0f92fa1 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/vending_machines.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/vending_machines.yml @@ -1,6 +1,7 @@ - type: entity id: VendingMachine name: vending machine + abstract: true components: - type: Physics anchored: true @@ -8,14 +9,10 @@ - type: InteractionOutline - type: Sprite sprite: Constructible/Power/VendingMachines/empty.rsi - layers: - - state: normal - map: ["enum.VendingMachineVisualLayers.Base"] - - texture: Constructible/Power/VendingMachines/maintenance_panel.png - map: ["enum.WiresVisualLayers.MaintenancePanel"] + netsync: false - type: Icon sprite: Constructible/Power/VendingMachines/empty.rsi - state: normal + state: "off" - type: Collidable shapes: - !type:PhysShapeAabb @@ -35,10 +32,6 @@ offset: Center - type: Damageable - type: Breakable - - type: Appearance - visuals: - - type: VendingMachineVisualizer - - type: WiresVisualizer - type: UserInterface interfaces: - key: enum.VendingMachineUiKey.Key @@ -63,6 +56,20 @@ sprite: Constructible/Power/VendingMachines/boozeomat.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/boozeomat.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - texture: Constructible/Power/VendingMachines/maintenance_panel.png + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -75,6 +82,22 @@ sprite: Constructible/Power/VendingMachines/cart.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/cart.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - state: panel + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + ejectUnshaded: true + denyUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -87,6 +110,21 @@ sprite: Constructible/Power/VendingMachines/chapel.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/chapel.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - texture: Constructible/Power/VendingMachines/maintenance_panel.png + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + denyUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -99,6 +137,22 @@ sprite: Constructible/Power/VendingMachines/cigs.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/cigs.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - state: panel + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + ejectUnshaded: true + denyUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -112,13 +166,25 @@ - type: Sprite sprite: Constructible/Power/VendingMachines/coffee.rsi layers: - - state: normal - map: ["enum.VendingMachineVisualLayers.Base"] - - state: screen - map: ["enum.PowerDeviceVisualLayers.Powered"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] shader: unshaded - - map: ["enum.WiresVisualLayers.MaintenancePanel"] - state: panel + - state: "screen" + map: ["enum.VendingMachineVisualLayers.Screen"] + shader: unshaded + - texture: Constructible/Power/VendingMachines/maintenance_panel.png + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + screen: true + normalUnshaded: true + ejectUnshaded: true + denyUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -131,6 +197,22 @@ sprite: Constructible/Power/VendingMachines/cola.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/cola.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - state: panel + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + ejectUnshaded: true + denyUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -143,6 +225,21 @@ sprite: Constructible/Power/VendingMachines/dinnerware.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/dinnerware.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - texture: Constructible/Power/VendingMachines/maintenance_panel.png + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + ejectUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -155,6 +252,20 @@ sprite: Constructible/Power/VendingMachines/discount.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/discount.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - texture: Constructible/Power/VendingMachines/maintenance_panel.png + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -167,6 +278,22 @@ sprite: Constructible/Power/VendingMachines/engivend.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/engivend.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - state: panel + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + ejectUnshaded: true + denyUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -179,6 +306,20 @@ sprite: Constructible/Power/VendingMachines/hats.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/hats.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - texture: Constructible/Power/VendingMachines/maintenance_panel.png + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -191,6 +332,20 @@ sprite: Constructible/Power/VendingMachines/magivend.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/magivend.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - texture: Constructible/Power/VendingMachines/maintenance_panel.png + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -203,6 +358,22 @@ sprite: Constructible/Power/VendingMachines/medical.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/medical.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - state: panel + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + ejectUnshaded: true + denyUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -215,6 +386,21 @@ sprite: Constructible/Power/VendingMachines/mining.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/mining.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - texture: Constructible/Power/VendingMachines/maintenance_panel.png + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + denyUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -227,6 +413,22 @@ sprite: Constructible/Power/VendingMachines/nutri.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/nutri.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - texture: Constructible/Power/VendingMachines/maintenance_panel.png + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + ejectUnshaded: true + denyUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -239,6 +441,21 @@ sprite: Constructible/Power/VendingMachines/robotics.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/robotics.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - texture: Constructible/Power/VendingMachines/maintenance_panel.png + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + denyUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -251,6 +468,21 @@ sprite: Constructible/Power/VendingMachines/sale.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/sale.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - texture: Constructible/Power/VendingMachines/maintenance_panel.png + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + broken: true + brokenUnshaded: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -263,6 +495,22 @@ sprite: Constructible/Power/VendingMachines/sec.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/sec.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - state: panel + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + ejectUnshaded: true + denyUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -275,6 +523,21 @@ sprite: Constructible/Power/VendingMachines/seeds.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/seeds.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - texture: Constructible/Power/VendingMachines/maintenance_panel.png + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + ejectUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -287,6 +550,20 @@ sprite: Constructible/Power/VendingMachines/shoes.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/shoes.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - texture: Constructible/Power/VendingMachines/maintenance_panel.png + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -299,6 +576,20 @@ sprite: Constructible/Power/VendingMachines/smartfridge.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/smartfridge.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - texture: Constructible/Power/VendingMachines/maintenance_panel.png + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -311,6 +602,22 @@ sprite: Constructible/Power/VendingMachines/snack.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/snack.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - state: panel + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + ejectUnshaded: true + denyUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -323,6 +630,22 @@ sprite: Constructible/Power/VendingMachines/sovietsoda.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/sovietsoda.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - state: panel + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + ejectUnshaded: true + denyUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -335,6 +658,20 @@ sprite: Constructible/Power/VendingMachines/suits.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/suits.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - texture: Constructible/Power/VendingMachines/maintenance_panel.png + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -347,6 +684,26 @@ sprite: Constructible/Power/VendingMachines/theater.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/theater.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - state: panel + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - state: "screen" + map: ["enum.VendingMachineVisualLayers.Screen"] + shader: unshaded + - type: Appearance + visuals: + - type: VendingMachineVisualizer + screen: true + normalUnshaded: true + ejectUnshaded: true + denyUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -359,6 +716,23 @@ sprite: Constructible/Power/VendingMachines/vendomat.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/vendomat.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - state: panel + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + eject: true + ejectUnshaded: true + denyUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -371,6 +745,20 @@ sprite: Constructible/Power/VendingMachines/vox.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/vox.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - texture: Constructible/Power/VendingMachines/maintenance_panel.png + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -383,6 +771,21 @@ sprite: Constructible/Power/VendingMachines/wallmed.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/wallmed.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - texture: Constructible/Power/VendingMachines/maintenance_panel.png + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + denyUnshaded: true + broken: true + - type: WiresVisualizer - type: entity parent: VendingMachine @@ -395,3 +798,22 @@ sprite: Constructible/Power/VendingMachines/youtool.rsi - type: Sprite sprite: Constructible/Power/VendingMachines/youtool.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Unlit"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.Base"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - state: panel + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Appearance + visuals: + - type: VendingMachineVisualizer + normalUnshaded: true + eject: true + ejectUnshaded: true + denyUnshaded: true + broken: true + - type: WiresVisualizer diff --git a/Resources/Prototypes/Entities/Constructible/Storage/Closets/closet.yml b/Resources/Prototypes/Entities/Constructible/Storage/Closets/closet.yml index 19d0a25958..2833854a0d 100644 --- a/Resources/Prototypes/Entities/Constructible/Storage/Closets/closet.yml +++ b/Resources/Prototypes/Entities/Constructible/Storage/Closets/closet.yml @@ -32,7 +32,6 @@ - SmallImpassable layer: - Opaque - - Impassable - MobImpassable - VaultImpassable - SmallImpassable diff --git a/Resources/Prototypes/Entities/Constructible/Storage/crate_base.yml b/Resources/Prototypes/Entities/Constructible/Storage/crate_base.yml index 10b4afb31a..711f2f4ac9 100644 --- a/Resources/Prototypes/Entities/Constructible/Storage/crate_base.yml +++ b/Resources/Prototypes/Entities/Constructible/Storage/crate_base.yml @@ -26,9 +26,7 @@ - SmallImpassable layer: - Opaque - - Impassable - MobImpassable - - VaultImpassable - SmallImpassable IsScrapingFloor: true - type: Physics diff --git a/Resources/Prototypes/Entities/Constructible/Walls/low_wall.yml b/Resources/Prototypes/Entities/Constructible/Walls/low_wall.yml index 230c66d1d3..c381fae699 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/low_wall.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/low_wall.yml @@ -8,6 +8,7 @@ - Wall components: - type: Clickable + - type: RCDDeconstructWhitelist - type: InteractionOutline - type: Sprite netsync: false @@ -20,7 +21,9 @@ - type: Collidable shapes: - !type:PhysShapeAabb - layer: [SmallImpassable, MobImpassable] + layer: + - VaultImpassable + - SmallImpassable - type: Damageable - type: Destructible thresholdvalue: 100 diff --git a/Resources/Prototypes/Entities/Constructible/Walls/signs.yml b/Resources/Prototypes/Entities/Constructible/Walls/signs.yml new file mode 100644 index 0000000000..3d9cb3c09f --- /dev/null +++ b/Resources/Prototypes/Entities/Constructible/Walls/signs.yml @@ -0,0 +1,1086 @@ +- type: entity + id: BaseSign + name: base sign + abstract: true + components: + - type: Clickable + - type: InteractionOutline + - type: Collidable + shapes: + - !type:PhysShapeAabb + - type: Damageable + - type: Destructible + thresholdvalue: 5 + - type: Sprite + drawdepth: WallTops + sprite: Constructible/Misc/decals.rsi + - type: Icon + sprite: Constructible/Misc/decals.rsi + +# These signs would not have collision otherwise, they simply +# need collision in order for them to be destructible. Once the +# SmallImpassable etc. stuff actually gets implemented in this +# shitheap of a videogame bother swept to go back and fix these. + +- type: entity + parent: BaseSign + id: PaintingMonkey + name: monkey painting + description: monky + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.1,-0.4,0.1,0.4" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: monkey_painting + - type: Icon + state: monkey_painting + +# Directional Station Guide Signs + +- type: entity + parent: BaseSign + id: SignDirectionalSec + name: sec sign + description: A direction sign, pointing out which way Security is. + components: + - type: Rotatable + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.1,-0.4,0.1,0.4" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: direction_sec + - type: Icon + state: direction_sec + +- type: entity + parent: BaseSign + id: SignDirectionalEvac + name: evac sign + description: A direction sign, pointing out which way evac is. + components: + - type: Rotatable + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.1,-0.4,0.1,0.4" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: direction_evac + - type: Icon + state: direction_evac + +- type: entity + parent: BaseSign + id: SignDirectionalBridge + name: bridge sign + description: A direction sign, pointing out which way the Bridge is. + components: + - type: Rotatable + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.1,-0.4,0.1,0.4" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: direction_bridge + - type: Icon + state: direction_bridge + +- type: entity + parent: BaseSign + id: SignDirectionalMed + name: medical sign + description: A direction sign, pointing out which way the Medical department is. + components: + - type: Rotatable + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.1,-0.4,0.1,0.4" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: direction_med + - type: Icon + state: direction_med + +- type: entity + parent: BaseSign + id: SignDirectionalEng + name: engineering sign + description: A direction sign, pointing out which way the Engineering department is. + components: + - type: Rotatable + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.1,-0.4,0.1,0.4" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: direction_eng + - type: Icon + state: direction_eng + +- type: entity + parent: BaseSign + id: SignDirectionalSci + name: science sign + description: A direction sign, pointing out which way the Science department is. + components: + - type: Rotatable + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.1,-0.4,0.1,0.4" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: direction_sci + - type: Icon + state: direction_sci + +- type: entity + parent: BaseSign + id: SignDirectionalSupply + name: supply sign + description: A direction sign, pointing to some supplies. + components: + - type: Rotatable + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.1,-0.4,0.1,0.4" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: direction_supply + - type: Icon + state: direction_supply + +# Regular Signs + +- type: entity + parent: BaseSign + id: SignArmory + name: armory sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: armory + - type: Icon + state: armory + +- type: entity + parent: BaseSign + id: SignToolStorage + name: tool storage sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: ass + - type: Icon + state: ass + +- type: entity + parent: BaseSign + id: SignAnomaly + name: anomaly lab sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: anomaly + - type: Icon + state: anomaly + +- type: entity + parent: BaseSign + id: SignAtmos + name: atmos sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: atmos + - type: Icon + state: atmos + +- type: entity + parent: BaseSign + id: SignBar + name: bar sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: bar + - type: Icon + state: bar + +- type: entity + parent: BaseSign + id: SignLibrary + name: library sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: biblio + - type: Icon + state: biblio + +- type: entity + parent: BaseSign + id: SignChapel + name: chapel sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: chapel + - type: Icon + state: chapel + +- type: entity + parent: BaseSign + id: SignHead + name: head sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: commander + - type: Icon + state: commander + +- type: entity + parent: BaseSign + id: SignConference + name: conference room sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: conference_room + - type: Icon + state: conference_room + +- type: entity + parent: BaseSign + id: SignDrones + name: drones sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: drones + - type: Icon + state: drones + +- type: entity + parent: BaseSign + id: SignEngine + name: engine sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: engine + - type: Icon + state: engine + +- type: entity + parent: BaseSign + id: SignCloning + name: cloning sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: cloning + - type: Icon + state: cloning + +- type: entity + parent: BaseSign + id: SignInterrogation + name: interrogation sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: interrogation + - type: Icon + state: interrogation + +- type: entity + parent: BaseSign + id: SignSurgery + name: surgery sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: surgery + - type: Icon + state: surgery + +- type: entity + parent: BaseSign + id: SignTelecomms + name: telecomms sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: telecoms + - type: Icon + state: telecoms + +- type: entity + parent: BaseSign + id: SignCargo + name: cargo sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: cargo + - type: Icon + state: cargo + +- type: entity + parent: BaseSign + id: SignCargoDock + name: cargo dock sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: cargo_dock + - type: Icon + state: cargo_dock + +- type: entity + parent: BaseSign + id: SignChem + name: chemistry sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: chem + - type: Icon + state: chem + +- type: entity + parent: BaseSign + id: SignShipDock + name: docking sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: dock + - type: Icon + state: dock + +- type: entity + parent: BaseSign + id: SignEngineering + name: engineering sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: eng + - type: Icon + state: eng + +- type: entity + parent: BaseSign + id: SignEVA + name: EVA sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: eva + - type: Icon + state: eva + +- type: entity + parent: BaseSign + id: SignGravity + name: gravity sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: gravi + - type: Icon + state: gravi + +- type: entity + parent: BaseSign + id: SignMedical + name: medbay sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: medbay + - type: Icon + state: medbay + +- type: entity + parent: BaseSign + id: SignMorgue + name: morgue sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: morgue + - type: Icon + state: morgue + +- type: entity + parent: BaseSign + id: SignPrison + name: prison sign + description: + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: prison + - type: Icon + state: prison + +- type: entity + parent: BaseSign + id: SignRND + name: research and development sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: rnd + - type: Icon + state: rnd + +- type: entity + parent: BaseSign + id: SignScience + name: science sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: sci + - type: Icon + state: sci + +- type: entity + parent: BaseSign + id: SignToxins + name: toxins sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: toxins + - type: Icon + state: toxins + +- type: entity + parent: BaseSign + id: SignBridge + name: bridge sign + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: bridge + - type: Icon + state: bridge + +# Atmos Warnings + +- type: entity + parent: BaseSign + id: WarningAir + name: air warning sign + description: WARNING! Air flow tube. Ensure the flow is disengaged before working. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.2,-0.3,0.2,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: atmos_air + - type: Icon + state: atmos_air + +- type: entity + parent: BaseSign + id: WarningCO2 + name: CO2 warning sign + description: WARNING! CO2 flow tube. Ensure the flow is disengaged before working. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.2,-0.3,0.2,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: atmos_co2 + - type: Icon + state: atmos_co2 + +- type: entity + parent: BaseSign + id: WarningN2 + name: N2 warning sign + description: WARNING! N2 flow tube. Ensure the flow is disengaged before working. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.2,-0.3,0.2,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: atmos_n2 + - type: Icon + state: atmos_n2 + +- type: entity + parent: BaseSign + id: WarningN2O + name: N2O warning sign + description: WARNING! N2O flow tube. Ensure the flow is disengaged before working. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.2,-0.3,0.2,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: atmos_n2o + - type: Icon + state: atmos_n2o + +- type: entity + parent: BaseSign + id: WarningO2 + name: O2 warning sign + description: WARNING! O2 flow tube. Ensure the flow is disengaged before working. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.2,-0.3,0.2,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: atmos_o2 + - type: Icon + state: atmos_o2 + +- type: entity + parent: BaseSign + id: WarningPhoron + name: phoron waste sign + description: WARNING! Plasma flow tube. Ensure the flow is disengaged before working. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.2,-0.3,0.2,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: atmos_phoron + - type: Icon + state: atmos_phoron + +- type: entity + parent: BaseSign + id: WarningWaste + name: atmos waste sign + description: WARNING! Waste flow tube. Ensure the flow is disengaged before working. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.2,-0.3,0.2,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: atmos_waste + - type: Icon + state: atmos_waste + +- type: entity + parent: BaseSign + id: PlaqueZum + name: zumos plaque + description: "This plaque commemorates the rise of the Atmos ZUM division. May they carry the torch that the Atmos ZAS, LINDA and FEA divisions left behind." + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.3,-0.3,0.3,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: zumosplaque + - type: Icon + state: zumosplaque + +- type: entity + parent: BaseSign + id: PlaqueAtmos + name: atmos plaque + description: "This plaque commemorates the fall of the Atmos FEA division. For all the charred, dizzy, and brittle men who have died in its hands." + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.3,-0.3,0.3,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: atmosplaque + - type: Icon + state: atmosplaque + +- type: entity + parent: BaseSign + id: SignSmoking + name: no smoking sign + description: A warning sign which reads 'NO SMOKING' + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: nosmoking2 + - type: Icon + state: nosmoking2 + +- type: entity + parent: BaseSign + id: SignSomethingOld + name: old sign + description: Technical information of some sort, shame its too worn-out to read. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: something-old1 + - type: Icon + state: something-old1 + +- type: entity + parent: BaseSign + id: SignSomethingOld2 + name: old sign + description: Looks like a planet crashing by some station above it. Its kinda scary. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - Clickable + - type: Sprite + state: something-old2 + - type: Icon + state: something-old2 diff --git a/Resources/Prototypes/Entities/Constructible/Walls/walls.yml b/Resources/Prototypes/Entities/Constructible/Walls/walls.yml index 2ba3947118..7f82a01ce2 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/walls.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/walls.yml @@ -8,6 +8,7 @@ snap: - Wall components: + - type: RCDDeconstructWhitelist - type: Clickable - type: InteractionOutline - type: Sprite diff --git a/Resources/Prototypes/Entities/Constructible/Walls/windows.yml b/Resources/Prototypes/Entities/Constructible/Walls/windows.yml index dbb604d2ed..280139d3e6 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/windows.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/windows.yml @@ -8,6 +8,7 @@ - Window components: - type: Clickable + - type: RCDDeconstructWhitelist - type: InteractionOutline - type: Sprite color: "#DDDDDD" diff --git a/Resources/Prototypes/Entities/Mobs/Player/observer.yml b/Resources/Prototypes/Entities/Mobs/Player/observer.yml index eba5ba58d4..4b6fea353d 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/observer.yml @@ -7,6 +7,12 @@ - type: Mind - type: Physics mass: 5 + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.35,-0.35,0.35,0.35" + mask: + - GhostImpassable - type: Eye zoom: 0.5, 0.5 drawFov: false diff --git a/Resources/Prototypes/Entities/Mobs/Species/human.yml b/Resources/Prototypes/Entities/Mobs/Species/human.yml index 5118d9606e..9259c28043 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/human.yml @@ -113,7 +113,6 @@ - Impassable - MobImpassable - VaultImpassable - - SmallImpassable layer: - Opaque - MobImpassable @@ -145,6 +144,12 @@ - type: Pullable - type: CanSeeGases - type: DoAfter + - type: Strippable + - type: UserInterface + interfaces: + - key: enum.StrippingUiKey.Key + type: StrippableBoundUserInterface + - type: entity save: false diff --git a/Resources/Prototypes/Entities/Objects/Tools/tools.yml b/Resources/Prototypes/Entities/Objects/Tools/tools.yml index ef5191d36c..51df8c6cac 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/tools.yml @@ -249,7 +249,7 @@ name: RCD parent: BaseItem id: RCD - description: An advanced construction device which can place floors / walls down quickly. + description: An advanced construction device which can place/remove walls, floors, and airlocks quickly. components: - type: RCD - type: UseDelay @@ -262,3 +262,17 @@ state: rcd - type: Item sprite: Objects/Tools/rcd.rsi + +- type: entity + name: RCD Ammo + parent: BaseItem + id: RCDAmmo + description: Ammo cartridge for an RCD. + components: + - type: RCDAmmo + - type: Sprite + sprite: Objects/Tools/rcd.rsi + state: rcd_ammo + - type: Icon + sprite: Objects/Tools/rcd.rsi + state: rcd_ammo diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index 4e810bdb1b..0aac56f67c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -23,8 +23,6 @@ mask: - Impassable - MobImpassable - - VaultImpassable - - SmallImpassable - type: Physics edgeslide: false - type: Projectile diff --git a/Resources/Prototypes/Entities/radiation.yml b/Resources/Prototypes/Entities/radiation.yml new file mode 100644 index 0000000000..81d20ca718 --- /dev/null +++ b/Resources/Prototypes/Entities/radiation.yml @@ -0,0 +1,7 @@ +- type: entity + name: shimmering anomaly + id: RadiationPulse + abstract: true + description: Looking at this anomaly makes you feel strange, like something is pushing at your eyes. + components: + - type: RadiationPulse \ No newline at end of file diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/ai.png b/Resources/Textures/Constructible/Misc/decals.rsi/ai.png new file mode 100644 index 0000000000..6cee540a6b Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/ai.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/anomaly.png b/Resources/Textures/Constructible/Misc/decals.rsi/anomaly.png new file mode 100644 index 0000000000..e5b69da718 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/anomaly.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/armory.png b/Resources/Textures/Constructible/Misc/decals.rsi/armory.png new file mode 100644 index 0000000000..671e57aa5c Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/armory.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/ass.png b/Resources/Textures/Constructible/Misc/decals.rsi/ass.png new file mode 100644 index 0000000000..0dfa8a04f5 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/ass.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/atmos.png b/Resources/Textures/Constructible/Misc/decals.rsi/atmos.png new file mode 100644 index 0000000000..9441b32827 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/atmos.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/atmos_air.png b/Resources/Textures/Constructible/Misc/decals.rsi/atmos_air.png new file mode 100644 index 0000000000..51cd12d4b7 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/atmos_air.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/atmos_co2.png b/Resources/Textures/Constructible/Misc/decals.rsi/atmos_co2.png new file mode 100644 index 0000000000..18b0946674 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/atmos_co2.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/atmos_n2.png b/Resources/Textures/Constructible/Misc/decals.rsi/atmos_n2.png new file mode 100644 index 0000000000..c42e10fcec Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/atmos_n2.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/atmos_n2o.png b/Resources/Textures/Constructible/Misc/decals.rsi/atmos_n2o.png new file mode 100644 index 0000000000..9fd3f5d84c Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/atmos_n2o.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/atmos_o2.png b/Resources/Textures/Constructible/Misc/decals.rsi/atmos_o2.png new file mode 100644 index 0000000000..c4c98d27cd Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/atmos_o2.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/atmos_phoron.png b/Resources/Textures/Constructible/Misc/decals.rsi/atmos_phoron.png new file mode 100644 index 0000000000..8d47135dee Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/atmos_phoron.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/atmos_waste.png b/Resources/Textures/Constructible/Misc/decals.rsi/atmos_waste.png new file mode 100644 index 0000000000..6649918af0 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/atmos_waste.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/atmosplaque.png b/Resources/Textures/Constructible/Misc/decals.rsi/atmosplaque.png new file mode 100644 index 0000000000..415a822dc4 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/atmosplaque.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/bar.png b/Resources/Textures/Constructible/Misc/decals.rsi/bar.png new file mode 100644 index 0000000000..e5fb2ab766 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/bar.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/biblio.png b/Resources/Textures/Constructible/Misc/decals.rsi/biblio.png new file mode 100644 index 0000000000..ae86efe496 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/biblio.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/bio.png b/Resources/Textures/Constructible/Misc/decals.rsi/bio.png new file mode 100644 index 0000000000..5bf9483bc7 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/bio.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/biohazard.png b/Resources/Textures/Constructible/Misc/decals.rsi/biohazard.png new file mode 100644 index 0000000000..2e8a7a6bf3 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/biohazard.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/bridge.png b/Resources/Textures/Constructible/Misc/decals.rsi/bridge.png new file mode 100644 index 0000000000..e34d8cf8f2 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/bridge.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/canisters.png b/Resources/Textures/Constructible/Misc/decals.rsi/canisters.png new file mode 100644 index 0000000000..8f129cf906 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/canisters.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/cargo.png b/Resources/Textures/Constructible/Misc/decals.rsi/cargo.png new file mode 100644 index 0000000000..bf0176ea97 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/cargo.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/cargo_dock.png b/Resources/Textures/Constructible/Misc/decals.rsi/cargo_dock.png new file mode 100644 index 0000000000..df7ee4cf11 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/cargo_dock.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/chapel.png b/Resources/Textures/Constructible/Misc/decals.rsi/chapel.png new file mode 100644 index 0000000000..635f00ec53 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/chapel.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/chem.png b/Resources/Textures/Constructible/Misc/decals.rsi/chem.png new file mode 100644 index 0000000000..71739f2d4a Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/chem.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/chemistry1.png b/Resources/Textures/Constructible/Misc/decals.rsi/chemistry1.png new file mode 100644 index 0000000000..d1c1ac9184 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/chemistry1.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/chemistry2.png b/Resources/Textures/Constructible/Misc/decals.rsi/chemistry2.png new file mode 100644 index 0000000000..f9864f7d44 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/chemistry2.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/cloning.png b/Resources/Textures/Constructible/Misc/decals.rsi/cloning.png new file mode 100644 index 0000000000..ecbc9370c1 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/cloning.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/commander.png b/Resources/Textures/Constructible/Misc/decals.rsi/commander.png new file mode 100644 index 0000000000..d66b76011f Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/commander.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/conference_room.png b/Resources/Textures/Constructible/Misc/decals.rsi/conference_room.png new file mode 100644 index 0000000000..c3d20f31b8 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/conference_room.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/corrosives.png b/Resources/Textures/Constructible/Misc/decals.rsi/corrosives.png new file mode 100644 index 0000000000..66390ecb96 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/corrosives.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/cryogenics.png b/Resources/Textures/Constructible/Misc/decals.rsi/cryogenics.png new file mode 100644 index 0000000000..40f10fbbcc Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/cryogenics.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/danger.png b/Resources/Textures/Constructible/Misc/decals.rsi/danger.png new file mode 100644 index 0000000000..a08e2e46b7 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/danger.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/deathsposal.png b/Resources/Textures/Constructible/Misc/decals.rsi/deathsposal.png new file mode 100644 index 0000000000..28975a1b12 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/deathsposal.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/direction_bridge.png b/Resources/Textures/Constructible/Misc/decals.rsi/direction_bridge.png new file mode 100644 index 0000000000..7f3e3d70c5 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/direction_bridge.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/direction_eng.png b/Resources/Textures/Constructible/Misc/decals.rsi/direction_eng.png new file mode 100644 index 0000000000..56ea5fbadd Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/direction_eng.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/direction_evac.png b/Resources/Textures/Constructible/Misc/decals.rsi/direction_evac.png new file mode 100644 index 0000000000..7705338326 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/direction_evac.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/direction_med.png b/Resources/Textures/Constructible/Misc/decals.rsi/direction_med.png new file mode 100644 index 0000000000..b6b2899dcd Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/direction_med.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/direction_sci.png b/Resources/Textures/Constructible/Misc/decals.rsi/direction_sci.png new file mode 100644 index 0000000000..731a201140 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/direction_sci.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/direction_sec.png b/Resources/Textures/Constructible/Misc/decals.rsi/direction_sec.png new file mode 100644 index 0000000000..d025350b9a Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/direction_sec.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/direction_supply.png b/Resources/Textures/Constructible/Misc/decals.rsi/direction_supply.png new file mode 100644 index 0000000000..a912f8b346 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/direction_supply.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/dock.png b/Resources/Textures/Constructible/Misc/decals.rsi/dock.png new file mode 100644 index 0000000000..1716f825bb Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/dock.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/doors.png b/Resources/Textures/Constructible/Misc/decals.rsi/doors.png new file mode 100644 index 0000000000..46f7585812 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/doors.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/drones.png b/Resources/Textures/Constructible/Misc/decals.rsi/drones.png new file mode 100644 index 0000000000..3d7e65f7a5 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/drones.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/electrical.png b/Resources/Textures/Constructible/Misc/decals.rsi/electrical.png new file mode 100644 index 0000000000..a1616ae52e Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/electrical.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/eng.png b/Resources/Textures/Constructible/Misc/decals.rsi/eng.png new file mode 100644 index 0000000000..2d12b080fc Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/eng.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/engine.png b/Resources/Textures/Constructible/Misc/decals.rsi/engine.png new file mode 100644 index 0000000000..2c4f14d707 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/engine.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/eva.png b/Resources/Textures/Constructible/Misc/decals.rsi/eva.png new file mode 100644 index 0000000000..2db7d42645 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/eva.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/examroom.png b/Resources/Textures/Constructible/Misc/decals.rsi/examroom.png new file mode 100644 index 0000000000..afe1ce5986 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/examroom.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/explosives.png b/Resources/Textures/Constructible/Misc/decals.rsi/explosives.png new file mode 100644 index 0000000000..5f262300e7 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/explosives.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/fire.png b/Resources/Textures/Constructible/Misc/decals.rsi/fire.png new file mode 100644 index 0000000000..6f66c618fe Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/fire.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/flammable.png b/Resources/Textures/Constructible/Misc/decals.rsi/flammable.png new file mode 100644 index 0000000000..c90d9b03b5 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/flammable.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/gravi.png b/Resources/Textures/Constructible/Misc/decals.rsi/gravi.png new file mode 100644 index 0000000000..21eb2e8613 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/gravi.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/hydro1.png b/Resources/Textures/Constructible/Misc/decals.rsi/hydro1.png new file mode 100644 index 0000000000..b20654fcd6 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/hydro1.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/hydro2.png b/Resources/Textures/Constructible/Misc/decals.rsi/hydro2.png new file mode 100644 index 0000000000..40d3e546ec Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/hydro2.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/hydro3.png b/Resources/Textures/Constructible/Misc/decals.rsi/hydro3.png new file mode 100644 index 0000000000..ccb0e83784 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/hydro3.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/interrogation.png b/Resources/Textures/Constructible/Misc/decals.rsi/interrogation.png new file mode 100644 index 0000000000..653caf3907 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/interrogation.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/laser.png b/Resources/Textures/Constructible/Misc/decals.rsi/laser.png new file mode 100644 index 0000000000..f96d7cf927 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/laser.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/magnetics.png b/Resources/Textures/Constructible/Misc/decals.rsi/magnetics.png new file mode 100644 index 0000000000..7c131e3412 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/magnetics.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/mail.png b/Resources/Textures/Constructible/Misc/decals.rsi/mail.png new file mode 100644 index 0000000000..f397ffe996 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/mail.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/medbay.png b/Resources/Textures/Constructible/Misc/decals.rsi/medbay.png new file mode 100644 index 0000000000..c9c6e1362a Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/medbay.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/memetic.png b/Resources/Textures/Constructible/Misc/decals.rsi/memetic.png new file mode 100644 index 0000000000..1ff84aa70b Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/memetic.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/meta.json b/Resources/Textures/Constructible/Misc/decals.rsi/meta.json new file mode 100644 index 0000000000..c411301312 --- /dev/null +++ b/Resources/Textures/Constructible/Misc/decals.rsi/meta.json @@ -0,0 +1,893 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 4e0bbe682d0a00192d24708fdb7031008aa03f18", + "states": [ + { + "name": "ai", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "anomaly", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "armory", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "ass", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "atmos", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "atmos_air", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "atmos_co2", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "atmos_n2", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "atmos_n2o", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "atmos_o2", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "atmos_phoron", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "atmos_waste", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "atmosplaque", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "zumosplaque", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "bar", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "biblio", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "bio", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "biohazard", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "bridge", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "canisters", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "cargo", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "cargo_dock", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "chapel", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "chem", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "chemistry1", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "chemistry2", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "commander", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "conference_room", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "corrosives", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "cryogenics", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "danger", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "deathsposal", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "direction_eng", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "direction_evac", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "direction_supply", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "direction_bridge", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "direction_med", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "direction_sci", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "direction_sec", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "dock", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "doors", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "drones", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "electrical", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "eng", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "engine", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "eva", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "examroom", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "explosives", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "fire", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "flammable", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "cloning", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "gravi", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "hydro1", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "hydro2", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "hydro3", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "interrogation", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "laser", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "magnetics", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "mail", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "medbay", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "memetic", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "miner_dock", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "monkey_painting", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "morgue", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "nosmoking", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "nosmoking2", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "surgery", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "optical", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "oxidants", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "pods", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "prison", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "radiation", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "rnd", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "robo", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "sci", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "science1", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "science2", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "secure", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "securearea", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "shield", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "shock", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "something-old1", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "something-old2", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "space", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "telecoms", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "toxin_res", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "toxins", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "virology", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "xenobio", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "xenobio2", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "xenolab", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/miner_dock.png b/Resources/Textures/Constructible/Misc/decals.rsi/miner_dock.png new file mode 100644 index 0000000000..a9444f1ed6 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/miner_dock.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/monkey_painting.png b/Resources/Textures/Constructible/Misc/decals.rsi/monkey_painting.png new file mode 100644 index 0000000000..4dae775fe8 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/monkey_painting.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/morgue.png b/Resources/Textures/Constructible/Misc/decals.rsi/morgue.png new file mode 100644 index 0000000000..1dc0e7d1a9 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/morgue.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/nosmoking.png b/Resources/Textures/Constructible/Misc/decals.rsi/nosmoking.png new file mode 100644 index 0000000000..b5c407905c Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/nosmoking.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/nosmoking2.png b/Resources/Textures/Constructible/Misc/decals.rsi/nosmoking2.png new file mode 100644 index 0000000000..4a18326d74 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/nosmoking2.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/optical.png b/Resources/Textures/Constructible/Misc/decals.rsi/optical.png new file mode 100644 index 0000000000..97a037198f Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/optical.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/oxidants.png b/Resources/Textures/Constructible/Misc/decals.rsi/oxidants.png new file mode 100644 index 0000000000..a37f6f828c Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/oxidants.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/pods.png b/Resources/Textures/Constructible/Misc/decals.rsi/pods.png new file mode 100644 index 0000000000..70d0e6512a Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/pods.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/prison.png b/Resources/Textures/Constructible/Misc/decals.rsi/prison.png new file mode 100644 index 0000000000..a6fe5ca1f3 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/prison.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/radiation.png b/Resources/Textures/Constructible/Misc/decals.rsi/radiation.png new file mode 100644 index 0000000000..c72489caf0 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/radiation.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/rnd.png b/Resources/Textures/Constructible/Misc/decals.rsi/rnd.png new file mode 100644 index 0000000000..875b57204b Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/rnd.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/robo.png b/Resources/Textures/Constructible/Misc/decals.rsi/robo.png new file mode 100644 index 0000000000..5b3bb6e83d Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/robo.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/sci.png b/Resources/Textures/Constructible/Misc/decals.rsi/sci.png new file mode 100644 index 0000000000..eb3afab2f8 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/sci.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/science1.png b/Resources/Textures/Constructible/Misc/decals.rsi/science1.png new file mode 100644 index 0000000000..7c67901ec4 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/science1.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/science2.png b/Resources/Textures/Constructible/Misc/decals.rsi/science2.png new file mode 100644 index 0000000000..7722ef8303 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/science2.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/secure.png b/Resources/Textures/Constructible/Misc/decals.rsi/secure.png new file mode 100644 index 0000000000..40f056c2b8 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/secure.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/securearea.png b/Resources/Textures/Constructible/Misc/decals.rsi/securearea.png new file mode 100644 index 0000000000..db739d616b Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/securearea.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/shield.png b/Resources/Textures/Constructible/Misc/decals.rsi/shield.png new file mode 100644 index 0000000000..bb88d2a770 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/shield.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/shock.png b/Resources/Textures/Constructible/Misc/decals.rsi/shock.png new file mode 100644 index 0000000000..77c57bf53e Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/shock.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/something-old1.png b/Resources/Textures/Constructible/Misc/decals.rsi/something-old1.png new file mode 100644 index 0000000000..8a41cc1265 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/something-old1.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/something-old2.png b/Resources/Textures/Constructible/Misc/decals.rsi/something-old2.png new file mode 100644 index 0000000000..2731e3626b Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/something-old2.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/space.png b/Resources/Textures/Constructible/Misc/decals.rsi/space.png new file mode 100644 index 0000000000..214650d6db Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/space.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/surgery.png b/Resources/Textures/Constructible/Misc/decals.rsi/surgery.png new file mode 100644 index 0000000000..254ada76fd Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/surgery.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/telecoms.png b/Resources/Textures/Constructible/Misc/decals.rsi/telecoms.png new file mode 100644 index 0000000000..e1e721de4a Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/telecoms.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/toxin_res.png b/Resources/Textures/Constructible/Misc/decals.rsi/toxin_res.png new file mode 100644 index 0000000000..c2c35212d0 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/toxin_res.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/toxins.png b/Resources/Textures/Constructible/Misc/decals.rsi/toxins.png new file mode 100644 index 0000000000..6c28bfde00 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/toxins.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/virology.png b/Resources/Textures/Constructible/Misc/decals.rsi/virology.png new file mode 100644 index 0000000000..b83297d037 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/virology.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/xenobio.png b/Resources/Textures/Constructible/Misc/decals.rsi/xenobio.png new file mode 100644 index 0000000000..0d9336c01a Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/xenobio.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/xenobio2.png b/Resources/Textures/Constructible/Misc/decals.rsi/xenobio2.png new file mode 100644 index 0000000000..3e8515dda0 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/xenobio2.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/xenolab.png b/Resources/Textures/Constructible/Misc/decals.rsi/xenolab.png new file mode 100644 index 0000000000..21eb486835 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/xenolab.png differ diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/zumosplaque.png b/Resources/Textures/Constructible/Misc/decals.rsi/zumosplaque.png new file mode 100644 index 0000000000..473bea0502 Binary files /dev/null and b/Resources/Textures/Constructible/Misc/decals.rsi/zumosplaque.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/deny-unshaded.png new file mode 100644 index 0000000000..c6e30865ce Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/deny.png deleted file mode 100644 index 74d3402ded..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/deny.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/meta.json index 2ac9594470..88196b331c 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/meta.json @@ -1 +1,51 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "deny", "directions": 1, "delays": [[0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2]]}, {"name": "normal", "directions": 1, "delays": [[0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "normal-unshaded", + "directions": 1, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/normal-unshaded.png new file mode 100644 index 0000000000..17240bfdf9 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/normal.png deleted file mode 100644 index 5dae4ee2a2..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/deny-unshaded.png new file mode 100644 index 0000000000..c7fa863d4d Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/deny.png deleted file mode 100644 index d62be37f93..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/deny.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/eject-unshaded.png new file mode 100644 index 0000000000..161a9f2bfb Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/eject-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/eject.png deleted file mode 100644 index 7c62b0721d..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/eject.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/meta.json index 12fd9a9146..07adf4e804 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/meta.json @@ -1 +1,55 @@ -{"version":1,"size":{"x":32,"y":32},"states":[{"name":"normal","directions":1,"delays":[[1.0]]},{"name":"broken","directions":1,"delays":[[1.0]]},{"name":"deny","directions":1,"delays":[[0.1,0.1,0.1,0.1,0.1,0.1,0.1]]},{"name":"off","directions":1,"delays":[[1.0]]},{"name":"panel","directions":1,"delays":[[1.0]]},{"name":"eject","directions":1,"delays":[[0.5,0.05,0.5,0.05,0.1]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "off", + "directions": 1 + }, + { + "name": "panel", + "directions": 1 + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.5, + 0.05, + 0.5, + 0.05, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/normal-unshaded.png new file mode 100644 index 0000000000..3e95ed4aa0 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/normal.png deleted file mode 100644 index a960108cbf..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/deny-unshaded.png new file mode 100644 index 0000000000..a7405a3f50 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/deny.png deleted file mode 100644 index 8821a295f2..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/deny.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/meta.json index befea40432..a097122ca1 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/meta.json @@ -1 +1,126 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "deny", "directions": 1, "delays": [[0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.1, 0.05, 0.1, 0.05, 0.1, 0.05, 0.1, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05]]}, {"name": "normal", "directions": 1, "delays": [[2.0, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 2.0, 0.05, 0.05, 2.0, 0.05, 0.05, 0.05, 2.0, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 2.0, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.5, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 1.0, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.1, + 0.05, + 0.1, + 0.05, + 0.1, + 0.05, + 0.1, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05 + ] + ] + }, + { + "name": "normal-unshaded", + "directions": 1, + "delays": [ + [ + 2.0, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 2.0, + 0.05, + 0.05, + 2.0, + 0.05, + 0.05, + 0.05, + 2.0, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 2.0, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.5, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 1.0, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05 + ] + ] + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/normal-unshaded.png new file mode 100644 index 0000000000..a38fb3626c Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/normal.png deleted file mode 100644 index 6053dc5d28..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/deny-unshaded.png new file mode 100644 index 0000000000..4b8fc2a3e5 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/deny.png deleted file mode 100644 index 2ed8a88e1c..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/deny.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/eject-unshaded.png new file mode 100644 index 0000000000..505d5f3861 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/eject-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/eject.png deleted file mode 100644 index 873d7e8e70..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/eject.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/meta.json index d00c37f2ec..29e93fb3ef 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/meta.json @@ -1 +1,51 @@ -{"version":1,"size":{"x":32,"y":32},"states":[{"name":"normal","directions":1,"delays":[[1.0]]},{"name":"broken","directions":1,"delays":[[1.0]]},{"name":"deny","directions":1,"delays":[[0.1,0.1,0.1]]},{"name":"off","directions":1,"delays":[[1.0]]},{"name":"panel","directions":1,"delays":[[1.0]]},{"name":"eject","directions":1,"delays":[[0.1,0.1,0.8,0.1,0.1]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "off", + "directions": 1 + }, + { + "name": "panel", + "directions": 1 + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.8, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/normal-unshaded.png new file mode 100644 index 0000000000..f92b13efd1 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/normal.png deleted file mode 100644 index 036d9b33e8..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/deny-unshaded.png new file mode 100644 index 0000000000..826a5517e3 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/deny.png deleted file mode 100644 index 17aabbe639..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/deny.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/eject-unshaded.png new file mode 100644 index 0000000000..8b66206bd7 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/eject-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/eject.png deleted file mode 100644 index d3329033b7..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/eject.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/meta.json index 0dc3d47206..a6e22752ac 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/meta.json @@ -1 +1,83 @@ -{"version":1,"size":{"x":32,"y":32},"states":[{"name":"normal","directions":1,"delays":[[1.0]]},{"name":"broken","directions":1,"delays":[[1.0]]},{"name":"deny","directions":1,"delays":[[0.1,0.1,0.1]]},{"name":"hellfire","directions":1,"delays":[[0.25,0.25,0.25]]},{"name":"off","directions":1,"delays":[[1.0]]},{"name":"panel","directions":1,"delays":[[1.0]]},{"name":"screen","directions":1,"delays":[[0.6,0.6,0.6,0.6]]},{"name":"eject","directions":1,"delays":[[0.2,0.2,0.6,0.3,0.3,0.3,0.3,0.3,0.3,0.2,0.2,0.2,0.2,0.8]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "hellfire", + "directions": 1, + "delays": [ + [ + 0.25, + 0.25, + 0.25 + ] + ] + }, + { + "name": "off", + "directions": 1 + }, + { + "name": "panel", + "directions": 1 + }, + { + "name": "screen", + "directions": 1, + "delays": [ + [ + 0.6, + 0.6, + 0.6, + 0.6 + ] + ] + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.2, + 0.2, + 0.6, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.2, + 0.2, + 0.2, + 0.2, + 0.8 + ] + ] + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/normal-unshaded.png new file mode 100644 index 0000000000..1a7fd066cd Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/normal.png deleted file mode 100644 index 90d1bbd8bb..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/deny-unshaded.png new file mode 100644 index 0000000000..5450574f55 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/deny.png deleted file mode 100644 index 3bc5c1a554..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/deny.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/eject-unshaded.png new file mode 100644 index 0000000000..0c39a51203 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/eject-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/eject.png deleted file mode 100644 index 00c05769a8..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/eject.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/meta.json index 276f9ec8ad..35e8a5cd3f 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/meta.json @@ -1 +1,56 @@ -{"version":1,"size":{"x":32,"y":32},"states":[{"name":"broken","directions":1,"delays":[[1.0]]},{"name":"eject","directions":1,"delays":[[0.5,0.1,1.0,0.1,0.1]]},{"name":"deny","directions":1,"delays":[[0.1,0.1,0.1]]},{"name":"normal","directions":1,"delays":[[1.0]]},{"name":"panel","directions":1,"delays":[[1.0]]},{"name":"off","directions":1,"delays":[[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "broken", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.5, + 0.1, + 1.0, + 0.1, + 0.1 + ] + ] + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "panel", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/normal-unshaded.png new file mode 100644 index 0000000000..5a4eb5ccbd Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/normal.png deleted file mode 100644 index 80ab90fb8b..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/eject-unshaded.png new file mode 100644 index 0000000000..2fd223d6f4 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/eject-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/eject.png deleted file mode 100644 index 7d0de068b1..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/eject.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/meta.json index 0f01469900..d1f1da23c0 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/meta.json @@ -1 +1,41 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "eject", "directions": 1, "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "normal", "directions": 1, "delays": [[1.0]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/normal-unshaded.png new file mode 100644 index 0000000000..22f242b7dd Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/normal.png deleted file mode 100644 index e928a54ca0..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/discount.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/discount.rsi/meta.json index 75bf5b7173..ad5abb7d69 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/discount.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/discount.rsi/meta.json @@ -1 +1,30 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "normal", "directions": 1, "delays": [[4.0, 0.1, 0.6]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "normal-unshaded", + "directions": 1, + "delays": [ + [ + 4.0, + 0.1, + 0.6 + ] + ] + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/discount.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/discount.rsi/normal-unshaded.png new file mode 100644 index 0000000000..4de940667a Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/discount.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/discount.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/discount.rsi/normal.png deleted file mode 100644 index 96595bdccc..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/discount.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/empty.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/empty.rsi/meta.json index 8288f2c29d..92aee55bb4 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/empty.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/empty.rsi/meta.json @@ -1 +1,23 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "normal", "directions": 1, "delays": [[1.0]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/empty.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/empty.rsi/normal-unshaded.png new file mode 100644 index 0000000000..618d58f847 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/empty.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/empty.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/empty.rsi/normal.png deleted file mode 100644 index 7e197b073c..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/empty.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/deny-unshaded.png new file mode 100644 index 0000000000..03c3bb39ec Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/deny.png deleted file mode 100644 index a4ca61c04c..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/deny.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/eject-unshaded.png new file mode 100644 index 0000000000..dc5931f654 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/eject-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/eject.png deleted file mode 100644 index 0b657ff93a..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/eject.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/meta.json index a830d84162..52e45bdc98 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/meta.json @@ -1 +1,52 @@ -{"copyright":"https://github.com/Baystation12/Baystation12","license":"CC-BY-SA-3.0","size":{"x":32,"y":32},"states":[{"delays":[[1.0]],"directions":1,"name":"broken"},{"delays":[[0.1,0.1,0.1,0.1,0.1,0.1]],"directions":1,"name":"deny"},{"delays":[[0.1,0.4,0.1]],"directions":1,"name":"eject"},{"delays":[[1.0]],"directions":1,"name":"normal"},{"delays":[[1.0]],"directions":1,"name":"off"},{"delays":[[1.0]],"directions":1,"name":"panel"}],"version":1} \ No newline at end of file +{ + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.4, + 0.1 + ] + ] + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + }, + { + "name": "panel", + "directions": 1 + } + ], + "version": 1 +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/normal-unshaded.png new file mode 100644 index 0000000000..bbf5692ec9 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/normal.png deleted file mode 100644 index 45fecab42b..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/hats.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/hats.rsi/meta.json index 95aa5778c4..96ad51b296 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/hats.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/hats.rsi/meta.json @@ -1 +1,31 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "normal", "directions": 1, "delays": [[2.0, 0.1, 0.2, 0.1]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "normal-unshaded", + "directions": 1, + "delays": [ + [ + 2.0, + 0.1, + 0.2, + 0.1 + ] + ] + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/hats.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/hats.rsi/normal-unshaded.png new file mode 100644 index 0000000000..abd7aa091a Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/hats.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/hats.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/hats.rsi/normal.png deleted file mode 100644 index 6c22e9ca0e..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/hats.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/magivend.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/magivend.rsi/meta.json index 8288f2c29d..92aee55bb4 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/magivend.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/magivend.rsi/meta.json @@ -1 +1,23 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "normal", "directions": 1, "delays": [[1.0]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/magivend.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/magivend.rsi/normal-unshaded.png new file mode 100644 index 0000000000..ce4ed07f20 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/magivend.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/magivend.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/magivend.rsi/normal.png deleted file mode 100644 index 3e626ac04c..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/magivend.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/deny-unshaded.png new file mode 100644 index 0000000000..96403be7cf Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/deny.png deleted file mode 100644 index 9c73caedef..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/deny.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/eject-unshaded.png new file mode 100644 index 0000000000..a4fd4d3258 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/eject-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/eject.png deleted file mode 100644 index c00889f7e9..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/eject.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/meta.json index 6b9dc19981..2798539692 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/meta.json @@ -1 +1,52 @@ -{"version":1,"size":{"x":32,"y":32},"states":[{"name":"normal","directions":1,"delays":[[1.0]]},{"name":"broken","directions":1,"delays":[[1.0]]},{"name":"deny","directions":1,"delays":[[0.1,0.1,0.1,0.1,0.1,0.1]]},{"name":"off","directions":1,"delays":[[1.0]]},{"name":"panel","directions":1,"delays":[[1.0]]},{"name":"eject","directions":1,"delays":[[0.1,0.4,0.1]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "off", + "directions": 1 + }, + { + "name": "panel", + "directions": 1 + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.4, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/normal-unshaded.png new file mode 100644 index 0000000000..8e1e181e13 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/normal.png deleted file mode 100644 index 2b58e1171a..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/deny-unshaded.png new file mode 100644 index 0000000000..5d9acc4010 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/deny.png deleted file mode 100644 index 2727014548..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/deny.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/meta.json index dc487ded34..0d0c8a222b 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/meta.json @@ -1 +1,33 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "deny", "directions": 1, "delays": [[0.1, 0.1]]}, {"name": "normal", "directions": 1, "delays": [[1.0]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1 + ] + ] + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/normal-unshaded.png new file mode 100644 index 0000000000..a711db8365 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/normal.png deleted file mode 100644 index 336cf05372..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/deny-unshaded.png new file mode 100644 index 0000000000..e507e6960f Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/deny.png deleted file mode 100644 index 770e2092de..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/deny.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/eject-unshaded.png new file mode 100644 index 0000000000..88699f866a Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/eject-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/eject.png deleted file mode 100644 index e7a8d00b38..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/eject.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/meta.json index 22ee707ea4..295f5467fa 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/meta.json @@ -1 +1,47 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "deny", "directions": 1, "delays": [[1.0]]}, {"name": "eject", "directions": 1, "delays": [[1.0, 0.1, 0.1, 0.1, 0.1, 0.5, 0.1, 1.0, 0.1, 0.1, 0.1, 0.1]]}, {"name": "normal", "directions": 1, "delays": [[1.0]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1 + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 1.0, + 0.1, + 0.1, + 0.1, + 0.1, + 0.5, + 0.1, + 1.0, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/normal-unshaded.png new file mode 100644 index 0000000000..783cbaa6e3 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/normal.png deleted file mode 100644 index e4f030005c..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/deny-unshaded.png new file mode 100644 index 0000000000..4918d9f5f9 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/deny.png deleted file mode 100644 index c30eca1bc0..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/deny.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/meta.json index 8ab345bb1d..74a652e3c4 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/meta.json @@ -1 +1,38 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "deny", "directions": 1, "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "normal", "directions": 1, "delays": [[1.0]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/normal-unshaded.png new file mode 100644 index 0000000000..6d68fe041e Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/normal.png deleted file mode 100644 index ca90dc6242..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/broken-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/broken-unshaded.png new file mode 100644 index 0000000000..86dde0af4e Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/broken-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/broken.png b/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/broken.png index 50d487e689..5036439a63 100644 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/broken.png and b/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/broken.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/meta.json index 12fa42f831..67feef3131 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/meta.json @@ -1 +1,51 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0, 0.05, 0.1, 0.02]]}, {"name": "normal", "directions": 1, "delays": [[0.2, 0.1, 0.2, 0.1, 0.2, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "broken-unshaded", + "directions": 1, + "delays": [ + [ + 1.0, + 0.05, + 0.1, + 0.02 + ] + ] + }, + { + "name": "normal-unshaded", + "directions": 1, + "delays": [ + [ + 0.2, + 0.1, + 0.2, + 0.1, + 0.2, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/normal-unshaded.png new file mode 100644 index 0000000000..79d03c6c74 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/normal.png deleted file mode 100644 index 01cec66b56..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/deny-unshaded.png new file mode 100644 index 0000000000..88a96e1504 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/deny.png deleted file mode 100644 index 686150ace5..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/deny.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/eject-unshaded.png new file mode 100644 index 0000000000..de939af0da Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/eject-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/eject.png deleted file mode 100644 index 00ebf9513c..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/eject.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/meta.json index 6b9dc19981..2798539692 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/meta.json @@ -1 +1,52 @@ -{"version":1,"size":{"x":32,"y":32},"states":[{"name":"normal","directions":1,"delays":[[1.0]]},{"name":"broken","directions":1,"delays":[[1.0]]},{"name":"deny","directions":1,"delays":[[0.1,0.1,0.1,0.1,0.1,0.1]]},{"name":"off","directions":1,"delays":[[1.0]]},{"name":"panel","directions":1,"delays":[[1.0]]},{"name":"eject","directions":1,"delays":[[0.1,0.4,0.1]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "off", + "directions": 1 + }, + { + "name": "panel", + "directions": 1 + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.4, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/normal-unshaded.png new file mode 100644 index 0000000000..1299157d19 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/normal.png deleted file mode 100644 index 39350f5269..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/eject-unshaded.png new file mode 100644 index 0000000000..67483d624e Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/eject-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/eject.png deleted file mode 100644 index 717c131e38..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/eject.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/meta.json index 11edaddccc..b75062afcf 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/meta.json @@ -1 +1,41 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "eject", "directions": 1, "delays": [[0.1, 0.2, 0.1, 0.1, 0.1, 0.1, 0.1, 1.0, 0.1, 0.1]]}, {"name": "normal", "directions": 1, "delays": [[1.0]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.2, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.0, + 0.1, + 0.1 + ] + ] + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/normal-unshaded.png new file mode 100644 index 0000000000..7cc9cf08dc Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/normal.png deleted file mode 100644 index 29d19452a5..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/shoes.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/shoes.rsi/meta.json index 69873a4421..aec9da4eaa 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/shoes.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/shoes.rsi/meta.json @@ -1 +1,31 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "normal", "directions": 1, "delays": [[3.0, 0.2, 0.3, 0.1]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "normal-unshaded", + "directions": 1, + "delays": [ + [ + 3.0, + 0.2, + 0.3, + 0.1 + ] + ] + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/shoes.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/shoes.rsi/normal-unshaded.png new file mode 100644 index 0000000000..1ad15d7ffa Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/shoes.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/shoes.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/shoes.rsi/normal.png deleted file mode 100644 index d7eb072411..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/shoes.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/smartfridge.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/smartfridge.rsi/meta.json index 8288f2c29d..92aee55bb4 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/smartfridge.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/smartfridge.rsi/meta.json @@ -1 +1,23 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "normal", "directions": 1, "delays": [[1.0]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/smartfridge.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/smartfridge.rsi/normal-unshaded.png new file mode 100644 index 0000000000..728bda8ad4 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/smartfridge.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/smartfridge.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/smartfridge.rsi/normal.png deleted file mode 100644 index f9a2e20e6a..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/smartfridge.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/deny-unshaded.png new file mode 100644 index 0000000000..5d00b8caff Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/deny.png deleted file mode 100644 index cc277a5521..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/deny.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/eject-unshaded.png new file mode 100644 index 0000000000..26f071948d Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/eject-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/eject.png deleted file mode 100644 index 056bb7f1e0..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/eject.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/meta.json index 4db277b7bd..cd0be6613e 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/meta.json @@ -1 +1,58 @@ -{"version":1,"size":{"x":32,"y":32},"states":[{"name":"normal","directions":1,"delays":[[0.8,0.8,0.8]]},{"name":"broken","directions":1,"delays":[[1.0]]},{"name":"deny","directions":1,"delays":[[0.1,0.1,0.1]]},{"name":"off","directions":1,"delays":[[1.0]]},{"name":"panel","directions":1,"delays":[[1.0]]},{"name":"eject","directions":1,"delays":[[0.1,0.1,0.8,0.1,0.1]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "normal-unshaded", + "directions": 1, + "delays": [ + [ + 0.8, + 0.8, + 0.8 + ] + ] + }, + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "off", + "directions": 1 + }, + { + "name": "panel", + "directions": 1 + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.8, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/normal-unshaded.png new file mode 100644 index 0000000000..10aa4ddb02 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/normal.png deleted file mode 100644 index cc086552a2..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/deny-unshaded.png new file mode 100644 index 0000000000..155d490ff6 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/deny.png deleted file mode 100644 index 0b25e5cf7e..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/deny.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/eject-unshaded.png new file mode 100644 index 0000000000..27d8062b02 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/eject-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/eject.png deleted file mode 100644 index ca286a53d8..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/eject.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/meta.json index 51ef3f6e2c..f8c1c9f822 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/meta.json @@ -1 +1,50 @@ -{"version":1,"size":{"x":32,"y":32},"states":[{"name":"normal","directions":1,"delays":[[1.0]]},{"name":"broken","directions":1,"delays":[[1.0]]},{"name":"deny","directions":1,"delays":[[0.4,0.4]]},{"name":"off","directions":1,"delays":[[1.0]]},{"name":"panel","directions":1,"delays":[[1.0]]},{"name":"eject","directions":1,"delays":[[0.1,0.1,0.8,0.1,0.1]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.4, + 0.4 + ] + ] + }, + { + "name": "off", + "directions": 1 + }, + { + "name": "panel", + "directions": 1 + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.8, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/normal-unshaded.png new file mode 100644 index 0000000000..781ae3dfd1 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/normal.png deleted file mode 100644 index 5eab060bc7..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/suits.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/suits.rsi/meta.json index a435b611e6..66964fb02a 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/suits.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/suits.rsi/meta.json @@ -1 +1,31 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "normal", "directions": 1, "delays": [[1.9, 0.1, 0.2, 0.05]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "normal-unshaded", + "directions": 1, + "delays": [ + [ + 1.9, + 0.1, + 0.2, + 0.05 + ] + ] + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/suits.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/suits.rsi/normal-unshaded.png new file mode 100644 index 0000000000..5229d2b9e8 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/suits.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/suits.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/suits.rsi/normal.png deleted file mode 100644 index 92bbb8d9ef..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/suits.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/deny-unshaded.png new file mode 100644 index 0000000000..66e29f2bf0 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/deny.png deleted file mode 100644 index 2b52d5bd84..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/deny.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/eject-unshaded.png new file mode 100644 index 0000000000..865de78e60 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/eject-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/eject.png deleted file mode 100644 index d40c01396f..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/eject.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/meta.json index 5ce19b184b..4f791ae991 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/meta.json @@ -1 +1,61 @@ -{"version":1,"size":{"x":32,"y":32},"states":[{"name":"normal","directions":1,"delays":[[1.0]]},{"name":"broken","directions":1,"delays":[[1.0]]},{"name":"deny","directions":1,"delays":[[0.1,0.1,0.1]]},{"name":"off","directions":1,"delays":[[1.0]]},{"name":"overlay","directions":1,"delays":[[3.0,0.1]]},{"name":"panel","directions":1,"delays":[[1.0]]},{"name":"eject","directions":1,"delays":[[0.1,0.1,0.8,0.1,0.1]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "off", + "directions": 1 + }, + { + "name": "screen", + "directions": 1, + "delays": [ + [ + 3.0, + 0.1 + ] + ] + }, + { + "name": "panel", + "directions": 1 + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.8, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/normal-unshaded.png new file mode 100644 index 0000000000..027d2fe009 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/normal.png deleted file mode 100644 index 83be99ca3b..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/overlay.png b/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/screen.png similarity index 100% rename from Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/overlay.png rename to Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/screen.png diff --git a/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/deny-unshaded.png new file mode 100644 index 0000000000..fec5ee5813 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/deny.png deleted file mode 100644 index d8c1a8d69a..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/deny.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/eject-unshaded.png new file mode 100644 index 0000000000..c090eec02b Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/eject-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/eject.png index 895181a2af..adc0d37966 100644 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/eject.png and b/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/eject.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/meta.json index d00c37f2ec..29e93fb3ef 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/meta.json @@ -1 +1,51 @@ -{"version":1,"size":{"x":32,"y":32},"states":[{"name":"normal","directions":1,"delays":[[1.0]]},{"name":"broken","directions":1,"delays":[[1.0]]},{"name":"deny","directions":1,"delays":[[0.1,0.1,0.1]]},{"name":"off","directions":1,"delays":[[1.0]]},{"name":"panel","directions":1,"delays":[[1.0]]},{"name":"eject","directions":1,"delays":[[0.1,0.1,0.8,0.1,0.1]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "off", + "directions": 1 + }, + { + "name": "panel", + "directions": 1 + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.8, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/normal-unshaded.png new file mode 100644 index 0000000000..85cd16ec8c Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/normal.png deleted file mode 100644 index 5063d3c1e1..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/meta.json index 8288f2c29d..92aee55bb4 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/meta.json @@ -1 +1,23 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "normal", "directions": 1, "delays": [[1.0]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/normal-unshaded.png new file mode 100644 index 0000000000..34b18a86aa Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/normal.png deleted file mode 100644 index 8bdb138db0..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/deny-unshaded.png new file mode 100644 index 0000000000..e2042da994 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/deny.png deleted file mode 100644 index 55c19da916..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/deny.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/meta.json index b695d522f4..efebc20fb2 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/meta.json @@ -1 +1,43 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "deny", "directions": 1, "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.3, 0.1, 0.1, 0.1, 0.1]]}, {"name": "normal", "directions": 1, "delays": [[1.0]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.3, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/normal-unshaded.png new file mode 100644 index 0000000000..032f615f62 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/normal.png deleted file mode 100644 index 418fb06850..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/deny-unshaded.png new file mode 100644 index 0000000000..10df5c2f12 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/deny.png deleted file mode 100644 index 3b1938a44d..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/deny.png and /dev/null differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/eject-unshaded.png new file mode 100644 index 0000000000..f4378bc950 Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/eject-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/eject.png index ef706dfbbe..f9555b79ab 100644 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/eject.png and b/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/eject.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/meta.json index 97b0c2ab7a..70d2bb6b55 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/meta.json @@ -1 +1,66 @@ -{"copyright":"https://github.com/Baystation12/Baystation12","license":"CC-BY-SA-3.0","size":{"x":32,"y":32},"states":[{"delays":[[1.0]],"directions":1,"name":"broken"},{"delays":[[0.1,0.1,0.1,0.1,0.1,0.1]],"directions":1,"name":"deny"},{"delays":[[0.1,0.4,0.1,0.1]],"directions":1,"name":"eject"},{"delays":[[1.0]],"directions":1,"name":"normal"},{"delays":[[1.0]],"directions":1,"name":"off"},{"delays":[[1.0]],"directions":1,"name":"panel"}],"version":1} \ No newline at end of file +{ + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "eject", + "directions": 1, + "delays": [ + [ + 0.1, + 0.4, + 0.1, + 0.1 + ] + ] + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.4, + 0.1, + 0.1 + ] + ] + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + }, + { + "name": "panel", + "directions": 1 + } + ], + "version": 1 +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/normal-unshaded.png new file mode 100644 index 0000000000..b0dab7ee0b Binary files /dev/null and b/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/normal.png deleted file mode 100644 index 0eeeae5c0e..0000000000 Binary files a/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/normal.png and /dev/null differ diff --git a/Resources/Textures/Interface/Nano/cross.svg b/Resources/Textures/Interface/Nano/cross.svg index b91b944e56..a73977ddc9 100644 --- a/Resources/Textures/Interface/Nano/cross.svg +++ b/Resources/Textures/Interface/Nano/cross.svg @@ -1,86 +1,3 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - + + diff --git a/Resources/Textures/Interface/Nano/cross.svg.png b/Resources/Textures/Interface/Nano/cross.svg.png index db213ed45b..539f5f2389 100644 Binary files a/Resources/Textures/Interface/Nano/cross.svg.png and b/Resources/Textures/Interface/Nano/cross.svg.png differ diff --git a/Resources/Textures/Objects/Tools/rcd.rsi/meta.json b/Resources/Textures/Objects/Tools/rcd.rsi/meta.json index 1cfaa7b48f..ace9e5c739 100644 --- a/Resources/Textures/Objects/Tools/rcd.rsi/meta.json +++ b/Resources/Textures/Objects/Tools/rcd.rsi/meta.json @@ -1 +1,64 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "inhand-left", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "inhand-right", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "rcd", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC BY-SA 3.0", + "states": [ + { + "name": "inhand-left", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + }, + { + "name": "inhand-right", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + }, + { + "name": "rcd", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "rcd_ammo", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Objects/Tools/rcd.rsi/rcd.png b/Resources/Textures/Objects/Tools/rcd.rsi/rcd.png index fe1b33a4cf..cb62979010 100644 Binary files a/Resources/Textures/Objects/Tools/rcd.rsi/rcd.png and b/Resources/Textures/Objects/Tools/rcd.rsi/rcd.png differ diff --git a/Resources/Textures/Objects/Tools/rcd.rsi/rcd_ammo.png b/Resources/Textures/Objects/Tools/rcd.rsi/rcd_ammo.png new file mode 100644 index 0000000000..5422d5b976 Binary files /dev/null and b/Resources/Textures/Objects/Tools/rcd.rsi/rcd_ammo.png differ diff --git a/RobustToolbox b/RobustToolbox index 64a3916c04..1934428c95 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 64a3916c04daecf44b4617f2e8755900326957f0 +Subproject commit 1934428c95d44210cfc9c155c7d15405d4a374c4 diff --git a/SpaceStation14.sln.DotSettings b/SpaceStation14.sln.DotSettings index bd8ed2aff7..c93412bf8d 100644 --- a/SpaceStation14.sln.DotSettings +++ b/SpaceStation14.sln.DotSettings @@ -71,9 +71,12 @@ True True True + True True + True True True + True True True True diff --git a/Tools/package_release_build.py b/Tools/package_release_build.py index fae399325a..214f478e1c 100755 --- a/Tools/package_release_build.py +++ b/Tools/package_release_build.py @@ -84,8 +84,23 @@ MAC_NATIVES = { "libfreetype.6.dylib" } -SERVER_EXTRA_CONTENT_ASSEMBLIES = [ - "Content.Server.Database.dll" +# Assembly names to copy from content. +# PDBs are included if available, .dll/.pdb appended automatically. +SERVER_CONTENT_ASSEMBLIES = [ + "Content.Server.Database", + "Content.Server", + "Content.Shared" +] + +CLIENT_CONTENT_ASSEMBLIES = [ + "Content.Client", + "Content.Shared" +] + +# Extra assemblies to copy on the server, with a startswith +SERVER_EXTRA_ASSEMBLIES = [ + "Npgsql.", + "Microsoft", ] def main() -> None: @@ -381,16 +396,29 @@ def copy_dir_into_zip(directory, basepath, zipf): def copy_content_assemblies(target, zipf, server): + files = [] if server: source_dir = p("bin", "Content.Server") - files = ["Content.Shared.dll", "Content.Server.dll"] + SERVER_EXTRA_CONTENT_ASSEMBLIES + base_assemblies = SERVER_CONTENT_ASSEMBLIES + + # Additional assemblies that need to be copied such as EFCore. for filename in os.listdir(source_dir): - if filename.startswith("Microsoft.") or filename.startswith("Npgsql."): - files.append(filename) + for extra_assembly_start in SERVER_EXTRA_ASSEMBLIES: + if filename.startswith(extra_assembly_start): + files.append(filename) + break else: source_dir = p("bin", "Content.Client") - files = ["Content.Shared.dll", "Content.Client.dll"] + base_assemblies = CLIENT_CONTENT_ASSEMBLIES + + # Include content assemblies. + for asm in base_assemblies: + files.append(asm + ".dll") + # If PDB available, include it aswell. + pdb_path = asm + ".pdb" + if os.path.exists(p(source_dir, pdb_path)): + files.append(pdb_path) # Write assemblies dir if necessary. if not zip_entry_exists(zipf, target):