From 85df48a7000fd10e69b5ac7368b15e3c4953b35a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= <6766154+Zumorica@users.noreply.github.com> Date: Sun, 2 Aug 2020 20:08:20 +0200 Subject: [PATCH] Adds atmos (#1389) * Add initial atmospherics framework * Make walls and airlocks airtight * Add the basic atmosphere gas system * Atmos: move CardinalToIntVec and Offset into extention methods in EntityNetworkUtils * Optimize vending machine code a bit. * Address feedback from Atmos PR, make code compile Fix use of OnMove -> SnapGridComponent.OnPositionChanged. Added pause checking to atmos simulations. * Improvements to the existing ZAS prototype (#996) * Rename Volume -> Quantity in GasProperty This makes the name consistent with the rest of the code, given that it's meant to be a mol value. * Replace Gas enum with GasPrototype Unused as of yet, but laying the groundwork for future changes. * Update AtmosphereMap, improving maths Adds a temporary default atmosphere, hardcoded in for testing. It will be replaced eventually. Fixed a maths mistake in the original code involving unit conversions. Added the Take() method to IAtmosphere, for taking some volume of mixture out of a gas mix. This will be pretty handy in the future, but for now it's used by walls to delete air where they are built. * Fix merging, splitting logic for zones Removing a cell from a zone now correctly reduces its volume. Adding a cell to a zone now correctly increases its volume. * Improvements to atmos code, reorganising of types Moved GasPrototype to shared, because it's going to be used by the client later. Split up the atmosphere code. Now zones are explicitly their own kind of atmosphere, which should speed up some loops and also solve inconsistencies in the volume calculation. GasMixtures are another type of atmosphere, for more general use. Try to fix the splitting/merging code, which was quite cryptic and not clear at all. It *should* work now. * Switch zones back to MapIndices Turns out I'm an idiot who misunderstood the code. MapIndices can be used as one-per-tile, which is what is needed for atmos. GridCoordinates are many-per-tile, and were causing lots of problems. * Add zone debugging overlay This is the first example of zone information being sent to a client. It adds the `togglezoneinfo` command, which overlays the tiles and gas information for the zone currently occupied by the user on the screen. This was helpful for debugging the GridCoordinates problem. * Fix position of atmos zone debug text * Make AirtightComponent only activate on MapInit This should stop it splitting atmospheres in mapping. * Doc comments improvements to AtmosphereMap Fix some malformed comments, inherit some useful docs, document some more functions. * Add zone logic for changing tiles to/from space Zones are now correctly created when all the tiles in a room are built, and destroyed when one of the tiles is destroyed. * update engine * right * Cleanup code * Port GasMixture, further cleanup * Fix windows not being airtight, some other stuff * Work on atmos * Difference between ZoneBlocked and AirBlocked * Big GridAtmosphereManager cleanup, zones are broken now oops * Remove zones, add excited group implementation * Further cleanup * Further work on atmos * Work on gas overlay. * PumpGasTo and ReleaseGasTo methods for GasMixture. * Adds Tile Overlay System. * More work on atmos * Gasses spread, equalize and all that * Fix a few crashes * Gas can actually spread from room to room after opening airlocks * Add explosive depressurization, tile prying on depressurization, gas spreading on wall break. Etc. * More work * Remove atmoschem, add "performant" gas overlays * what the fuck git * More work I guess? * Fix stuff, create a few (empty) components for future work * Fix temperature * Fix tile air sharing * Atmos optimizations * Further atmos optimizations * Even more optimizations! * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers * Fix compile * Improved client gas tile overlays * Less allocations * Even less allocations! * some stuff dunno * Big refactor time, oh yeah * it truly is 1 AM * bruh * No idea why now it doesn't work. Oh well! I'll fix this on thursday :relieved: * Basic atmos serialization * Fix bugs, add VV attributes * Start adding stuff for gas reactions * Add a few atmos commands * Fill gas command * Changes to gas opacity * Fixes I guess * Fixes, add space wind sound * High pressure movement! * Better high pressure movements. * Fix direction, maybe? * And now it works great * Science! * and this is why you don't trust people * remove logging * Turns out I'm fucking dumb * Work on hotspots and reactions, add tritium gas * IGridAtmosphereComponent interface! For future unsimulated grids. * Makes atmos updates NoGC. * C E A S E * Add settemp atmos command * Important reminder. * Remove useless AtmosCooldown. * More work on hotspots * Overlays for hotspots. Fire works! * Turns out I suck at coding * Fire texture change * Yeah let's make that an absolute value, hmm? * Support for atmos after teleporting grid (more or less) * fix attempt (doesn't actually fix it) * Make static variable not static * Remove magic numbers * Stopwatch moment * Slight cleanup. * More cleanup. * Atmos optimizations * Fix build * Remove useless ghost atmos shit * Adds CanSeeGases component for gas overlay stuff * Component and prototype ignores * ExcitedGroups now dispose on being merged with others * Some tweaking. * Atmos now uses frame time for updates. * Nullable boogaloo * IExamine fix * Fix build * Fix restartround * Atmos tweaking, use invalid direction * Increase high pressure movement force * Better sort * Update submodule. * NULLABILITY AAAAH Special thanks to monster860 and all monstermos contributors! Co-authored-by: Campbell Suter Co-authored-by: Pieter-Jan Briers Co-authored-by: ComicIronic Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers --- Content.Client/Atmos/GasTileOverlay.cs | 65 ++ .../ConstructionPlacementHijack.cs | 4 +- Content.Client/EntryPoint.cs | 1 + .../Components/Atmos/CanSeeGasesComponent.cs | 35 + .../EntitySystems/GasTileOverlaySystem.cs | 167 ++++ Content.Client/IgnoredComponents.cs | 2 + Content.Server/Atmos/AtmosCommands.cs | 317 +++++++ Content.Server/Atmos/EntityNetworkUtils.cs | 31 + Content.Server/Atmos/ExcitedGroup.cs | 139 +++ Content.Server/Atmos/GasMixture.cs | 543 +++++++++++ .../Atmos/HighPressureMovementController.cs | 81 ++ Content.Server/Atmos/Hotspot.cs | 34 + .../Atmos/IGridAtmosphereComponent.cs | 133 +++ .../Atmos/Reactions/GasReactionPrototype.cs | 74 ++ .../Atmos/Reactions/PhoronFireReaction.cs | 90 ++ Content.Server/Atmos/TileAtmosInfo.cs | 77 ++ Content.Server/Atmos/TileAtmosphere.cs | 891 ++++++++++++++++++ Content.Server/Content.Server.csproj | 1 + .../Components/Atmos/AirtightComponent.cs | 98 ++ .../Components/Atmos/GasAnalyzerComponent.cs | 40 + .../Components/Atmos/GasCanisterComponent.cs | 10 + .../Components/Atmos/GasMixtureComponent.cs | 19 + .../Components/Atmos/GasTankComponent.cs | 10 + .../Atmos/GridAtmosphereComponent.cs | 523 ++++++++++ .../Atmos/MovedByPressureComponent.cs | 22 + .../Components/Doors/ServerDoorComponent.cs | 5 + .../EntitySystems/AtmosphereSystem.cs | 68 ++ .../EntitySystems/GasTileOverlaySystem.cs | 149 +++ .../EntitySystems/InstrumentSystem.cs | 2 +- Content.Server/IgnoredComponents.cs | 1 + .../Interfaces/IGasMixtureHolder.cs | 11 + .../Interfaces/IGasReactionEffect.cs | 13 + Content.Server/Observer/Ghost.cs | 10 +- Content.Server/ServerContentIoC.cs | 2 +- Content.Shared/Atmos/Atmospherics.cs | 174 ++++ Content.Shared/Atmos/GasPrototype.cs | 86 ++ Content.Shared/Chemistry/ReagentPrototype.cs | 4 +- .../SharedGasTileOverlaySystem.cs | 73 ++ Resources/Audio/Effects/space_wind.ogg | Bin 0 -> 22791 bytes Resources/Groups/groups.yml | 6 + Resources/Prototypes/Atmospherics/gases.yml | 28 + .../Prototypes/Atmospherics/reactions.yml | 11 + .../Constructible/Doors/airlock_base.yml | 2 + .../Constructible/Storage/Closets/closet.yml | 1 + .../Entities/Constructible/Walls/walls.yml | 2 + .../Entities/Constructible/Walls/windows.yml | 1 + .../Entities/Mobs/Player/observer.yml | 1 + .../Entities/Mobs/Species/human.yml | 2 + Resources/Prototypes/Entities/item_base.yml | 1 + Resources/Prototypes/Reagents/chemicals.yml | 4 +- Resources/Prototypes/Reagents/elements.yml | 1 + .../Effects/atmospherics.rsi/chem_gas_old.png | Bin 0 -> 307 bytes .../Effects/atmospherics.rsi/freon.png | Bin 0 -> 1248 bytes .../Effects/atmospherics.rsi/freon_old.png | Bin 0 -> 599 bytes .../Effects/atmospherics.rsi/fusion_gas.png | Bin 0 -> 307 bytes .../Effects/atmospherics.rsi/meta.json | 1 + .../Effects/atmospherics.rsi/miasma.png | Bin 0 -> 1188 bytes .../Effects/atmospherics.rsi/miasma_old.png | Bin 0 -> 615 bytes .../atmospherics.rsi/nitrous_oxide.png | Bin 0 -> 2041 bytes .../atmospherics.rsi/nitrous_oxide_old.png | Bin 0 -> 284 bytes .../Effects/atmospherics.rsi/nitryl.png | Bin 0 -> 2152 bytes .../Effects/atmospherics.rsi/nitryl_old.png | Bin 0 -> 573 bytes .../Effects/atmospherics.rsi/phoron.png | Bin 0 -> 1953 bytes .../Effects/atmospherics.rsi/phoron_old.png | Bin 0 -> 592 bytes .../Effects/atmospherics.rsi/tritium.png | Bin 0 -> 3025 bytes .../Effects/atmospherics.rsi/tritium_old.png | Bin 0 -> 1026 bytes .../Effects/atmospherics.rsi/water_vapor.png | Bin 0 -> 1280 bytes .../atmospherics.rsi/water_vapor_old.png | Bin 0 -> 252 bytes Resources/Textures/Effects/fire.rsi/1.png | Bin 0 -> 64440 bytes Resources/Textures/Effects/fire.rsi/2.png | Bin 0 -> 118997 bytes Resources/Textures/Effects/fire.rsi/3.png | Bin 0 -> 84613 bytes Resources/Textures/Effects/fire.rsi/fire.png | Bin 0 -> 584 bytes Resources/Textures/Effects/fire.rsi/meta.json | 1 + .../Textures/Effects/fire.rsi/overcharged.png | Bin 0 -> 4849 bytes RobustToolbox | 2 +- SpaceStation14.sln.DotSettings | 8 +- 76 files changed, 4066 insertions(+), 11 deletions(-) create mode 100644 Content.Client/Atmos/GasTileOverlay.cs create mode 100644 Content.Client/GameObjects/Components/Atmos/CanSeeGasesComponent.cs create mode 100644 Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs create mode 100644 Content.Server/Atmos/AtmosCommands.cs create mode 100644 Content.Server/Atmos/EntityNetworkUtils.cs create mode 100644 Content.Server/Atmos/ExcitedGroup.cs create mode 100644 Content.Server/Atmos/GasMixture.cs create mode 100644 Content.Server/Atmos/HighPressureMovementController.cs create mode 100644 Content.Server/Atmos/Hotspot.cs create mode 100644 Content.Server/Atmos/IGridAtmosphereComponent.cs create mode 100644 Content.Server/Atmos/Reactions/GasReactionPrototype.cs create mode 100644 Content.Server/Atmos/Reactions/PhoronFireReaction.cs create mode 100644 Content.Server/Atmos/TileAtmosInfo.cs create mode 100644 Content.Server/Atmos/TileAtmosphere.cs create mode 100644 Content.Server/GameObjects/Components/Atmos/AirtightComponent.cs create mode 100644 Content.Server/GameObjects/Components/Atmos/GasAnalyzerComponent.cs create mode 100644 Content.Server/GameObjects/Components/Atmos/GasCanisterComponent.cs create mode 100644 Content.Server/GameObjects/Components/Atmos/GasMixtureComponent.cs create mode 100644 Content.Server/GameObjects/Components/Atmos/GasTankComponent.cs create mode 100644 Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs create mode 100644 Content.Server/GameObjects/Components/Atmos/MovedByPressureComponent.cs create mode 100644 Content.Server/GameObjects/EntitySystems/AtmosphereSystem.cs create mode 100644 Content.Server/GameObjects/EntitySystems/GasTileOverlaySystem.cs create mode 100644 Content.Server/Interfaces/IGasMixtureHolder.cs create mode 100644 Content.Server/Interfaces/IGasReactionEffect.cs create mode 100644 Content.Shared/Atmos/Atmospherics.cs create mode 100644 Content.Shared/Atmos/GasPrototype.cs create mode 100644 Content.Shared/GameObjects/EntitySystems/SharedGasTileOverlaySystem.cs create mode 100644 Resources/Audio/Effects/space_wind.ogg create mode 100644 Resources/Prototypes/Atmospherics/gases.yml create mode 100644 Resources/Prototypes/Atmospherics/reactions.yml create mode 100644 Resources/Textures/Effects/atmospherics.rsi/chem_gas_old.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/freon.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/freon_old.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/fusion_gas.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/meta.json create mode 100644 Resources/Textures/Effects/atmospherics.rsi/miasma.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/miasma_old.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/nitrous_oxide.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/nitrous_oxide_old.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/nitryl.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/nitryl_old.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/phoron.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/phoron_old.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/tritium.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/tritium_old.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/water_vapor.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/water_vapor_old.png create mode 100644 Resources/Textures/Effects/fire.rsi/1.png create mode 100644 Resources/Textures/Effects/fire.rsi/2.png create mode 100644 Resources/Textures/Effects/fire.rsi/3.png create mode 100644 Resources/Textures/Effects/fire.rsi/fire.png create mode 100644 Resources/Textures/Effects/fire.rsi/meta.json create mode 100644 Resources/Textures/Effects/fire.rsi/overcharged.png diff --git a/Content.Client/Atmos/GasTileOverlay.cs b/Content.Client/Atmos/GasTileOverlay.cs new file mode 100644 index 0000000000..ec0cb330fa --- /dev/null +++ b/Content.Client/Atmos/GasTileOverlay.cs @@ -0,0 +1,65 @@ +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 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 +{ + public class GasTileOverlay : Overlay + { + private readonly GasTileOverlaySystem _gasTileOverlaySystem; + + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly IEyeManager _eyeManager = default!; + [Dependency] private readonly IClyde _clyde = default!; + + public override OverlaySpace Space => OverlaySpace.WorldSpace; + + public GasTileOverlay() : base(nameof(GasTileOverlay)) + { + IoCManager.InjectDependencies(this); + + _gasTileOverlaySystem = EntitySystem.Get(); + } + + protected override void Draw(DrawingHandleBase handle, OverlaySpace overlay) + { + var drawHandle = (DrawingHandleWorld) handle; + + var mapId = _eyeManager.CurrentMap; + var eye = _eyeManager.CurrentEye; + + var worldBounds = Box2.CenteredAround(eye.Position.Position, + _clyde.ScreenSize / (float) EyeManager.PixelsPerMeter * eye.Zoom); + + foreach (var mapGrid in _mapManager.FindGridsIntersecting(mapId, worldBounds)) + { + foreach (var tile in mapGrid.GetTilesIntersecting(worldBounds)) + { + foreach (var (texture, color) in _gasTileOverlaySystem.GetOverlays(mapGrid.Index, tile.GridIndices)) + { + drawHandle.DrawTexture(texture, mapGrid.LocalToWorld(new Vector2(tile.X, tile.Y)), color); + } + } + } + } + } +} diff --git a/Content.Client/Construction/ConstructionPlacementHijack.cs b/Content.Client/Construction/ConstructionPlacementHijack.cs index 57f5503dbc..bd4431f751 100644 --- a/Content.Client/Construction/ConstructionPlacementHijack.cs +++ b/Content.Client/Construction/ConstructionPlacementHijack.cs @@ -20,12 +20,12 @@ namespace Content.Client.Construction } /// - public override bool HijackPlacementRequest(GridCoordinates coords) + public override bool HijackPlacementRequest(GridCoordinates coordinates) { if (_prototype != null) { var dir = Manager.Direction; - _constructionSystem.SpawnGhost(_prototype, coords, dir); + _constructionSystem.SpawnGhost(_prototype, coordinates, dir); } return true; } diff --git a/Content.Client/EntryPoint.cs b/Content.Client/EntryPoint.cs index af240a8cd5..837e79a79d 100644 --- a/Content.Client/EntryPoint.cs +++ b/Content.Client/EntryPoint.cs @@ -73,6 +73,7 @@ namespace Content.Client prototypes.RegisterIgnore("material"); prototypes.RegisterIgnore("reaction"); //Chemical reactions only needed by server. Reactions checks are server-side. + prototypes.RegisterIgnore("gasReaction"); prototypes.RegisterIgnore("barSign"); ClientContentIoC.Register(); diff --git a/Content.Client/GameObjects/Components/Atmos/CanSeeGasesComponent.cs b/Content.Client/GameObjects/Components/Atmos/CanSeeGasesComponent.cs new file mode 100644 index 0000000000..d95748f72b --- /dev/null +++ b/Content.Client/GameObjects/Components/Atmos/CanSeeGasesComponent.cs @@ -0,0 +1,35 @@ +using Content.Client.Atmos; +using Robust.Client.GameObjects; +using Robust.Client.Interfaces.Graphics.Overlays; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; + +namespace Content.Client.GameObjects.Components.Atmos +{ + [RegisterComponent] + public class CanSeeGasesComponent : Component + { + [Dependency] private readonly IOverlayManager _overlayManager = default!; + + public override string Name => "CanSeeGases"; + + public override void HandleMessage(ComponentMessage message, IComponent component) + { + base.HandleMessage(message, component); + + switch (message) + { + case PlayerAttachedMsg _: + if(!_overlayManager.HasOverlay(nameof(GasTileOverlay))) + _overlayManager.AddOverlay(new GasTileOverlay()); + break; + + case PlayerDetachedMsg _: + if(!_overlayManager.HasOverlay(nameof(GasTileOverlay))) + _overlayManager.RemoveOverlay(nameof(GasTileOverlay)); + break; + } + } + } +} diff --git a/Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs b/Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs new file mode 100644 index 0000000000..1e2f0220af --- /dev/null +++ b/Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs @@ -0,0 +1,167 @@ +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 +{ + [UsedImplicitly] + public sealed class GasTileOverlaySystem : SharedGasTileOverlaySystem + { + [Dependency] private readonly IResourceCache _resourceCache = default!; + + private readonly Dictionary _fireCache = new Dictionary(); + + // Gas overlays + private readonly float[] _timer = new float[Atmospherics.TotalNumberOfGases]; + private readonly float[][] _frameDelays = new float[Atmospherics.TotalNumberOfGases][]; + private readonly int[] _frameCounter = new int[Atmospherics.TotalNumberOfGases]; + private readonly Texture[][] _frames = new Texture[Atmospherics.TotalNumberOfGases][]; + + // Fire overlays + private const int FireStates = 3; + private const string FireRsiPath = "/Textures/Effects/fire.rsi"; + + private readonly float[] _fireTimer = new float[FireStates]; + private readonly float[][] _fireFrameDelays = new float[FireStates][]; + private readonly int[] _fireFrameCounter = new int[FireStates]; + private readonly Texture[][] _fireFrames = new Texture[FireStates][]; + + private Dictionary> _overlay = new Dictionary>(); + + public override void Initialize() + { + base.Initialize(); + + SubscribeNetworkEvent(new EntityEventHandler(OnTileOverlayMessage)); + + for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++) + { + var gas = Atmospherics.GetGas(i); + switch (gas.GasOverlay) + { + case SpriteSpecifier.Rsi animated: + var rsi = _resourceCache.GetResource(animated.RsiPath).RSI; + var stateId = animated.RsiState; + + if(!rsi.TryGetState(stateId, out var state)) continue; + + _frames[i] = state.GetFrames(RSI.State.Direction.South); + _frameDelays[i] = state.GetDelays(); + _frameCounter[i] = 0; + break; + case SpriteSpecifier.Texture texture: + _frames[i] = new[] {texture.Frame0()}; + _frameDelays[i] = Array.Empty(); + break; + case null: + _frames[i] = Array.Empty(); + _frameDelays[i] = Array.Empty(); + break; + } + } + + var fire = _resourceCache.GetResource(FireRsiPath).RSI; + + for (var i = 0; i < FireStates; i++) + { + if (!fire.TryGetState((i+1).ToString(), out var state)) + throw new ArgumentOutOfRangeException($"Fire RSI doesn't have state \"{i}\"!"); + + _fireFrames[i] = state.GetFrames(RSI.State.Direction.South); + _fireFrameDelays[i] = state.GetDelays(); + _fireFrameCounter[i] = 0; + } + } + + public (Texture, Color color)[] GetOverlays(GridId gridIndex, MapIndices indices) + { + if (!_overlay.TryGetValue(gridIndex, out var tiles) || !tiles.TryGetValue(indices, out var overlays)) + return Array.Empty<(Texture, Color)>(); + + var fire = overlays.FireState != 0; + var length = overlays.Gas.Length + (fire ? 1 : 0); + + var list = new (Texture, Color)[length]; + + for (var i = 0; i < overlays.Gas.Length; i++) + { + var gasData = overlays.Gas[i]; + var frames = _frames[gasData.Index]; + list[i] = (frames[_frameCounter[gasData.Index]], Color.White.WithAlpha(gasData.Opacity)); + } + + if (fire) + { + var state = overlays.FireState - 1; + var frames = _fireFrames[state]; + // TODO ATMOS Set color depending on temperature + list[length - 1] = (frames[_fireFrameCounter[state]], Color.White); + } + + return list; + } + + private void OnTileOverlayMessage(GasTileOverlayMessage ev) + { + if(ev.ClearAllOtherOverlays) + _overlay.Clear(); + + foreach (var data in ev.OverlayData) + { + if (!_overlay.TryGetValue(data.GridIndex, out var gridOverlays)) + { + gridOverlays = new Dictionary(); + _overlay.Add(data.GridIndex, gridOverlays); + } + + gridOverlays[data.GridIndices] = data.Data; + } + } + + public override void FrameUpdate(float frameTime) + { + base.FrameUpdate(frameTime); + + for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++) + { + var delays = _frameDelays[i]; + if (delays.Length == 0) continue; + + var frameCount = _frameCounter[i]; + _timer[i] += frameTime; + if (!(_timer[i] >= delays[frameCount])) continue; + _timer[i] = 0f; + _frameCounter[i] = (frameCount + 1) % _frames[i].Length; + } + + for (var i = 0; i < FireStates; i++) + { + var delays = _fireFrameDelays[i]; + if (delays.Length == 0) continue; + + var frameCount = _fireFrameCounter[i]; + _fireTimer[i] += frameTime; + if (!(_fireTimer[i] >= delays[frameCount])) continue; + _fireTimer[i] = 0f; + _fireFrameCounter[i] = (frameCount + 1) % _fireFrames[i].Length; + } + } + } +} diff --git a/Content.Client/IgnoredComponents.cs b/Content.Client/IgnoredComponents.cs index ed9b52f05f..8bf1b6e330 100644 --- a/Content.Client/IgnoredComponents.cs +++ b/Content.Client/IgnoredComponents.cs @@ -149,6 +149,8 @@ "Conveyor", "ConveyorSwitch", "Flippable", + "Airtight", + "MovedByPressure", }; } } diff --git a/Content.Server/Atmos/AtmosCommands.cs b/Content.Server/Atmos/AtmosCommands.cs new file mode 100644 index 0000000000..45f50bbe24 --- /dev/null +++ b/Content.Server/Atmos/AtmosCommands.cs @@ -0,0 +1,317 @@ +#nullable enable +using System; +using Content.Server.GameObjects.Components.Atmos; +using Content.Shared.Atmos; +using Robust.Server.Interfaces.Console; +using Robust.Server.Interfaces.Player; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.IoC; +using Robust.Shared.Map; + +namespace Content.Server.Atmos +{ + public class AddAtmos : IClientCommand + { + public string Command => "addatmos"; + public string Description => "Adds atmos support to a grid."; + public string Help => "addatmos "; + public void Execute(IConsoleShell shell, IPlayerSession? player, string[] args) + { + if (args.Length < 1) return; + if(!int.TryParse(args[0], out var id)) return; + + var gridId = new GridId(id); + + var mapMan = IoCManager.Resolve(); + + if (!gridId.IsValid() || !mapMan.TryGetGrid(gridId, out var gridComp)) + { + shell.SendText(player, "Invalid grid ID."); + return; + } + + var entMan = IoCManager.Resolve(); + + if (!entMan.TryGetEntity(gridComp.GridEntityId, out var grid)) + { + shell.SendText(player, "Failed to get grid entity."); + return; + } + + if (grid.HasComponent()) + { + shell.SendText(player, "Grid already has an atmosphere."); + return; + } + + grid.AddComponent(); + + shell.SendText(player, $"Added atmosphere to grid {id}."); + } + } + + public class ListGases : IClientCommand + { + public string Command => "listgases"; + public string Description => "Prints a list of gases and their indices."; + public string Help => "listgases"; + public void Execute(IConsoleShell shell, IPlayerSession? player, string[] args) + { + foreach (var gasPrototype in Atmospherics.Gases) + { + shell.SendText(player, $"{gasPrototype.Name} ID: {gasPrototype.ID}"); + } + } + } + + public class AddGas : IClientCommand + { + public string Command => "addgas"; + public string Description => "Adds gas at a certain position."; + public string Help => "addgas "; + public void Execute(IConsoleShell shell, IPlayerSession? player, string[] args) + { + var gasId = -1; + var gas = (Gas) (-1); + if (args.Length < 5) return; + if(!int.TryParse(args[0], out var x) + || !int.TryParse(args[1], out var y) + || !int.TryParse(args[2], out var id) + || !(int.TryParse(args[3], out gasId) || Enum.TryParse(args[3], out gas)) + || !float.TryParse(args[4], out var moles)) return; + + var gridId = new GridId(id); + + var mapMan = IoCManager.Resolve(); + + if (!gridId.IsValid() || !mapMan.TryGetGrid(gridId, out var gridComp)) + { + shell.SendText(player, "Invalid grid ID."); + return; + } + + var entMan = IoCManager.Resolve(); + + if (!entMan.TryGetEntity(gridComp.GridEntityId, out var grid)) + { + shell.SendText(player, "Failed to get grid entity."); + return; + } + + if (!grid.HasComponent()) + { + shell.SendText(player, "Grid doesn't have an atmosphere."); + return; + } + + var gam = grid.GetComponent(); + var indices = new MapIndices(x, y); + var tile = gam.GetTile(indices); + + if (tile == null) + { + shell.SendText(player, "Invalid coordinates."); + return; + } + + if (tile.Air == null) + { + shell.SendText(player, "Can't add gas to that tile."); + return; + } + + if (gasId != -1) + { + tile.Air.AdjustMoles(gasId, moles); + gam.Invalidate(indices); + return; + } + + tile.Air.AdjustMoles(gas, moles); + gam.Invalidate(indices); + } + } + + public class FillGas : IClientCommand + { + public string Command => "fillgas"; + public string Description => "Adds gas to all tiles in a grid."; + public string Help => "fillgas "; + public void Execute(IConsoleShell shell, IPlayerSession? player, string[] args) + { + var gasId = -1; + var gas = (Gas) (-1); + if (args.Length < 3) return; + if(!int.TryParse(args[0], out var id) + || !(int.TryParse(args[1], out gasId) || Enum.TryParse(args[1], out gas)) + || !float.TryParse(args[2], out var moles)) return; + + var gridId = new GridId(id); + + var mapMan = IoCManager.Resolve(); + + if (!gridId.IsValid() || !mapMan.TryGetGrid(gridId, out var gridComp)) + { + shell.SendText(player, "Invalid grid ID."); + return; + } + + var entMan = IoCManager.Resolve(); + + if (!entMan.TryGetEntity(gridComp.GridEntityId, out var grid)) + { + shell.SendText(player, "Failed to get grid entity."); + return; + } + + if (!grid.HasComponent()) + { + shell.SendText(player, "Grid doesn't have an atmosphere."); + return; + } + + var gam = grid.GetComponent(); + + foreach (var tile in gam) + { + if (gasId != -1) + { + tile.Air?.AdjustMoles(gasId, moles); + gam.Invalidate(tile.GridIndices); + continue; + } + + tile.Air?.AdjustMoles(gas, moles); + gam.Invalidate(tile.GridIndices); + } + } + } + + public class RemoveGas : IClientCommand + { + public string Command => "removegas"; + public string Description => "Removes an amount of gases."; + public string Help => "removegas \nIf is true, amount will be treated as the ratio of gas to be removed."; + public void Execute(IConsoleShell shell, IPlayerSession? player, string[] args) + { + if (args.Length < 5) return; + if(!int.TryParse(args[0], out var x) + || !int.TryParse(args[1], out var y) + || !int.TryParse(args[2], out var id) + || !float.TryParse(args[3], out var amount) + || !bool.TryParse(args[4], out var ratio)) return; + + var gridId = new GridId(id); + + var mapMan = IoCManager.Resolve(); + + if (!gridId.IsValid() || !mapMan.TryGetGrid(gridId, out var gridComp)) + { + shell.SendText(player, "Invalid grid ID."); + return; + } + + var entMan = IoCManager.Resolve(); + + if (!entMan.TryGetEntity(gridComp.GridEntityId, out var grid)) + { + shell.SendText(player, "Failed to get grid entity."); + return; + } + + if (!grid.HasComponent()) + { + shell.SendText(player, "Grid doesn't have an atmosphere."); + return; + } + + var gam = grid.GetComponent(); + var indices = new MapIndices(x, y); + var tile = gam.GetTile(indices); + + if (tile == null) + { + shell.SendText(player, "Invalid coordinates."); + return; + } + + if (tile.Air == null) + { + shell.SendText(player, "Can't remove gas from that tile."); + return; + } + + if (ratio) + tile.Air.RemoveRatio(amount); + else + tile.Air.Remove(amount); + + gam.Invalidate(indices); + } + } + + public class SetTemperature : IClientCommand + { + public string Command => "settemp"; + public string Description => "Sets a tile's temperature."; + public string Help => "Usage: settemp "; + public void Execute(IConsoleShell shell, IPlayerSession? player, string[] args) + { + if (args.Length < 4) return; + if(!int.TryParse(args[0], out var x) + || !int.TryParse(args[1], out var y) + || !int.TryParse(args[2], out var id) + || !float.TryParse(args[3], out var temperature)) return; + + var gridId = new GridId(id); + + var mapMan = IoCManager.Resolve(); + + if (temperature < Atmospherics.TCMB) + { + shell.SendText(player, "Invalid temperature."); + return; + } + + if (!gridId.IsValid() || !mapMan.TryGetGrid(gridId, out var gridComp)) + { + shell.SendText(player, "Invalid grid ID."); + return; + } + + var entMan = IoCManager.Resolve(); + + if (!entMan.TryGetEntity(gridComp.GridEntityId, out var grid)) + { + shell.SendText(player, "Failed to get grid entity."); + return; + } + + if (!grid.HasComponent()) + { + shell.SendText(player, "Grid doesn't have an atmosphere."); + return; + } + + var gam = grid.GetComponent(); + var indices = new MapIndices(x, y); + var tile = gam.GetTile(indices); + + if (tile == null) + { + shell.SendText(player, "Invalid coordinates."); + return; + } + + if (tile.Air == null) + { + shell.SendText(player, "Can't change that tile's temperature."); + return; + } + + tile.Air.Temperature = temperature; + gam.Invalidate(indices); + } + } +} diff --git a/Content.Server/Atmos/EntityNetworkUtils.cs b/Content.Server/Atmos/EntityNetworkUtils.cs new file mode 100644 index 0000000000..f5d09e947b --- /dev/null +++ b/Content.Server/Atmos/EntityNetworkUtils.cs @@ -0,0 +1,31 @@ +using System; +using Robust.Shared.Map; +using Robust.Shared.Maths; + +namespace Content.Server.Atmos +{ + public static class EntityNetworkUtils + { + public static Vector2i CardinalToIntVec(this Direction dir) + { + switch (dir) + { + case Direction.North: + return new Vector2i(0, 1); + case Direction.East: + return new Vector2i(1, 0); + case Direction.South: + return new Vector2i(0, -1); + case Direction.West: + return new Vector2i(-1, 0); + default: + throw new ArgumentException($"Direction dir {dir} is not a cardinal direction", nameof(dir)); + } + } + + public static MapIndices Offset(this MapIndices pos, Direction dir) + { + return pos + (MapIndices) dir.CardinalToIntVec(); + } + } +} diff --git a/Content.Server/Atmos/ExcitedGroup.cs b/Content.Server/Atmos/ExcitedGroup.cs new file mode 100644 index 0000000000..7935be28b5 --- /dev/null +++ b/Content.Server/Atmos/ExcitedGroup.cs @@ -0,0 +1,139 @@ +using System; +using System.Collections.Generic; +using Content.Server.GameObjects.Components.Atmos; +using Content.Shared.Atmos; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Atmos +{ + public class ExcitedGroup : IDisposable + { + [ViewVariables] + private bool _disposed = false; + + [ViewVariables] + private readonly HashSet _tile = new HashSet(); + + [ViewVariables] + private GridAtmosphereComponent _gridAtmosphereComponent; + + [ViewVariables] + public int DismantleCooldown { get; set; } + + [ViewVariables] + public int BreakdownCooldown { get; set; } + + public void AddTile(TileAtmosphere tile) + { + _tile.Add(tile); + tile.ExcitedGroup = this; + ResetCooldowns(); + } + + public void MergeGroups(ExcitedGroup other) + { + var ourSize = _tile.Count; + var otherSize = other._tile.Count; + + if (ourSize > otherSize) + { + foreach (var tile in other._tile) + { + tile.ExcitedGroup = this; + _tile.Add(tile); + } + other._tile.Clear(); + other.Dispose(); + ResetCooldowns(); + } + else + { + foreach (var tile in _tile) + { + tile.ExcitedGroup = other; + other._tile.Add(tile); + } + _tile.Clear(); + Dispose(); + other.ResetCooldowns(); + } + } + + ~ExcitedGroup() + { + Dispose(); + } + + public void Initialize(GridAtmosphereComponent gridAtmosphereComponent) + { + _gridAtmosphereComponent = gridAtmosphereComponent; + _gridAtmosphereComponent.AddExcitedGroup(this); + } + + public void ResetCooldowns() + { + BreakdownCooldown = 0; + DismantleCooldown = 0; + } + + public void SelfBreakdown(bool spaceIsAllConsuming = false) + { + var combined = new GasMixture(Atmospherics.CellVolume); + + var tileSize = _tile.Count; + + if (_disposed) return; + + if (tileSize == 0) + { + Dispose(); + return; + } + + foreach (var tile in _tile) + { + if (tile?.Air == null) continue; + combined.Merge(tile.Air); + if (!spaceIsAllConsuming || !tile.Air.Immutable) continue; + combined.Clear(); + break; + } + + combined.Multiply(1 / (float)tileSize); + + foreach (var tile in _tile) + { + if (tile?.Air == null) continue; + tile.Air.CopyFromMutable(combined); + tile.UpdateVisuals(); + } + + BreakdownCooldown = 0; + } + + public void Dismantle(bool unexcite = true) + { + foreach (var tile in _tile) + { + if (tile == null) continue; + tile.ExcitedGroup = null; + if (!unexcite) continue; + tile.Excited = false; + _gridAtmosphereComponent.RemoveActiveTile(tile); + } + + _tile.Clear(); + } + + public void Dispose() + { + if (_disposed) return; + _disposed = true; + _gridAtmosphereComponent.RemoveExcitedGroup(this); + + Dismantle(); + + _gridAtmosphereComponent = null; + } + } +} diff --git a/Content.Server/Atmos/GasMixture.cs b/Content.Server/Atmos/GasMixture.cs new file mode 100644 index 0000000000..341d3f7a66 --- /dev/null +++ b/Content.Server/Atmos/GasMixture.cs @@ -0,0 +1,543 @@ +#nullable enable +using System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using Content.Server.Atmos.Reactions; +using Content.Server.Interfaces; +using Content.Shared.Atmos; +using Robust.Shared.Interfaces.Serialization; +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 +{ + /// + /// A general-purpose, variable volume gas mixture. + /// + [Serializable] + public class GasMixture : IExposeData, IEquatable, ICloneable + { + [ViewVariables] + private float[] _moles = new float[Atmospherics.TotalNumberOfGases]; + + [ViewVariables] + private float[] _molesArchived = new float[Atmospherics.TotalNumberOfGases]; + private float _temperature = Atmospherics.TCMB; + public IReadOnlyList Gases => _moles; + + [ViewVariables] + public bool Immutable { get; private set; } + + [ViewVariables] + public float LastShare { get; private set; } = 0; + + [ViewVariables] + public float HeatCapacity + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + var capacity = 0f; + + for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++) + { + capacity += Atmospherics.GetGas(i).SpecificHeat * _moles[i]; + } + + return MathF.Max(capacity, Atmospherics.MinimumHeatCapacity); + } + } + + [ViewVariables] + public float HeatCapacityArchived + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + var capacity = 0f; + + for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++) + { + capacity += Atmospherics.GetGas(i).SpecificHeat * _molesArchived[i]; + } + + return MathF.Max(capacity, Atmospherics.MinimumHeatCapacity); + } + } + + [ViewVariables] + public float TotalMoles + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + var moles = 0f; + + foreach (var gas in _moles) + { + moles += gas; + } + + return moles; + } + } + + [ViewVariables] + public float Pressure + { + get + { + if (Volume <= 0) return 0f; + return TotalMoles * Atmospherics.R * Temperature / Volume; + } + } + + [ViewVariables] + public float Temperature + { + get => _temperature; + set + { + if(value < Atmospherics.TCMB) + throw new Exception($"Tried to set gas temperature below CMB! Value: {value}"); + + if (Immutable) return; + _temperature = value; + } + } + + public float ReactionResultFire { get; set; } + + [ViewVariables] + public float ThermalEnergy => Temperature * HeatCapacity; + + [ViewVariables] + public float TemperatureArchived { get; private set; } + + [ViewVariables] + public float Volume { get; set; } + + public GasMixture() + { + } + + public GasMixture(float volume) + { + if (volume < 0) + volume = 0; + Volume = volume; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void MarkImmutable() + { + Immutable = true; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Archive() + { + _moles.AsSpan().CopyTo(_molesArchived.AsSpan()); + TemperatureArchived = Temperature; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Merge(GasMixture giver) + { + if (Immutable || giver == null) return; + + if (MathF.Abs(Temperature - giver.Temperature) > Atmospherics.MinimumTemperatureDeltaToConsider) + { + var combinedHeatCapacity = HeatCapacity + giver.HeatCapacity; + if (combinedHeatCapacity > 0f) + { + Temperature = + (giver.Temperature * giver.HeatCapacity + Temperature * HeatCapacity) / combinedHeatCapacity; + } + } + + for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++) + { + _moles[i] += giver._moles[i]; + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public float GetMoles(int gasId) + { + return _moles[gasId]; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public float GetMoles(Gas gas) + { + return GetMoles((int)gas); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetMoles(int gasId, float quantity) + { + if (!Immutable) + _moles[gasId] = quantity; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetMoles(Gas gas, float quantity) + { + SetMoles((int)gas, quantity); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void AdjustMoles(int gasId, float quantity) + { + if (!Immutable) + _moles[gasId] += quantity; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void AdjustMoles(Gas gas, float moles) + { + AdjustMoles((int)gas, moles); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public GasMixture Remove(float amount) + { + return RemoveRatio(amount / TotalMoles); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public GasMixture RemoveRatio(float ratio) + { + if(ratio <= 0) + return new GasMixture(Volume); + + if (ratio > 1) + ratio = 1; + + var removed = new GasMixture {Volume = Volume, Temperature = Temperature}; + + for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++) + { + var moles = _moles[i]; + if (moles < Atmospherics.GasMinMoles) + removed._moles[i] = 0f; + else + { + var removedMoles = moles * ratio; + removed._moles[i] = removedMoles; + if (!Immutable) + _moles[i] -= removedMoles; + } + } + + return removed; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void CopyFromMutable(GasMixture sample) + { + if (Immutable) return; + sample._moles.AsSpan().CopyTo(_moles.AsSpan()); + Temperature = sample.Temperature; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public float Share(GasMixture sharer, int atmosAdjacentTurfs) + { + var temperatureDelta = TemperatureArchived - sharer.TemperatureArchived; + var absTemperatureDelta = Math.Abs(temperatureDelta); + var oldHeatCapacity = 0f; + var oldSharerHeatCapacity = 0f; + + if (absTemperatureDelta > Atmospherics.MinimumTemperatureDeltaToConsider) + { + oldHeatCapacity = HeatCapacity; + oldSharerHeatCapacity = sharer.HeatCapacity; + } + + var heatCapacityToSharer = 0f; + var heatCapacitySharerToThis = 0f; + var movedMoles = 0f; + var absMovedMoles = 0f; + + for(var i = 0; i < Atmospherics.TotalNumberOfGases; i++) + { + var thisValue = _moles[i]; + var sharerValue = sharer._moles[i]; + var delta = (thisValue - sharerValue) / (atmosAdjacentTurfs + 1); + if (!(MathF.Abs(delta) >= Atmospherics.GasMinMoles)) continue; + if (absTemperatureDelta > Atmospherics.MinimumTemperatureDeltaToConsider) + { + var gasHeatCapacity = delta * Atmospherics.GetGas(i).SpecificHeat; + if (delta > 0) + { + heatCapacityToSharer += gasHeatCapacity; + } + else + { + heatCapacitySharerToThis -= gasHeatCapacity; + } + } + + if (!Immutable) _moles[i] -= delta; + if (!sharer.Immutable) sharer._moles[i] += delta; + movedMoles += delta; + absMovedMoles += MathF.Abs(delta); + } + + LastShare = absMovedMoles; + + if (absTemperatureDelta > Atmospherics.MinimumTemperatureDeltaToConsider) + { + var newHeatCapacity = oldHeatCapacity + heatCapacitySharerToThis - heatCapacityToSharer; + var newSharerHeatCapacity = oldSharerHeatCapacity + heatCapacityToSharer - heatCapacitySharerToThis; + + // Transfer of thermal energy (via changed heat capacity) between self and sharer. + if (!Immutable && newHeatCapacity > Atmospherics.MinimumHeatCapacity) + { + Temperature = ((oldHeatCapacity * Temperature) - (heatCapacityToSharer * TemperatureArchived) + (heatCapacitySharerToThis * sharer.TemperatureArchived)) / newHeatCapacity; + } + + if (!sharer.Immutable && newSharerHeatCapacity > Atmospherics.MinimumHeatCapacity) + { + sharer.Temperature = ((oldSharerHeatCapacity * sharer.Temperature) - (heatCapacitySharerToThis * sharer.TemperatureArchived) + (heatCapacityToSharer*TemperatureArchived)) / newSharerHeatCapacity; + } + + // Thermal energy of the system (self and sharer) is unchanged. + + if (MathF.Abs(oldSharerHeatCapacity) > Atmospherics.MinimumHeatCapacity) + { + if (MathF.Abs(newSharerHeatCapacity / oldSharerHeatCapacity - 1) < 0.1) + { + TemperatureShare(sharer, Atmospherics.OpenHeatTransferCoefficient); + } + } + } + + if (!(temperatureDelta > Atmospherics.MinimumTemperatureToMove) && + !(MathF.Abs(movedMoles) > Atmospherics.MinimumMolesDeltaToMove)) return 0f; + var moles = TotalMoles; + var theirMoles = sharer.TotalMoles; + + return (TemperatureArchived * (moles + movedMoles)) - (sharer.TemperatureArchived * (theirMoles - movedMoles)) * Atmospherics.R / Volume; + + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void TemperatureShare(GasMixture sharer, float conductionCoefficient) + { + var temperatureDelta = TemperatureArchived - sharer.TemperatureArchived; + if (MathF.Abs(temperatureDelta) > Atmospherics.MinimumTemperatureDeltaToConsider) + { + var heatCapacity = HeatCapacityArchived; + var sharerHeatCapacity = sharer.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)); + + if (!sharer.Immutable) + sharer.Temperature = MathF.Abs(MathF.Max(sharer.Temperature + heat / sharerHeatCapacity, Atmospherics.TCMB)); + } + } + } + + public enum GasCompareResult + { + NoExchange = -2, + TemperatureExchange = -1, + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public GasCompareResult Compare(GasMixture sample) + { + var moles = 0f; + + for(var i = 0; i < Atmospherics.TotalNumberOfGases; i++) + { + var gasMoles = _moles[i]; + var delta = MathF.Abs(gasMoles - sample._moles[i]); + if (delta > Atmospherics.MinimumMolesDeltaToMove && (delta > gasMoles * Atmospherics.MinimumAirRatioToMove)) + return (GasCompareResult)i; // We can move gases! + moles += gasMoles; + } + + if (moles > Atmospherics.MinimumMolesDeltaToMove) + { + var tempDelta = MathF.Abs(Temperature - sample.Temperature); + if (tempDelta > Atmospherics.MinimumTemperatureDeltaToSuspend) + return GasCompareResult.TemperatureExchange; // There can be temperature exchange. + } + + // No exchange at all! + return GasCompareResult.NoExchange; + } + + /// + /// Pump gas from this mixture to the output mixture. + /// Amount depends on target pressure. + /// + /// The mixture to pump the gas to + /// The target pressure to reach + /// Whether we could pump air to the output or not + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool PumpGasTo(GasMixture outputAir, float targetPressure) + { + var outputStartingPressure = outputAir.Pressure; + var pressureDelta = targetPressure - outputStartingPressure; + + if (pressureDelta < 0.01) + // No need to pump gas, we've reached the target. + return false; + + if (!(TotalMoles > 0) || !(Temperature > 0)) return false; + + // We calculate the necessary moles to transfer with the ideal gas law. + var transferMoles = pressureDelta * outputAir.Volume / (Temperature * Atmospherics.R); + + // And now we transfer the gas. + var removed = Remove(transferMoles); + outputAir.Merge(removed); + return true; + } + + /// + /// Releases gas from this mixture to the output mixture. + /// It can't transfer air to a mixture with higher pressure. + /// + /// + /// + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool ReleaseGasTo(GasMixture outputAir, float targetPressure) + { + var outputStartingPressure = outputAir.Pressure; + var inputStartingPressure = Pressure; + + if (outputStartingPressure >= MathF.Min(targetPressure, inputStartingPressure - 10)) + // No need to pump gas if the target is already reached or input pressure is too low. + // Need at least 10 kPa difference to overcome friction in the mechanism. + return false; + + if (!(TotalMoles > 0) || !(Temperature > 0)) return false; + + // We calculate the necessary moles to transfer with the ideal gas law. + var pressureDelta = MathF.Min(targetPressure - outputStartingPressure, (inputStartingPressure - outputStartingPressure) / 2f); + var transferMoles = pressureDelta * outputAir.Volume / (Temperature * Atmospherics.R); + + // And now we transfer the gas. + var removed = Remove(transferMoles); + outputAir.Merge(removed); + + return true; + + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public ReactionResult React(IGasMixtureHolder holder) + { + var reaction = ReactionResult.NoReaction; + var temperature = Temperature; + var energy = ThermalEnergy; + + // TODO ATMOS Take reaction priority into account! + foreach (var prototype in IoCManager.Resolve().EnumeratePrototypes()) + { + if (energy < prototype.MinimumEnergyRequirement || + temperature < prototype.MinimumTemperatureRequirement) + continue; + + for (var i = 0; i < prototype.MinimumRequirements.Length; i++) + { + if(i > Atmospherics.TotalNumberOfGases) + throw new IndexOutOfRangeException("Reaction Gas Minimum Requirements Array Prototype exceeds total number of gases!"); + + var req = prototype.MinimumRequirements[i]; + if (GetMoles(i) < req) + continue; + + reaction = prototype.React(this, holder); + if(reaction.HasFlag(ReactionResult.NoReaction)) + break; + } + } + + return reaction; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Clear() + { + if (Immutable) return; + Array.Clear(_moles, 0, Atmospherics.TotalNumberOfGases); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Multiply(float multiplier) + { + if (Immutable) return; + for(var i = 0; i < Atmospherics.TotalNumberOfGases; i++) + { + _moles[i] *= multiplier; + } + } + + public void ExposeData(ObjectSerializer serializer) + { + serializer.DataField(this, x => Immutable, "immutable", false); + serializer.DataField(this, x => Volume, "volume", 0f); + serializer.DataField(this, x => LastShare, "lastShare", 0f); + serializer.DataField(this, x => TemperatureArchived, "temperatureArchived", 0f); + serializer.DataField(ref _moles, "moles", new float[Atmospherics.TotalNumberOfGases]); + serializer.DataField(ref _molesArchived, "molesArchived", new float[Atmospherics.TotalNumberOfGases]); + serializer.DataField(ref _temperature, "temperature", Atmospherics.TCMB); + } + + public override bool Equals(object? obj) + { + if (obj is GasMixture mix) + return Equals(mix); + return false; + } + + public bool Equals(GasMixture? other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return Equals(_moles, other._moles) + && Equals(_molesArchived, other._molesArchived) + && _temperature.Equals(other._temperature) + && Immutable == other.Immutable + && LastShare.Equals(other.LastShare) + && TemperatureArchived.Equals(other.TemperatureArchived) + && Volume.Equals(other.Volume); + } + + public override int GetHashCode() + { + return HashCode.Combine(_moles, _molesArchived, _temperature, Immutable, LastShare, TemperatureArchived, Volume); + } + + public object Clone() + { + return new GasMixture() + { + _moles = (float[])_moles.Clone(), + _molesArchived = (float[])_molesArchived.Clone(), + _temperature = _temperature, + Immutable = Immutable, + LastShare = LastShare, + TemperatureArchived = TemperatureArchived, + Volume = Volume, + }; + } + } +} diff --git a/Content.Server/Atmos/HighPressureMovementController.cs b/Content.Server/Atmos/HighPressureMovementController.cs new file mode 100644 index 0000000000..b7644151d4 --- /dev/null +++ b/Content.Server/Atmos/HighPressureMovementController.cs @@ -0,0 +1,81 @@ +#nullable enable +using Content.Server.GameObjects.Components.Atmos; +using Robust.Shared.GameObjects.Components; +using Robust.Shared.Interfaces.Physics; +using Robust.Shared.Interfaces.Random; +using Robust.Shared.IoC; +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 +{ + public class HighPressureMovementController : VirtualController + { + [Dependency] private IRobustRandom _robustRandom = default!; + [Dependency] private IPhysicsManager _physicsManager = default!; + public override ICollidableComponent? ControlledComponent { protected get; set; } + + private const float MoveForcePushRatio = 1f; + private const float MoveForceForcePushRatio = 1f; + private const float ProbabilityOffset = 25f; + private const float ProbabilityBasePercent = 10f; + private const float ThrowForce = 100f; + + public void ExperiencePressureDifference(int cycle, float pressureDifference, Direction direction, + float pressureResistanceProbDelta, GridCoordinates throwTarget) + { + if (ControlledComponent == null) + return; + + // TODO ATMOS stuns? + + var transform = ControlledComponent.Owner.Transform; + var pressureComponent = ControlledComponent.Owner.GetComponent(); + var maxForce = MathF.Sqrt(pressureDifference) * 2.25f; + var moveProb = 100f; + + if (pressureComponent.PressureResistance > 0) + moveProb = MathF.Abs((pressureDifference / pressureComponent.PressureResistance * ProbabilityBasePercent) - + ProbabilityOffset); + + if (moveProb > ProbabilityOffset && _robustRandom.Prob(MathF.Min(moveProb / 100f, 1f)) + && !float.IsPositiveInfinity(pressureComponent.MoveResist) + && (!ControlledComponent.Anchored + && (maxForce >= (pressureComponent.MoveResist * MoveForcePushRatio))) + || (ControlledComponent.Anchored && (maxForce >= (pressureComponent.MoveResist * MoveForceForcePushRatio)))) + { + + + if (maxForce > ThrowForce && throwTarget != GridCoordinates.InvalidGrid) + { + 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; + } + + pressureComponent.LastHighPressureMovementAirCycle = cycle; + } + } + + public override void UpdateAfterProcessing() + { + base.UpdateAfterProcessing(); + + if (ControlledComponent != null && !_physicsManager.IsWeightless(ControlledComponent.Owner.Transform.GridPosition)) + { + LinearVelocity *= 0.85f; + if (LinearVelocity.Length < 1f) + Stop(); + } + } + } +} diff --git a/Content.Server/Atmos/Hotspot.cs b/Content.Server/Atmos/Hotspot.cs new file mode 100644 index 0000000000..2178a6bea8 --- /dev/null +++ b/Content.Server/Atmos/Hotspot.cs @@ -0,0 +1,34 @@ +using Robust.Shared.ViewVariables; + +namespace Content.Server.Atmos +{ + public struct Hotspot + { + [ViewVariables] + public bool Valid; + + [ViewVariables] + public bool SkippedFirstProcess; + + [ViewVariables] + public bool Bypassing; + + [ViewVariables] + public float Temperature; + + [ViewVariables] + public float Volume; + + /// + /// State for the fire sprite. + /// + [ViewVariables] + public int State; + + public void Start() + { + Valid = true; + State = 1; + } + } +} diff --git a/Content.Server/Atmos/IGridAtmosphereComponent.cs b/Content.Server/Atmos/IGridAtmosphereComponent.cs new file mode 100644 index 0000000000..5fdd25b2e3 --- /dev/null +++ b/Content.Server/Atmos/IGridAtmosphereComponent.cs @@ -0,0 +1,133 @@ +using System.Collections.Generic; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Map; + +namespace Content.Server.Atmos +{ + public interface IGridAtmosphereComponent : IComponent, IEnumerable + { + /// + /// Number of times has been called. + /// + int UpdateCounter { get; } + + /// + /// How many tiles have high pressure delta. + /// + int HighPressureDeltaCount { get; } + + /// + /// Control variable for equalization. + /// + long EqualizationQueueCycleControl { get; set; } + + /// + /// Attemps to pry a tile. + /// + /// + void PryTile(MapIndices indices); + + /// + /// Burns a tile. + /// + /// + void BurnTile(MapIndices gridIndices); + + /// + /// Invalidates a coordinate to be revalidated again. + /// Use this after changing a tile's gas contents, or when the tile becomes space, etc. + /// + /// + void Invalidate(MapIndices indices); + + /// + /// Adds an active tile so it becomes processed every update until it becomes inactive. + /// Also makes the tile excited. + /// + /// + void AddActiveTile(TileAtmosphere tile); + + /// + /// Removes an active tile and disposes of its . + /// Use with caution. + /// + /// + void RemoveActiveTile(TileAtmosphere tile); + + /// + /// Marks a tile as having a hotspot so it can be processed. + /// + /// + void AddHotspotTile(TileAtmosphere tile); + + /// + /// Removes a tile from the hotspot processing list. + /// + /// + void RemoveHotspotTile(TileAtmosphere tile); + + /// + /// Marks a tile has having high pressure differences that need to be equalized. + /// + /// + void AddHighPressureDelta(TileAtmosphere tile); + + /// + /// Returns whether the tile in question is marked as having high pressure differences or not. + /// + /// + /// + bool HasHighPressureDelta(TileAtmosphere tile); + + /// + /// Adds a excited group to be processed. + /// + /// + void AddExcitedGroup(ExcitedGroup excitedGroup); + + /// + /// Removes an excited group. + /// + /// + void RemoveExcitedGroup(ExcitedGroup excitedGroup); + + /// + /// Returns a tile. + /// + /// + /// + TileAtmosphere GetTile(MapIndices indices); + + /// + /// Returns a tile. + /// + /// + /// + TileAtmosphere GetTile(GridCoordinates coordinates); + + /// + /// Returns if the tile in question is air-blocked. + /// This could be due to a wall, an airlock, etc. + /// Also see AirtightComponent. + /// + /// + /// + bool IsAirBlocked(MapIndices indices); + + /// + /// Returns if the tile in question is space. + /// + /// + /// + bool IsSpace(MapIndices indices); + + /// + /// Returns the volume in liters for a number of cells/tiles. + /// + /// + /// + float GetVolumeForCells(int cellCount); + + void Update(float frameTime); + } +} diff --git a/Content.Server/Atmos/Reactions/GasReactionPrototype.cs b/Content.Server/Atmos/Reactions/GasReactionPrototype.cs new file mode 100644 index 0000000000..6f1023750e --- /dev/null +++ b/Content.Server/Atmos/Reactions/GasReactionPrototype.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using Content.Server.Interfaces; +using Content.Shared.Atmos; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; +using YamlDotNet.RepresentationModel; + +namespace Content.Server.Atmos.Reactions +{ + [Flags] + public enum ReactionResult : byte + { + NoReaction = 0, + Reacting = 1, + + } + + [Prototype("gasReaction")] + public class GasReactionPrototype : IPrototype, IIndexedPrototype + { + public string ID { get; private set; } + + /// + /// Minimum gas amount requirements. + /// + public float[] MinimumRequirements { get; private set; } + + /// + /// Minimum temperature requirement. + /// + public float MinimumTemperatureRequirement { get; private set; } + + /// + /// Minimum energy requirement. + /// + public float MinimumEnergyRequirement { get; private set; } + + /// + /// Lower numbers are checked/react later than higher numbers. + /// If two reactions have the same priority, they may happen in either order. + /// + public int Priority { get; private set; } + + /// + /// A list of effects this will produce. + /// + private List _effects; + + public void LoadFrom(YamlMappingNode mapping) + { + var serializer = YamlObjectSerializer.NewReader(mapping); + + serializer.DataField(this, x => ID, "id", string.Empty); + serializer.DataField(this, x => Priority, "priority", 100); + serializer.DataField(this, x => MinimumRequirements, "minimumRequirements", new float[Atmospherics.TotalNumberOfGases]); + serializer.DataField(this, x => MinimumTemperatureRequirement, "minimumTemperature", Atmospherics.TCMB); + serializer.DataField(this, x => MinimumEnergyRequirement, "minimumEnergy", 0f); + serializer.DataField(ref _effects, "effects", new List()); + } + + public ReactionResult React(GasMixture mixture, IGasMixtureHolder holder) + { + var result = ReactionResult.NoReaction; + + foreach (var effect in _effects) + { + result |= effect.React(mixture, holder); + } + + return result; + } + } +} diff --git a/Content.Server/Atmos/Reactions/PhoronFireReaction.cs b/Content.Server/Atmos/Reactions/PhoronFireReaction.cs new file mode 100644 index 0000000000..0d7fa36083 --- /dev/null +++ b/Content.Server/Atmos/Reactions/PhoronFireReaction.cs @@ -0,0 +1,90 @@ +#nullable enable +using CannyFastMath; +using Content.Server.Interfaces; +using Content.Shared.Atmos; +using JetBrains.Annotations; +using Robust.Shared.Serialization; + +namespace Content.Server.Atmos.Reactions +{ + [UsedImplicitly] + public class PhoronFireReaction : IGasReactionEffect + { + public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder) + { + var energyReleased = 0f; + var oldHeatCapacity = mixture.HeatCapacity; + var temperature = mixture.Temperature; + var location = holder as TileAtmosphere; + + // More phoron released at higher temperatures + var temperatureScale = 0f; + var superSaturation = false; + + if (temperature > Atmospherics.PhoronUpperTemperature) + temperatureScale = 1f; + else + temperatureScale = (temperature - Atmospherics.PhoronMinimumBurnTemperature) / + (Atmospherics.PhoronUpperTemperature - Atmospherics.PhoronMinimumBurnTemperature); + + if (temperatureScale > 0f) + { + var phoronBurnRate = 0f; + var oxygenBurnRate = Atmospherics.OxygenBurnRateBase - temperatureScale; + + if (mixture.GetMoles(Gas.Oxygen) / mixture.GetMoles(Gas.Phoron) > + Atmospherics.SuperSaturationThreshold) + superSaturation = true; + + if (mixture.GetMoles(Gas.Oxygen) > + mixture.GetMoles(Gas.Phoron) * Atmospherics.PhoronOxygenFullburn) + phoronBurnRate = (mixture.GetMoles(Gas.Phoron) * temperatureScale) / + Atmospherics.PhoronBurnRateDelta; + else + phoronBurnRate = (temperatureScale * (mixture.GetMoles(Gas.Oxygen) / Atmospherics.PhoronOxygenFullburn)) / Atmospherics.PhoronBurnRateDelta; + + if (phoronBurnRate > Atmospherics.MinimumHeatCapacity) + { + phoronBurnRate = MathF.Min(MathF.Min(phoronBurnRate, mixture.GetMoles(Gas.Phoron)), mixture.GetMoles(Gas.Oxygen)/oxygenBurnRate); + mixture.SetMoles(Gas.Phoron, mixture.GetMoles(Gas.Phoron) - phoronBurnRate); + mixture.SetMoles(Gas.Oxygen, mixture.GetMoles(Gas.Oxygen) - (phoronBurnRate * oxygenBurnRate)); + + if(superSaturation) + mixture.AdjustMoles(Gas.Tritium, phoronBurnRate); + else + mixture.AdjustMoles(Gas.CarbonDioxide, phoronBurnRate); + + energyReleased += Atmospherics.FirePhoronEnergyReleased * (phoronBurnRate); + + mixture.ReactionResultFire += (phoronBurnRate) * (1 + oxygenBurnRate); + } + } + + if (energyReleased > 0) + { + var newHeatCapacity = mixture.HeatCapacity; + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = ((temperature * oldHeatCapacity + energyReleased) / newHeatCapacity); + } + + if (location != null) + { + temperature = mixture.Temperature; + if (temperature > Atmospherics.FireMinimumTemperatureToExist) + { + location.HotspotExpose(temperature, Atmospherics.CellVolume); + + // TODO ATMOS Expose temperature all items on cell + + location.TemperatureExpose(mixture, temperature, Atmospherics.CellVolume); + } + } + + return mixture.ReactionResultFire != 0 ? ReactionResult.Reacting : ReactionResult.NoReaction; + } + + public void ExposeData(ObjectSerializer serializer) + { + } + } +} diff --git a/Content.Server/Atmos/TileAtmosInfo.cs b/Content.Server/Atmos/TileAtmosInfo.cs new file mode 100644 index 0000000000..b8bdb70a68 --- /dev/null +++ b/Content.Server/Atmos/TileAtmosInfo.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using Robust.Shared.Maths; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Atmos +{ + public struct TileAtmosInfo + { + [ViewVariables] + public int LastCycle; + + [ViewVariables] + public long LastQueueCycle; + + [ViewVariables] + public long LastSlowQueueCycle; + + [ViewVariables] + public float MoleDelta; + + [ViewVariables] + public float TransferDirectionEast; + + [ViewVariables] + public float TransferDirectionWest; + + [ViewVariables] + public float TransferDirectionNorth; + + [ViewVariables] + public float TransferDirectionSouth; + + public float this[Direction direction] + { + get => + direction switch + { + Direction.East => TransferDirectionEast, + Direction.West => TransferDirectionWest, + Direction.North => TransferDirectionNorth, + Direction.South => TransferDirectionSouth, + _ => throw new ArgumentOutOfRangeException(nameof(direction)) + }; + + set + { + switch (direction) + { + case Direction.East: + TransferDirectionEast = value; + break; + case Direction.West: + TransferDirectionWest = value; + break; + case Direction.North: + TransferDirectionNorth = value; + break; + case Direction.South: + TransferDirectionSouth = value; + break; + default: + throw new ArgumentOutOfRangeException(nameof(direction)); + } + } + } + + [ViewVariables] + public float CurrentTransferAmount; + + public Direction CurrentTransferDirection; + + [ViewVariables] + public bool FastDone; + } +} diff --git a/Content.Server/Atmos/TileAtmosphere.cs b/Content.Server/Atmos/TileAtmosphere.cs new file mode 100644 index 0000000000..24d264d2b5 --- /dev/null +++ b/Content.Server/Atmos/TileAtmosphere.cs @@ -0,0 +1,891 @@ +using System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using Content.Server.GameObjects.Components.Atmos; +using Content.Server.GameObjects.EntitySystems; +using Content.Server.Interfaces; +using Content.Shared.Atmos; +using Content.Shared.Audio; +using Robust.Server.GameObjects.EntitySystems; +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.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 +{ + public class TileAtmosphere : IGasMixtureHolder + { + [Robust.Shared.IoC.Dependency] private IRobustRandom _robustRandom = default!; + [Robust.Shared.IoC.Dependency] private IEntityManager _entityManager = default!; + [Robust.Shared.IoC.Dependency] private IMapManager _mapManager = default!; + + private int _archivedCycle = 0; + private int _currentCycle = 0; + + // 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; + + [ViewVariables] + public TileAtmosphere PressureSpecificTarget { get; set; } = null; + + [ViewVariables] + public float PressureDifference { get; set; } = 0; + + [ViewVariables] + public bool Excited { get; set; } = false; + + [ViewVariables] + private GridAtmosphereComponent _gridAtmosphereComponent; + + [ViewVariables] + private readonly Dictionary _adjacentTiles = new Dictionary(); + + [ViewVariables] + private TileAtmosInfo _tileAtmosInfo; + + [ViewVariables] + public Hotspot Hotspot; + + private Direction _pressureDirection; + + [ViewVariables] + public GridId GridIndex { get; } + + [ViewVariables] + public MapIndices GridIndices { get; } + + [ViewVariables] + public ExcitedGroup ExcitedGroup { get; set; } + + [ViewVariables] + public GasMixture Air { get; set; } + + public TileAtmosphere(GridAtmosphereComponent atmosphereComponent, GridId gridIndex, MapIndices gridIndices, GasMixture mixture = null) + { + IoCManager.InjectDependencies(this); + _gridAtmosphereComponent = atmosphereComponent; + GridIndex = gridIndex; + GridIndices = gridIndices; + Air = mixture; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void Archive(int fireCount) + { + _archivedCycle = fireCount; + Air?.Archive(); + } + + public void HotspotExpose(float exposedTemperature, float exposedVolume, bool soh = false) + { + if (Air == null) + return; + + var oxygen = Air.GetMoles(Gas.Oxygen); + + if (oxygen < 0.5f) + return; + + var phoron = Air.GetMoles(Gas.Phoron); + var tritium = Air.GetMoles(Gas.Tritium); + + if (Hotspot.Valid) + { + if (soh) + { + if (phoron > 0.5f || tritium > 0.5f) + { + if (Hotspot.Temperature < exposedTemperature) + Hotspot.Temperature = exposedTemperature; + if (Hotspot.Volume < exposedVolume) + Hotspot.Volume = exposedVolume; + } + } + + return; + } + + if ((exposedTemperature > Atmospherics.PhoronMinimumBurnTemperature) && (phoron > 0.5f || tritium > 0.5f)) + { + Hotspot = new Hotspot + { + Volume = exposedVolume * 25f, + Temperature = exposedTemperature, + SkippedFirstProcess = _currentCycle > _gridAtmosphereComponent.UpdateCounter + }; + + Hotspot.Start(); + + _gridAtmosphereComponent.AddActiveTile(this); + _gridAtmosphereComponent.AddHotspotTile(this); + } + } + + //[MethodImpl(MethodImplOptions.AggressiveInlining)] + public void HighPressureMovements() + { + // TODO ATMOS finish this + + if(PressureDifference > 15) + { + 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))); + } + + + 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)) + continue; + + var pressureMovements = physics.EnsureController(); + if (pressure.LastHighPressureMovementAirCycle < _gridAtmosphereComponent.UpdateCounter) + { + pressureMovements.ExperiencePressureDifference(_gridAtmosphereComponent.UpdateCounter, PressureDifference, _pressureDirection, 0, PressureSpecificTarget?.GridIndices.ToGridCoordinates(_mapManager, GridIndex) ?? GridCoordinates.InvalidGrid); + } + + } + + if (PressureDifference > 100) + { + // Do space wind graphics here! + } + + _soundCooldown++; + if (_soundCooldown > 75) + _soundCooldown = 0; + } + + //[MethodImpl(MethodImplOptions.AggressiveInlining)] + public void EqualizePressureInZone(int cycleNum) + { + if (Air == null || (_tileAtmosInfo.LastCycle >= cycleNum)) return; // Already done. + + _tileAtmosInfo = new TileAtmosInfo(); + + var startingMoles = Air.TotalMoles; + var runAtmos = false; + + // We need to figure if this is necessary + foreach (var (direction, other) in _adjacentTiles) + { + if (other?.Air == null) continue; + var comparisonMoles = other.Air.TotalMoles; + if (!(MathF.Abs(comparisonMoles - startingMoles) > Atmospherics.MinimumMolesDeltaToMove)) continue; + runAtmos = true; + break; + } + + if (!runAtmos) // There's no need so we don't bother. + { + _tileAtmosInfo.LastCycle = cycleNum; + return; + } + + var queueCycle = ++_gridAtmosphereComponent.EqualizationQueueCycleControl; + var totalMoles = 0f; + var tiles = new TileAtmosphere[Atmospherics.ZumosHardTileLimit]; + tiles[0] = this; + _tileAtmosInfo.LastQueueCycle = queueCycle; + var tileCount = 1; + for (var i = 0; i < tileCount; i++) + { + if (i > Atmospherics.ZumosHardTileLimit) break; + var exploring = tiles[i]; + + if (i < Atmospherics.ZumosTileLimit) + { + var tileMoles = exploring.Air.TotalMoles; + exploring._tileAtmosInfo.MoleDelta = tileMoles; + totalMoles += tileMoles; + } + + foreach (var (_, adj) in exploring._adjacentTiles) + { + if (adj?.Air == null) continue; + if(adj._tileAtmosInfo.LastQueueCycle == queueCycle) continue; + adj._tileAtmosInfo = new TileAtmosInfo(); + + adj._tileAtmosInfo.LastQueueCycle = queueCycle; + if(tileCount < Atmospherics.ZumosHardTileLimit) + tiles[tileCount++] = adj; + if (adj.Air.Immutable) + { + // Looks like someone opened an airlock to space! + ExplosivelyDepressurize(cycleNum); + return; + } + } + } + + if (tileCount > Atmospherics.ZumosTileLimit) + { + for (var i = Atmospherics.ZumosTileLimit; i < tileCount; i++) + { + //We unmark them. We shouldn't be pushing/pulling gases to/from them. + var tile = tiles[i]; + if (tile == null) continue; + tiles[i]._tileAtmosInfo.LastQueueCycle = 0; + } + + tileCount = Atmospherics.ZumosTileLimit; + } + + //tiles = tiles.AsSpan().Slice(0, tileCount).ToArray(); // According to my benchmarks, this is much slower. + Array.Resize(ref tiles, tileCount); + + var averageMoles = totalMoles / (tiles.Length); + var giverTiles = new List(); + var takerTiles = new List(); + + for (var i = 0; i < tileCount; i++) + { + var tile = tiles[i]; + tile._tileAtmosInfo.LastCycle = cycleNum; + tile._tileAtmosInfo.MoleDelta -= averageMoles; + if (tile._tileAtmosInfo.MoleDelta > 0) + { + giverTiles.Add(tile); + } + else + { + takerTiles.Add(tile); + } + } + + var logN = MathF.Log2(tiles.Length); + + // 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) + { + // Even if it fails, it will speed up the next part. + Array.Sort(tiles, (a, b) + => a._tileAtmosInfo.MoleDelta.CompareTo(b._tileAtmosInfo.MoleDelta)); + + foreach (var tile in tiles) + { + tile._tileAtmosInfo.FastDone = true; + if (!(tile._tileAtmosInfo.MoleDelta > 0)) continue; + Direction eligibleAdjBits = 0; + var amtEligibleAdj = 0; + foreach (var direction in Cardinal) + { + if (!tile._adjacentTiles.TryGetValue(direction, out var tile2)) continue; + + // skip anything that isn't part of our current processing block. Original one didn't do this unfortunately, which probably cause some massive lag. + if (tile2._tileAtmosInfo.FastDone || tile2._tileAtmosInfo.LastQueueCycle != queueCycle) + continue; + + eligibleAdjBits |= direction; + amtEligibleAdj++; + } + + 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; + tile.AdjustEqMovement(direction, molesToMove); + tile._tileAtmosInfo.MoleDelta -= molesToMove; + tile2._tileAtmosInfo.MoleDelta += molesToMove; + } + } + + giverTiles.Clear(); + takerTiles.Clear(); + + foreach (var tile in tiles) + { + if (tile._tileAtmosInfo.MoleDelta > 0) + { + giverTiles.Add(tile); + } + else + { + takerTiles.Add(tile); + } + } + + // This is the part that can become O(n^2). + if (giverTiles.Count < takerTiles.Count) + { + // 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) + { + giver._tileAtmosInfo.CurrentTransferDirection = (Direction)(-1); + giver._tileAtmosInfo.CurrentTransferAmount = 0; + var queueCycleSlow = ++_gridAtmosphereComponent.EqualizationQueueCycleControl; + queue.Clear(); + queue.Add(giver); + giver._tileAtmosInfo.LastSlowQueueCycle = queueCycleSlow; + var queueCount = queue.Count; + for (var i = 0; i < queueCount; i++) + { + if (giver._tileAtmosInfo.MoleDelta <= 0) + break; // We're done here now. Let's not do more work than needed. + + 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 (tile2._tileAtmosInfo.LastSlowQueueCycle == queueCycleSlow) continue; + queue.Add(tile2); + queueCount++; + tile2._tileAtmosInfo.LastSlowQueueCycle = queueCycleSlow; + tile2._tileAtmosInfo.CurrentTransferDirection = direction.GetOpposite(); + tile2._tileAtmosInfo.CurrentTransferAmount = 0; + if (tile2._tileAtmosInfo.MoleDelta < 0) + { + // This tile needs gas. Let's give it to 'em. + if (-tile2._tileAtmosInfo.MoleDelta > giver._tileAtmosInfo.MoleDelta) + { + // We don't have enough gas! + tile2._tileAtmosInfo.CurrentTransferAmount -= giver._tileAtmosInfo.MoleDelta; + tile2._tileAtmosInfo.MoleDelta += giver._tileAtmosInfo.MoleDelta; + giver._tileAtmosInfo.MoleDelta = 0; + } + else + { + // We have enough gas. + tile2._tileAtmosInfo.CurrentTransferAmount += tile2._tileAtmosInfo.MoleDelta; + giver._tileAtmosInfo.MoleDelta += tile2._tileAtmosInfo.MoleDelta; + tile2._tileAtmosInfo.MoleDelta = 0; + } + } + } + } + + // Putting this loop here helps make it O(n^2) over O(n^3) + for (var i = queue.Count - 1; i >= 0; i--) + { + var tile = queue[i]; + if (tile._tileAtmosInfo.CurrentTransferAmount != 0 && + 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._tileAtmosInfo.CurrentTransferAmount = 0; + } + } + } + } + else + { + var queue = new List(giverTiles.Count); + foreach (var taker in takerTiles) + { + taker._tileAtmosInfo.CurrentTransferDirection = Direction.Invalid; + taker._tileAtmosInfo.CurrentTransferAmount = 0; + var queueCycleSlow = ++_gridAtmosphereComponent.EqualizationQueueCycleControl; + queue.Clear(); + queue.Add(taker); + taker._tileAtmosInfo.LastSlowQueueCycle = queueCycleSlow; + var queueCount = queue.Count; + for (int i = 0; i < queueCount; i++) + { + if (taker._tileAtmosInfo.MoleDelta >= 0) + break; // We're done here now. Let's not do more work than needed. + + var tile = queue[i]; + foreach (var direction in Cardinal) + { + 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 (tile2._tileAtmosInfo.LastSlowQueueCycle == queueCycleSlow) continue; + queue.Add(tile2); + queueCount++; + tile2._tileAtmosInfo.LastSlowQueueCycle = queueCycleSlow; + tile2._tileAtmosInfo.CurrentTransferDirection = direction.GetOpposite(); + tile2._tileAtmosInfo.CurrentTransferAmount = 0; + + if (tile2._tileAtmosInfo.MoleDelta > 0) + { + // This tile has gas we can suck, so let's + if (tile2._tileAtmosInfo.MoleDelta > -taker._tileAtmosInfo.MoleDelta) + { + // They have enough gas + tile2._tileAtmosInfo.CurrentTransferAmount -= taker._tileAtmosInfo.MoleDelta; + tile2._tileAtmosInfo.MoleDelta += taker._tileAtmosInfo.MoleDelta; + taker._tileAtmosInfo.MoleDelta = 0; + } + else + { + // They don't have enough gas! + tile2._tileAtmosInfo.CurrentTransferAmount += tile2._tileAtmosInfo.MoleDelta; + taker._tileAtmosInfo.MoleDelta += tile2._tileAtmosInfo.MoleDelta; + tile2._tileAtmosInfo.MoleDelta = 0; + } + } + } + } + + for (var i = queue.Count - 1; i >= 0; i--) + { + var tile = queue[i]; + 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)) + adjacent._tileAtmosInfo.CurrentTransferAmount += tile._tileAtmosInfo.CurrentTransferAmount; + tile._tileAtmosInfo.CurrentTransferAmount = 0; + } + } + } + + foreach (var tile in tiles) + { + tile.FinalizeEq(); + } + + foreach (var tile in tiles) + { + foreach (var direction in Cardinal) + { + if (!tile._adjacentTiles.TryGetValue(direction, out var tile2)) continue; + if (tile2?.Air.Compare(Air) == GasMixture.GasCompareResult.NoExchange) continue; + _gridAtmosphereComponent.AddActiveTile(tile2); + break; + } + } + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void FinalizeEq() + { + var transferDirections = new Dictionary(); + var hasTransferDirs = false; + foreach (var direction in Cardinal) + { + var amount = _tileAtmosInfo[direction]; + transferDirections[direction] = amount; + if (amount == 0) continue; + _tileAtmosInfo[direction] = 0; + hasTransferDirs = true; + } + + if (!hasTransferDirs) return; + + foreach (var direction in Cardinal) + { + 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(); + + tile.Air.Merge(Air.Remove(amount)); + UpdateVisuals(); + tile.UpdateVisuals(); + ConsiderPressureDifference(tile, amount); + } + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void FinalizeEqNeighbors() + { + foreach (var direction in Cardinal) + { + var amount = _tileAtmosInfo[direction]; + if(amount < 0 && _adjacentTiles.TryGetValue(direction, out var adjacent)) + adjacent.FinalizeEq(); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void ConsiderPressureDifference(TileAtmosphere tile, float difference) + { + _gridAtmosphereComponent.AddHighPressureDelta(this); + if (difference > PressureDifference) + { + PressureDifference = difference; + _pressureDirection = ((Vector2i) (tile.GridIndices - GridIndices)).GetDir(); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void ProcessCell(int fireCount) + { + // Can't process a tile without air + if (Air == null) + { + _gridAtmosphereComponent.RemoveActiveTile(this); + return; + } + + if (_archivedCycle < fireCount) + Archive(fireCount); + + _currentCycle = fireCount; + var adjacentTileLength = 0; + foreach (var (_, enemyTile) in _adjacentTiles) + { + // If the tile is null or has no air, we don't do anything + if(enemyTile?.Air == null) continue; + adjacentTileLength++; + if (fireCount <= enemyTile._currentCycle) continue; + enemyTile.Archive(fireCount); + + var shouldShareAir = false; + + if (ExcitedGroup != null && enemyTile.ExcitedGroup != null) + { + if (ExcitedGroup != enemyTile.ExcitedGroup) + { + ExcitedGroup.MergeGroups(enemyTile.ExcitedGroup); + } + + shouldShareAir = true; + } else if (Air.Compare(enemyTile.Air) != GasMixture.GasCompareResult.NoExchange) + { + if (!enemyTile.Excited) + { + _gridAtmosphereComponent.AddActiveTile(enemyTile); + } + + var excitedGroup = ExcitedGroup; + excitedGroup ??= enemyTile.ExcitedGroup; + + if (excitedGroup == null) + { + excitedGroup = new ExcitedGroup(); + excitedGroup.Initialize(_gridAtmosphereComponent); + } + + if (ExcitedGroup == null) + excitedGroup.AddTile(this); + + if(enemyTile.ExcitedGroup == null) + excitedGroup.AddTile(enemyTile); + + shouldShareAir = true; + } + + if (shouldShareAir) + { + var difference = Air.Share(enemyTile.Air, adjacentTileLength); + + // Space wind! + if (difference > 0) + { + ConsiderPressureDifference(enemyTile, difference); + } + else + { + enemyTile.ConsiderPressureDifference(this, -difference); + } + + LastShareCheck(); + } + } + + React(); + UpdateVisuals(); + + if((!(Air.Temperature > Atmospherics.MinimumTemperatureStartSuperConduction && ConsiderSuperconductivity(true))) && ExcitedGroup == null) + _gridAtmosphereComponent.RemoveActiveTile(this); + } + + public void ProcessHotspot() + { + if (!Hotspot.Valid) + { + _gridAtmosphereComponent.RemoveHotspotTile(this); + return; + } + + if (!Hotspot.SkippedFirstProcess) + { + Hotspot.SkippedFirstProcess = true; + return; + } + + ExcitedGroup?.ResetCooldowns(); + + if ((Hotspot.Temperature < Atmospherics.FireMinimumTemperatureToExist) || (Hotspot.Volume <= 1f) + || Air == null || Air.Gases[(int)Gas.Oxygen] < 0.5f || Air.Gases[(int)Gas.Phoron] < 0.5f) + { + Hotspot = new Hotspot(); + UpdateVisuals(); + return; + } + + PerformHotspotExposure(); + + if (Hotspot.Bypassing) + { + Hotspot.State = 3; + _gridAtmosphereComponent.BurnTile(GridIndices); + + if (Air.Temperature > Atmospherics.FireMinimumTemperatureToSpread) + { + var radiatedTemperature = Air.Temperature * Atmospherics.FireSpreadRadiosityScale; + foreach (var (_, tile) in _adjacentTiles) + { + if(!tile.Hotspot.Valid) + tile.HotspotExpose(radiatedTemperature, Atmospherics.CellVolume/4); + } + } + } + else + { + Hotspot.State = Hotspot.Volume > Atmospherics.CellVolume * 0.4f ? 2 : 1; + } + + if (Hotspot.Temperature > MaxFireTemperatureSustained) + MaxFireTemperatureSustained = Hotspot.Temperature; + + // TODO ATMOS Maybe destroy location here? + } + + public float MaxFireTemperatureSustained { get; private set; } + + private void PerformHotspotExposure() + { + if (Air == null || !Hotspot.Valid) return; + + Hotspot.Bypassing = Hotspot.SkippedFirstProcess && (Hotspot.Volume > Atmospherics.CellVolume*0.95); + + if (Hotspot.Bypassing) + { + Hotspot.Volume = Air.ReactionResultFire * Atmospherics.FireGrowthRate; + Hotspot.Temperature = Air.Temperature; + } + else + { + var affected = Air.RemoveRatio(Hotspot.Volume / Air.Volume); + if (affected != null) + { + affected.Temperature = Hotspot.Temperature; + affected.React(this); + Hotspot.Temperature = affected.Temperature; + Hotspot.Volume = affected.ReactionResultFire * Atmospherics.FireGrowthRate; + AssumeAir(affected); + } + } + + // TODO ATMOS Let all entities in this tile know about the fire? + } + + private bool ConsiderSuperconductivity(bool starting) + { + // TODO ATMOS + return false; + } + + //[MethodImpl(MethodImplOptions.AggressiveInlining)] + public void ExplosivelyDepressurize(int cycleNum) + { + if (Air == null) return; + var totalGasesRemoved = 0f; + var queueCycle = ++_gridAtmosphereComponent.EqualizationQueueCycleControl; + var tiles = new List(); + var spaceTiles = new List(); + tiles.Add(this); + _tileAtmosInfo = new TileAtmosInfo + { + LastQueueCycle = queueCycle, + CurrentTransferDirection = Direction.Invalid + }; + var tileCount = 1; + for (var i = 0; i < tileCount; i++) + { + var tile = tiles[i]; + tile._tileAtmosInfo.LastCycle = cycleNum; + tile._tileAtmosInfo.CurrentTransferDirection = Direction.Invalid; + if (tile.Air.Immutable) + { + spaceTiles.Add(tile); + tile.PressureSpecificTarget = tile; + } + else + { + if (i > Atmospherics.ZumosHardTileLimit) continue; + foreach (var direction in Cardinal) + { + if (!_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}; + tiles.Add(tile2); + tileCount++; + } + } + } + } + + var queueCycleSlow = ++_gridAtmosphereComponent.EqualizationQueueCycleControl; + var progressionOrder = new List(); + foreach (var tile in spaceTiles) + { + progressionOrder.Add(tile); + tile._tileAtmosInfo.LastSlowQueueCycle = queueCycleSlow; + tile._tileAtmosInfo.CurrentTransferDirection = Direction.Invalid; + } + + var progressionCount = progressionOrder.Count; + for (int i = 0; i < progressionCount; i++) + { + var tile = progressionOrder[i]; + foreach (var direction in Cardinal) + { + if (!_adjacentTiles.TryGetValue(direction, out var tile2)) continue; + if (tile2?._tileAtmosInfo.LastQueueCycle != queueCycle) continue; + if (tile2._tileAtmosInfo.LastSlowQueueCycle == queueCycleSlow) continue; + if(tile2.Air.Immutable) continue; + tile2._tileAtmosInfo.CurrentTransferDirection = direction.GetOpposite(); + tile2._tileAtmosInfo.CurrentTransferAmount = 0; + tile2.PressureSpecificTarget = tile.PressureSpecificTarget; + tile2._tileAtmosInfo.LastSlowQueueCycle = queueCycleSlow; + progressionOrder.Add(tile2); + progressionCount++; + } + } + + for (int i = 0; i < progressionCount; 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); + if (!tile._adjacentTiles.TryGetValue(tile._tileAtmosInfo.CurrentTransferDirection, out var tile2) || tile2.Air == null) continue; + var sum = tile2.Air.TotalMoles; + totalGasesRemoved += sum; + tile._tileAtmosInfo.CurrentTransferAmount += sum; + 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); + } + } + + private void HandleDecompressionFloorRip(float sum) + { + if (sum > 20 && _robustRandom.Prob(MathF.Clamp(sum / 100, 0.005f, 0.5f))) + _gridAtmosphereComponent.PryTile(GridIndices); + } + + private void ConsiderFirelocks(TileAtmosphere other) + { + // TODO ATMOS firelocks! + //throw new NotImplementedException(); + } + + + private void React() + { + // TODO ATMOS I think this is enough? gotta make sure... + Air?.React(this); + } + + public bool AssumeAir(GasMixture giver) + { + if (giver == null || Air == null) return false; + + Air.Merge(giver); + + UpdateVisuals(); + + return true; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void UpdateVisuals() + { + if (Air == null) return; + + _gasTileOverlaySystem ??= EntitySystem.Get(); + _gasTileOverlaySystem.Invalidate(GridIndex, GridIndices); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void UpdateAdjacent() + { + foreach (var direction in Cardinal) + { + if(!_gridAtmosphereComponent.IsAirBlocked(GridIndices.Offset(direction))) + _adjacentTiles[direction] = _gridAtmosphereComponent.GetTile(GridIndices.Offset(direction)); + } + } + + public void UpdateAdjacent(Direction direction) + { + _adjacentTiles[direction] = _gridAtmosphereComponent.GetTile(GridIndices.Offset(direction)); + } + + private void LastShareCheck() + { + var lastShare = Air.LastShare; + if (lastShare > Atmospherics.MinimumAirToSuspend) + { + ExcitedGroup.ResetCooldowns(); + } else if (lastShare > Atmospherics.MinimumMolesDeltaToMove) + { + ExcitedGroup.DismantleCooldown = 0; + } + } + + private static readonly Direction[] Cardinal = + new Direction[] + { + 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/Content.Server.csproj b/Content.Server/Content.Server.csproj index 0c9be50c54..35caeeabfe 100644 --- a/Content.Server/Content.Server.csproj +++ b/Content.Server/Content.Server.csproj @@ -18,6 +18,7 @@ + diff --git a/Content.Server/GameObjects/Components/Atmos/AirtightComponent.cs b/Content.Server/GameObjects/Components/Atmos/AirtightComponent.cs new file mode 100644 index 0000000000..d78b271739 --- /dev/null +++ b/Content.Server/GameObjects/Components/Atmos/AirtightComponent.cs @@ -0,0 +1,98 @@ +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; + +namespace Content.Server.GameObjects.Components.Atmos +{ + [RegisterComponent] + public class AirtightComponent : Component, IMapInit + { + private SnapGridComponent _snapGrid; + private (GridId, MapIndices) _lastPosition; + + public override string Name => "Airtight"; + + private bool _airBlocked = true; + + [ViewVariables(VVAccess.ReadWrite)] + public bool AirBlocked + { + get => _airBlocked; + set + { + _airBlocked = value; + EntitySystem.Get().GetGridAtmosphere(Owner.Transform.GridID)?.Invalidate(_snapGrid.Position); + } + } + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + + serializer.DataField(ref _airBlocked, "airBlocked", true); + } + + public override void Initialize() + { + base.Initialize(); + + // Using the SnapGrid is critical for the performance of the room builder, and thus if + // it is absent the component will not be airtight. An exception is much easier to track + // down than the object magically not being airtight, so throw one if the SnapGrid component + // is missing. + if (!Owner.TryGetComponent(out _snapGrid)) + throw new Exception("Airtight entities must have a SnapGrid component"); + + UpdatePosition(); + } + + public override void OnRemove() + { + base.OnRemove(); + + _airBlocked = false; + + UpdatePosition(); + } + + public void MapInit() + { + _snapGrid.OnPositionChanged += OnTransformMove; + _lastPosition = (Owner.Transform.GridID, _snapGrid.Position); + UpdatePosition(); + } + + protected override void Shutdown() + { + base.Shutdown(); + + _airBlocked = false; + + _snapGrid.OnPositionChanged -= OnTransformMove; + UpdatePosition(); + } + + private void OnTransformMove() + { + UpdatePosition(_lastPosition.Item1, _lastPosition.Item2); + UpdatePosition(); + _lastPosition = (Owner.Transform.GridID, _snapGrid.Position); + } + + private void UpdatePosition() => UpdatePosition(Owner.Transform.GridID, _snapGrid.Position); + + private void UpdatePosition(GridId gridId, MapIndices pos) + { + EntitySystem.Get().GetGridAtmosphere(gridId)?.Invalidate(pos); + } + + } +} diff --git a/Content.Server/GameObjects/Components/Atmos/GasAnalyzerComponent.cs b/Content.Server/GameObjects/Components/Atmos/GasAnalyzerComponent.cs new file mode 100644 index 0000000000..8d3970797a --- /dev/null +++ b/Content.Server/GameObjects/Components/Atmos/GasAnalyzerComponent.cs @@ -0,0 +1,40 @@ +#nullable enable +using Content.Server.GameObjects.EntitySystems; +using Content.Shared.Atmos; +using Content.Shared.GameObjects.EntitySystems; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Map; +using Robust.Shared.Utility; + +namespace Content.Server.GameObjects.Components.Atmos +{ + [RegisterComponent] + public class GasAnalyzerComponent : Component, IExamine + { + public override string Name => "GasAnalyzer"; + public void Examine(FormattedMessage message, bool inDetailsRange) + { + if (!inDetailsRange) return; + + var gam = EntitySystem.Get().GetGridAtmosphere(Owner.Transform.GridID); + + var tile = gam?.GetTile(Owner.Transform.GridPosition).Air; + + if (tile == null) return; + + message.AddText($"Pressure: {tile.Pressure}\n"); + message.AddText($"Temperature: {tile.Temperature}\n"); + + for (int i = 0; i < Atmospherics.TotalNumberOfGases; i++) + { + var gas = Atmospherics.GetGas(i); + + if (tile.Gases[i] <= Atmospherics.GasMinMoles) continue; + + message.AddText(gas.Name); + message.AddText($"\n Moles: {tile.Gases[i]}\n"); + } + } + } +} diff --git a/Content.Server/GameObjects/Components/Atmos/GasCanisterComponent.cs b/Content.Server/GameObjects/Components/Atmos/GasCanisterComponent.cs new file mode 100644 index 0000000000..a2afda77de --- /dev/null +++ b/Content.Server/GameObjects/Components/Atmos/GasCanisterComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameObjects; + +namespace Content.Server.GameObjects.Components.Atmos +{ + [RegisterComponent] + public class GasCanisterComponent : Component + { + public override string Name => "GasCanister"; + } +} diff --git a/Content.Server/GameObjects/Components/Atmos/GasMixtureComponent.cs b/Content.Server/GameObjects/Components/Atmos/GasMixtureComponent.cs new file mode 100644 index 0000000000..68e59e0869 --- /dev/null +++ b/Content.Server/GameObjects/Components/Atmos/GasMixtureComponent.cs @@ -0,0 +1,19 @@ +using Content.Server.Atmos; +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization; + +namespace Content.Server.GameObjects.Components.Atmos +{ + [RegisterComponent] + public class GasMixtureComponent : Component + { + public override string Name => "GasMixture"; + public GasMixture GasMixture { get; set; } = new GasMixture(); + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + serializer.DataField(this, x => GasMixture.Volume, "volume", 0f); + } + } +} diff --git a/Content.Server/GameObjects/Components/Atmos/GasTankComponent.cs b/Content.Server/GameObjects/Components/Atmos/GasTankComponent.cs new file mode 100644 index 0000000000..47f96463e0 --- /dev/null +++ b/Content.Server/GameObjects/Components/Atmos/GasTankComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameObjects; + +namespace Content.Server.GameObjects.Components.Atmos +{ + [RegisterComponent] + public class GasTankComponent : Component + { + public override string Name => "GasTank"; + } +} diff --git a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs new file mode 100644 index 0000000000..cee6f2f737 --- /dev/null +++ b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs @@ -0,0 +1,523 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using Content.Server.Atmos; +using Content.Shared.Atmos; +using Content.Shared.Maps; +using Robust.Server.Interfaces.GameObjects; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.Map; +using Robust.Shared.GameObjects.Components.Transform; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.Interfaces.Timing; +using Robust.Shared.IoC; +using Robust.Shared.Map; +using Robust.Shared.Maths; +using Robust.Shared.Serialization; +using Robust.Shared.Timing; +using Robust.Shared.ViewVariables; + +namespace Content.Server.GameObjects.Components.Atmos +{ + /// + /// This is our SSAir equivalent. + /// + [RegisterComponent, Serializable] + public class GridAtmosphereComponent : Component, IGridAtmosphereComponent + { + [Robust.Shared.IoC.Dependency] private IGameTiming _gameTiming = default!; + [Robust.Shared.IoC.Dependency] private IMapManager _mapManager = default!; + + /// + /// Check current execution time every n instances processed. + /// + private const int LagCheckIterations = 15; + + /// + /// Max milliseconds allowed for atmos updates. + /// + private const float LagCheckMaxMilliseconds = 5f; + + /// + /// How much time before atmos updates are ran. + /// + private const float AtmosTime = 1/26f; + + public override string Name => "GridAtmosphere"; + + private float _timer = 0f; + private Stopwatch _stopwatch = new Stopwatch(); + public int UpdateCounter { get; private set; } = 0; + private IMapGrid _grid; + + [ViewVariables] + private readonly HashSet _excitedGroups = new HashSet(1000); + + [ViewVariables] + private readonly Dictionary _tiles = new Dictionary(1000); + + [ViewVariables] + private readonly HashSet _activeTiles = new HashSet(1000); + + [ViewVariables] + private readonly HashSet _hotspotTiles = new HashSet(1000); + + [ViewVariables] + private readonly HashSet _invalidatedCoords = new HashSet(1000); + + [ViewVariables] + private HashSet _highPressureDelta = new HashSet(1000); + + [ViewVariables] + private ProcessState _state = ProcessState.TileEqualize; + + private enum ProcessState + { + TileEqualize, + ActiveTiles, + ExcitedGroups, + HighPressureDelta, + Hotspots, + } + + /// + public void PryTile(MapIndices indices) + { + if (IsSpace(indices) || IsAirBlocked(indices)) return; + + var tile = _grid.GetTileRef(indices).Tile; + + var tileDefinitionManager = IoCManager.Resolve(); + var tileDef = (ContentTileDefinition)tileDefinitionManager[tile.TypeId]; + + var underplating = tileDefinitionManager["underplating"]; + _grid.SetTile(indices, new Tile(underplating.TileId)); + + //Actually spawn the relevant tile item at the right position and give it some offset to the corner. + var tileItem = IoCManager.Resolve().SpawnEntity(tileDef.ItemDropPrototypeName, new GridCoordinates(indices.X, indices.Y, _grid)); + tileItem.Transform.WorldPosition += (0.2f, 0.2f); + } + + public override void Initialize() + { + base.Initialize(); + + _grid = Owner.GetComponent().Grid; + + RepopulateTiles(); + } + + public override void OnAdd() + { + base.OnAdd(); + + _grid = Owner.GetComponent().Grid; + + RepopulateTiles(); + } + + public void RepopulateTiles() + { + _tiles.Clear(); + + foreach (var tile in _grid.GetAllTiles()) + { + if(!_tiles.ContainsKey(tile.GridIndices)) + _tiles.Add(tile.GridIndices, new TileAtmosphere(this, tile.GridIndex, tile.GridIndices, new GasMixture(GetVolumeForCells(1)){Temperature = Atmospherics.T20C})); + } + + foreach (var (_, tile) in _tiles.ToArray()) + { + tile.UpdateAdjacent(); + tile.UpdateVisuals(); + } + } + + /// + public void Invalidate(MapIndices indices) + { + _invalidatedCoords.Add(indices); + } + + private void Revalidate() + { + foreach (var indices in _invalidatedCoords.ToArray()) + { + var tile = GetTile(indices); + AddActiveTile(tile); + + if (tile == null) + { + tile = new TileAtmosphere(this, _grid.Index, indices, new GasMixture(GetVolumeForCells(1)){Temperature = Atmospherics.T20C}); + _tiles.Add(indices, tile); + } + + if (IsSpace(indices)) + { + tile.Air = new GasMixture(GetVolumeForCells(1)); + tile.Air.MarkImmutable(); + } else if (IsAirBlocked(indices)) + { + tile.Air = null; + } + else + { + tile.Air ??= new GasMixture(GetVolumeForCells(1)); + } + + tile.UpdateAdjacent(); + tile.UpdateVisuals(); + + foreach (var direction in Cardinal()) + { + var otherIndices = indices.Offset(direction); + var otherTile = GetTile(otherIndices); + AddActiveTile(otherTile); + otherTile?.UpdateAdjacent(direction.GetOpposite()); + } + } + + _invalidatedCoords.Clear(); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void AddActiveTile(TileAtmosphere tile) + { + if (tile?.GridIndex != _grid.Index || tile?.Air == null) return; + tile.Excited = true; + _activeTiles.Add(tile); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void RemoveActiveTile(TileAtmosphere tile) + { + if (tile == null) return; + _activeTiles.Remove(tile); + tile.Excited = false; + tile.ExcitedGroup?.Dispose(); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void AddHotspotTile(TileAtmosphere tile) + { + if (tile?.GridIndex != _grid.Index || tile?.Air == null) return; + _hotspotTiles.Add(tile); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void RemoveHotspotTile(TileAtmosphere tile) + { + if (tile == null) return; + _hotspotTiles.Remove(tile); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void AddHighPressureDelta(TileAtmosphere tile) + { + if (tile?.GridIndex != _grid.Index) return; + _highPressureDelta.Add(tile); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool HasHighPressureDelta(TileAtmosphere tile) + { + return _highPressureDelta.Contains(tile); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void AddExcitedGroup(ExcitedGroup excitedGroup) + { + _excitedGroups.Add(excitedGroup); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void RemoveExcitedGroup(ExcitedGroup excitedGroup) + { + _excitedGroups.Remove(excitedGroup); + } + + /// + public TileAtmosphere GetTile(GridCoordinates coordinates) + { + return GetTile(coordinates.ToMapIndices(_mapManager)); + } + + /// + public TileAtmosphere GetTile(MapIndices indices) + { + if (_tiles.TryGetValue(indices, out var tile)) return tile; + + // We don't have that tile! + if (IsSpace(indices)) + { + var space = new TileAtmosphere(this, _grid.Index, indices, new GasMixture(int.MaxValue){Temperature = Atmospherics.TCMB}); + space.Air.MarkImmutable(); + return space; + } + + return null; + } + + /// + public bool IsAirBlocked(MapIndices indices) + { + var ac = GetObstructingComponent(indices); + return ac != null && ac.AirBlocked; + } + + /// + public bool IsSpace(MapIndices indices) + { + // TODO ATMOS use ContentTileDefinition to define in YAML whether or not a tile is considered space + return _grid.GetTileRef(indices).Tile.IsEmpty; + } + + public Dictionary GetAdjacentTiles(MapIndices indices) + { + var sides = new Dictionary(); + foreach (var dir in Cardinal()) + { + var side = indices.Offset(dir); + sides[dir] = GetTile(side); + } + + return sides; + } + + /// + public int HighPressureDeltaCount => _highPressureDelta.Count; + + public long EqualizationQueueCycleControl { get; set; } + + /// + public float GetVolumeForCells(int cellCount) + { + return _grid.TileSize * cellCount * Atmospherics.CellVolume; + } + + /// + public void Update(float frameTime) + { + _timer += frameTime; + + if (_invalidatedCoords.Count != 0) + Revalidate(); + + if (_timer < AtmosTime) + return; + + // We subtract it so it takes lost time into account. + _timer -= AtmosTime; + + switch (_state) + { + case ProcessState.TileEqualize: + if(ProcessTileEqualize()) + _state = ProcessState.ActiveTiles; + return; + case ProcessState.ActiveTiles: + if(ProcessActiveTiles()) + _state = ProcessState.ExcitedGroups; + return; + case ProcessState.ExcitedGroups: + if(ProcessExcitedGroups()) + _state = ProcessState.HighPressureDelta; + return; + case ProcessState.HighPressureDelta: + if(ProcessHighPressureDelta()) + _state = ProcessState.Hotspots; + break; + case ProcessState.Hotspots: + if(ProcessHotspots()) + _state = ProcessState.TileEqualize; + break; + } + + UpdateCounter++; + } + + public bool ProcessTileEqualize() + { + _stopwatch.Restart(); + + var number = 0; + foreach (var tile in _activeTiles.ToArray()) + { + tile.EqualizePressureInZone(UpdateCounter); + + if (number++ < LagCheckIterations) continue; + number = 0; + // Process the rest next time. + if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds) + return false; + } + + return true; + } + + public bool ProcessActiveTiles() + { + _stopwatch.Restart(); + + var number = 0; + foreach (var tile in _activeTiles.ToArray()) + { + tile.ProcessCell(UpdateCounter); + + if (number++ < LagCheckIterations) continue; + number = 0; + // Process the rest next time. + if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds) + return false; + } + + return true; + } + + public bool ProcessExcitedGroups() + { + _stopwatch.Restart(); + + var number = 0; + foreach (var excitedGroup in _excitedGroups.ToArray()) + { + excitedGroup.BreakdownCooldown++; + excitedGroup.DismantleCooldown++; + + if(excitedGroup.BreakdownCooldown > Atmospherics.ExcitedGroupBreakdownCycles) + excitedGroup.SelfBreakdown(); + + else if(excitedGroup.DismantleCooldown > Atmospherics.ExcitedGroupsDismantleCycles) + excitedGroup.Dismantle(); + + if (number++ < LagCheckIterations) continue; + number = 0; + // Process the rest next time. + if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds) + return false; + } + + return true; + } + + public bool ProcessHighPressureDelta() + { + _stopwatch.Restart(); + + var number = 0; + foreach (var tile in _highPressureDelta.ToArray()) + { + tile.HighPressureMovements(); + tile.PressureDifference = 0f; + tile.PressureSpecificTarget = null; + _highPressureDelta.Remove(tile); + + if (number++ < LagCheckIterations) continue; + number = 0; + // Process the rest next time. + if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds) + return false; + } + + return true; + } + + private bool ProcessHotspots() + { + _stopwatch.Restart(); + + var number = 0; + foreach (var hotspot in _hotspotTiles.ToArray()) + { + hotspot.ProcessHotspot(); + + if (number++ < LagCheckIterations) continue; + number = 0; + // Process the rest next time. + if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds) + return false; + } + + return true; + } + + private AirtightComponent GetObstructingComponent(MapIndices indices) + { + foreach (var v in _grid.GetSnapGridCell(indices, SnapGridOffset.Center)) + { + if (v.Owner.TryGetComponent(out var ac)) + return ac; + } + + return null; + } + + private static IEnumerable Cardinal() => + new[] + { + Direction.North, Direction.East, Direction.South, Direction.West + }; + + public void Dispose() + { + + } + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + if (serializer.Reading) + { + var gridId = Owner.GetComponent().Grid.Index; + + if (!serializer.TryReadDataField("uniqueMixes", out List uniqueMixes) || + !serializer.TryReadDataField("tiles", out Dictionary tiles)) + return; + foreach (var (indices, mix) in tiles) + { + _tiles.Add(indices, new TileAtmosphere(this, gridId, indices, (GasMixture)uniqueMixes[mix].Clone())); + Invalidate(indices); + } + } else if (serializer.Writing) + { + var uniqueMixes = new List(); + var tiles = new Dictionary(); + foreach (var (indices, tile) in _tiles) + { + if (tile.Air == null) continue; + uniqueMixes.Add(tile.Air); + tiles[indices] = uniqueMixes.Count - 1; + } + + serializer.DataField(ref uniqueMixes, "uniqueMixes", new List()); + serializer.DataField(ref tiles, "tiles", new Dictionary()); + } + } + + public IEnumerator GetEnumerator() + { + return _tiles.Values.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + /// + public void BurnTile(MapIndices gridIndices) + { + // TODO ATMOS + } + } +} diff --git a/Content.Server/GameObjects/Components/Atmos/MovedByPressureComponent.cs b/Content.Server/GameObjects/Components/Atmos/MovedByPressureComponent.cs new file mode 100644 index 0000000000..9e1e62f455 --- /dev/null +++ b/Content.Server/GameObjects/Components/Atmos/MovedByPressureComponent.cs @@ -0,0 +1,22 @@ +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization; + +namespace Content.Server.GameObjects.Components.Atmos +{ + [RegisterComponent] + public class MovedByPressureComponent : Component + { + public override string Name => "MovedByPressure"; + + public float PressureResistance { get; set; } = 1f; + public float MoveResist { get; set; } = 100f; + public int LastHighPressureMovementAirCycle { get; set; } = 0; + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + serializer.DataField(this, x => PressureResistance, "pressureResistance", 1f); + serializer.DataField(this, x => MoveResist, "moveResist", 100f); + } + } +} diff --git a/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs b/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs index dd232f2097..c00b3d0499 100644 --- a/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs +++ b/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using Content.Server.GameObjects.Components.Access; +using Content.Server.GameObjects.Components.Atmos; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Mobs; using Content.Server.Interfaces.GameObjects; @@ -41,6 +42,7 @@ namespace Content.Server.GameObjects protected const float AutoCloseDelay = 5; protected float CloseSpeed = AutoCloseDelay; + private AirtightComponent airtightComponent; private ICollidableComponent _collidableComponent; private AppearanceComponent _appearance; private CancellationTokenSource _cancellationTokenSource; @@ -69,6 +71,7 @@ namespace Content.Server.GameObjects { base.Initialize(); + airtightComponent = Owner.GetComponent(); _collidableComponent = Owner.GetComponent(); _appearance = Owner.GetComponent(); _cancellationTokenSource = new CancellationTokenSource(); @@ -176,6 +179,7 @@ namespace Content.Server.GameObjects Timer.Spawn(OpenTimeOne, async () => { + airtightComponent.AirBlocked = false; _collidableComponent.Hard = false; await Timer.Delay(OpenTimeTwo, _cancellationTokenSource.Token); @@ -272,6 +276,7 @@ namespace Content.Server.GameObjects CheckCrush(); } + airtightComponent.AirBlocked = true; _collidableComponent.Hard = true; await Timer.Delay(CloseTimeTwo, _cancellationTokenSource.Token); diff --git a/Content.Server/GameObjects/EntitySystems/AtmosphereSystem.cs b/Content.Server/GameObjects/EntitySystems/AtmosphereSystem.cs new file mode 100644 index 0000000000..80197df799 --- /dev/null +++ b/Content.Server/GameObjects/EntitySystems/AtmosphereSystem.cs @@ -0,0 +1,68 @@ +#nullable enable +using System; +using System.Collections.Generic; +using Content.Server.GameObjects.Components.Atmos; +using JetBrains.Annotations; +using Robust.Server.Interfaces.Timing; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.Map; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.Map; + +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 + + public override void Initialize() + { + base.Initialize(); + + _mapManager.TileChanged += OnTileChanged; + EntityQuery = new MultipleTypeEntityQuery(new List(){typeof(GridAtmosphereComponent)}); + } + + public GridAtmosphereComponent? GetGridAtmosphere(GridId gridId) + { + var grid = _mapManager.GetGrid(gridId); + var gridEnt = _entityManager.GetEntity(grid.GridEntityId); + return gridEnt.TryGetComponent(out GridAtmosphereComponent atmos) ? atmos : null; + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + foreach (var gridEnt in RelevantEntities) + { + var grid = gridEnt.GetComponent(); + if (_pauseManager.IsGridPaused(grid.GridIndex)) + continue; + + gridEnt.GetComponent().Update(frameTime); + } + } + + private void OnTileChanged(object? sender, TileChangedEventArgs eventArgs) + { + // When a tile changes, we want to update it only if it's gone from + // space -> not space or vice versa. So if the old tile is the + // same as the new tile in terms of space-ness, ignore the change + + if (eventArgs.NewTile.Tile.IsEmpty == eventArgs.OldTile.IsEmpty) + { + return; + } + + GetGridAtmosphere(eventArgs.NewTile.GridIndex)?.Invalidate(eventArgs.NewTile.GridIndices); + } + } +} diff --git a/Content.Server/GameObjects/EntitySystems/GasTileOverlaySystem.cs b/Content.Server/GameObjects/EntitySystems/GasTileOverlaySystem.cs new file mode 100644 index 0000000000..6fb9879bd7 --- /dev/null +++ b/Content.Server/GameObjects/EntitySystems/GasTileOverlaySystem.cs @@ -0,0 +1,149 @@ +using System; +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; +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 +{ + [UsedImplicitly] + public sealed class GasTileOverlaySystem : SharedGasTileOverlaySystem + { + private int _tickTimer = 0; + private HashSet _queue = new HashSet(); + private Dictionary> _invalid = new Dictionary>(); + + private Dictionary> _overlay = + new Dictionary>(); + + [Robust.Shared.IoC.Dependency] private IPlayerManager _playerManager = default!; + + public override void Initialize() + { + base.Initialize(); + + _playerManager.PlayerStatusChanged += OnPlayerStatusChanged; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Invalidate(GridId gridIndex, MapIndices indices) + { + if (!_invalid.TryGetValue(gridIndex, out var set) || set == null) + { + set = new HashSet(); + _invalid.Add(gridIndex, set); + } + + set.Add(indices); + } + + public void SetTileOverlay(GridId gridIndex, MapIndices indices, GasData[] gasData, int fireState = 0, float fireTemperature = 0f) + { + if(!_overlay.TryGetValue(gridIndex, out var _)) + _overlay[gridIndex] = new Dictionary(); + + _overlay[gridIndex][indices] = new GasOverlayData(fireState, fireTemperature, gasData); + _queue.Add(GetData(gridIndex, indices)); + } + + private void OnPlayerStatusChanged(object sender, SessionStatusEventArgs e) + { + if (e.NewStatus != SessionStatus.InGame) return; + + RaiseNetworkEvent(new GasTileOverlayMessage(GetData(), true), e.Session.ConnectedClient); + } + + private GasTileOverlayData[] GetData() + { + var list = new List(); + + foreach (var (gridId, tiles) in _overlay) + { + foreach (var (indices, _) in tiles) + { + var data = GetData(gridId, indices); + if(data.Data.Gas.Length > 0) + list.Add(data); + } + } + + return list.ToArray(); + } + + private GasTileOverlayData GetData(GridId gridIndex, MapIndices indices) + { + return new GasTileOverlayData(gridIndex, indices, _overlay[gridIndex][indices]); + } + + private void Revalidate() + { + var mapMan = IoCManager.Resolve(); + var entityMan = IoCManager.Resolve(); + var list = new List(); + + foreach (var (gridId, indices) in _invalid) + { + if (!mapMan.GridExists(gridId)) + { + _invalid.Remove(gridId); + return; + } + var grid = entityMan.GetEntity(mapMan.GetGrid(gridId).GridEntityId); + if (!grid.TryGetComponent(out GridAtmosphereComponent gam)) continue; + + foreach (var index in indices) + { + var tile = gam.GetTile(index); + + if (tile?.Air == null) continue; + + list.Clear(); + + for(var i = 0; i < Atmospherics.TotalNumberOfGases; i++) + { + var gas = Atmospherics.GetGas(i); + var overlay = gas.GasOverlay; + if (overlay == null) continue; + var moles = tile.Air.Gases[i]; + if(moles == 0f || moles < gas.GasMolesVisible) continue; + list.Add(new GasData(i, MathF.Max(MathF.Min(1, moles / gas.GasMolesVisibleMax), 0f))); + } + + if (list.Count == 0) continue; + + SetTileOverlay(gridId, index, list.ToArray(), tile.Hotspot.State, tile.Hotspot.Temperature); + } + + indices.Clear(); + } + } + + public override void Update(float frameTime) + { + _tickTimer++; + + Revalidate(); + + if (_tickTimer < 10) return; + + _tickTimer = 0; + if(_queue.Count > 0) + RaiseNetworkEvent(new GasTileOverlayMessage(_queue.ToArray())); + _queue.Clear(); + } + } +} diff --git a/Content.Server/GameObjects/EntitySystems/InstrumentSystem.cs b/Content.Server/GameObjects/EntitySystems/InstrumentSystem.cs index 61e0b598a4..a64f1fec01 100644 --- a/Content.Server/GameObjects/EntitySystems/InstrumentSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/InstrumentSystem.cs @@ -2,7 +2,7 @@ using Content.Server.GameObjects.Components.Instruments; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { public class InstrumentSystem : EntitySystem { diff --git a/Content.Server/IgnoredComponents.cs b/Content.Server/IgnoredComponents.cs index 35725d7466..f40975a84c 100644 --- a/Content.Server/IgnoredComponents.cs +++ b/Content.Server/IgnoredComponents.cs @@ -19,6 +19,7 @@ "Marker", "EmergencyLight", "Clickable", + "CanSeeGases", }; } diff --git a/Content.Server/Interfaces/IGasMixtureHolder.cs b/Content.Server/Interfaces/IGasMixtureHolder.cs new file mode 100644 index 0000000000..12f42a214f --- /dev/null +++ b/Content.Server/Interfaces/IGasMixtureHolder.cs @@ -0,0 +1,11 @@ +using Content.Server.Atmos; + +namespace Content.Server.Interfaces +{ + public interface IGasMixtureHolder + { + public GasMixture Air { get; set; } + + bool AssumeAir(GasMixture giver); + } +} diff --git a/Content.Server/Interfaces/IGasReactionEffect.cs b/Content.Server/Interfaces/IGasReactionEffect.cs new file mode 100644 index 0000000000..27958cc3cc --- /dev/null +++ b/Content.Server/Interfaces/IGasReactionEffect.cs @@ -0,0 +1,13 @@ +#nullable enable +using Content.Server.Atmos; +using Content.Server.Atmos.Reactions; +using Robust.Shared.Interfaces.Serialization; +using Robust.Shared.Map; + +namespace Content.Server.Interfaces +{ + public interface IGasReactionEffect : IExposeData + { + ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder); + } +} diff --git a/Content.Server/Observer/Ghost.cs b/Content.Server/Observer/Ghost.cs index ce2dda23c3..a2a2dda05f 100644 --- a/Content.Server/Observer/Ghost.cs +++ b/Content.Server/Observer/Ghost.cs @@ -1,12 +1,18 @@ -using Content.Server.GameObjects; +using Content.Server.GameObjects; 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 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 { @@ -39,6 +45,8 @@ namespace Content.Server.Observer var position = player.AttachedEntity?.Transform.GridPosition ?? IoCManager.Resolve().GetObserverSpawnPoint(); + + if (canReturn && player.AttachedEntity.TryGetComponent(out SpeciesComponent species)) { switch (species.CurrentDamageState) diff --git a/Content.Server/ServerContentIoC.cs b/Content.Server/ServerContentIoC.cs index e61f5ba4a7..57d1ab0054 100644 --- a/Content.Server/ServerContentIoC.cs +++ b/Content.Server/ServerContentIoC.cs @@ -1,4 +1,4 @@ -using Content.Server.AI.Utility.Considerations; +using Content.Server.AI.Utility.Considerations; using Content.Server.AI.WorldState; using Content.Server.Cargo; using Content.Server.Chat; diff --git a/Content.Shared/Atmos/Atmospherics.cs b/Content.Shared/Atmos/Atmospherics.cs new file mode 100644 index 0000000000..74d1db086e --- /dev/null +++ b/Content.Shared/Atmos/Atmospherics.cs @@ -0,0 +1,174 @@ +using System.Collections.Generic; +using Robust.Shared.IoC; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Atmos +{ + /// + /// Class to store atmos constants. + /// + public static class Atmospherics + { + static Atmospherics() + { + var protoMan = IoCManager.Resolve(); + + GasPrototypes = new GasPrototype[TotalNumberOfGases]; + + for (var i = 0; i < TotalNumberOfGases; i++) + { + GasPrototypes[i] = protoMan.Index(i.ToString()); + } + } + + private static readonly GasPrototype[] GasPrototypes; + + public static GasPrototype GetGas(int gasId) => GasPrototypes[gasId]; + public static GasPrototype GetGas(Gas gasId) => GasPrototypes[(int) gasId]; + public static IEnumerable Gases => GasPrototypes; + + #region ATMOS + /// + /// The universal gas constant, in kPa*L/(K*mol) + /// + public const float R = 8.314462618f; + + /// + /// 1 ATM in kPA. + /// + public const float OneAtmosphere = 101.325f; + + /// + /// -270.3ºC in K. CMB stands for Cosmic Microwave Background. + /// + public const float TCMB = 2.7f; + + /// + /// 0ºC in K + /// + public const float T0C = 273.15f; + + /// + /// 20ºC in K + /// + public const float T20C = 293.15f; + + /// + /// Liters in a cell. + /// + public const float CellVolume = 2500f; + + /// + /// Moles in a 2.5 m^3 cell at 101.325 Pa and 20ºC + /// + public const float MolesCellStandard = (OneAtmosphere * CellVolume / (T20C * R)); + + #endregion + + /// + /// Visible moles multiplied by this factor to get moles at which gas is at max visibility. + /// + public const float FactorGasVisibleMax = 20f; + + /// + /// Minimum number of moles a gas can have. + /// + public const float GasMinMoles = 0.00000005f; + + public const float OpenHeatTransferCoefficient = 0.4f; + + /// + /// Ratio of air that must move to/from a tile to reset group processing + /// + public const float MinimumAirRatioToSuspend = 0.1f; + + /// + /// Minimum ratio of air that must move to/from a tile + /// + public const float MinimumAirRatioToMove = 0.001f; + + /// + /// Minimum amount of air that has to move before a group processing can be suspended + /// + public const float MinimumAirToSuspend = (MolesCellStandard * MinimumAirRatioToSuspend); + + public const float MinimumTemperatureToMove = (T20C + 100f); + + public const float MinimumMolesDeltaToMove = (MolesCellStandard * MinimumAirRatioToMove); + + /// + /// Minimum temperature difference before group processing is suspended + /// + public const float MinimumTemperatureDeltaToSuspend = 4.0f; + + /// + /// Minimum temperature difference before the gas temperatures are just set to be equal. + /// + public const float MinimumTemperatureDeltaToConsider = 0.5f; + + /// + /// Minimum temperature for starting superconduction. + /// + public const float MinimumTemperatureStartSuperConduction = (T20C + 200f); + + /// + /// Minimum heat capacity. + /// + public const float MinimumHeatCapacity = 0.0003f; + + #region Excited Groups + + /// + /// Number of full atmos updates ticks before an excited group breaks down (averages gas contents across turfs) + /// + public const int ExcitedGroupBreakdownCycles = 4; + + /// + /// Number of full atmos updates before an excited group dismantles and removes its turfs from active + /// + public const int ExcitedGroupsDismantleCycles = 16; + + #endregion + + /// + /// Hard limit for tile equalization. + /// + public const int ZumosHardTileLimit = 2000; + + /// + /// Limit for zone-based tile equalization. + /// + public const int ZumosTileLimit = 200; + + /// + /// Total number of gases. Increase this if you want to add more! + /// + public const int TotalNumberOfGases = 5; + + public const float FireMinimumTemperatureToExist = T0C + 100f; + public const float FireMinimumTemperatureToSpread = T0C + 150f; + public const float FireSpreadRadiosityScale = 0.85f; + public const float FirePhoronEnergyReleased = 3000000f; + public const float FireGrowthRate = 40000f; + + public const float SuperSaturationThreshold = 96f; + + public const float OxygenBurnRateBase = 1.4f; + public const float PhoronMinimumBurnTemperature = (100f+T0C); + public const float PhoronUpperTemperature = (1370f+T0C); + public const float PhoronOxygenFullburn = 10f; + public const float PhoronBurnRateDelta = 9f; + } + + /// + /// Gases to Ids. Keep these updated with the prototypes! + /// + public enum Gas + { + Oxygen = 0, + Nitrogen = 1, + CarbonDioxide = 2, + Phoron = 3, + Tritium = 4, + } +} diff --git a/Content.Shared/Atmos/GasPrototype.cs b/Content.Shared/Atmos/GasPrototype.cs new file mode 100644 index 0000000000..95aed54219 --- /dev/null +++ b/Content.Shared/Atmos/GasPrototype.cs @@ -0,0 +1,86 @@ +using Robust.Shared.Interfaces.Serialization; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; +using System; +using Robust.Shared.Utility; +using YamlDotNet.RepresentationModel; + +namespace Content.Shared.Atmos +{ + [Prototype("gas")] + public class GasPrototype : IPrototype, IIndexedPrototype + { + public string Name { get; private set; } + + // TODO: Control gas amount necessary for overlay to appear + // TODO: Add interfaces for gas behaviours e.g. breathing, burning + + public string ID { get; private set; } + + /// + /// Specific heat for gas. + /// + public float SpecificHeat { get; private set; } + + /// + /// Minimum amount of moles for this gas to be visible. + /// + public float GasMolesVisible { get; private set; } + + /// + /// Visibility for this gas will be max after this value. + /// + public float GasMolesVisibleMax => GasMolesVisible * Atmospherics.FactorGasVisibleMax; + + /// + /// If this reagent is in gas form, this is the path to the overlay that will be used to make the gas visible. + /// + public string GasOverlayTexture { get; private set; } + + /// + /// If this reagent is in gas form, this will be the path to the RSI sprite that will be used to make the gas visible. + /// + public string GasOverlayState { get; set; } + + /// + /// State for the gas RSI overlay. + /// + public string GasOverlaySprite { get; set; } + + /// + /// Sprite specifier for the gas overlay. + /// + public SpriteSpecifier GasOverlay + { + get + { + if(string.IsNullOrEmpty(GasOverlaySprite) && !string.IsNullOrEmpty(GasOverlayTexture)) + return new SpriteSpecifier.Texture(new ResourcePath(GasOverlayTexture)); + + if(!string.IsNullOrEmpty(GasOverlaySprite) && !string.IsNullOrEmpty(GasOverlayState)) + return new SpriteSpecifier.Rsi(new ResourcePath(GasOverlaySprite), GasOverlayState); + + return null; + } + } + + /// + /// Path to the tile overlay used when this gas appears visible. + /// + public string OverlayPath { get; private set; } + + public void LoadFrom(YamlMappingNode mapping) + { + var serializer = YamlObjectSerializer.NewReader(mapping); + + serializer.DataField(this, x => ID, "id", string.Empty); + serializer.DataField(this, x => Name, "name", string.Empty); + serializer.DataField(this, x => OverlayPath, "overlayPath", string.Empty); + serializer.DataField(this, x => SpecificHeat, "specificHeat", 0f); + serializer.DataField(this, x => GasMolesVisible, "gasMolesVisible", 0.25f); + serializer.DataField(this, x => GasOverlayTexture, "gasOverlayTexture", string.Empty); + serializer.DataField(this, x => GasOverlaySprite, "gasOverlaySprite", string.Empty); + serializer.DataField(this, x => GasOverlayState, "gasOverlayState", string.Empty); + } + } +} diff --git a/Content.Shared/Chemistry/ReagentPrototype.cs b/Content.Shared/Chemistry/ReagentPrototype.cs index 2840ca4855..1280c7781e 100644 --- a/Content.Shared/Chemistry/ReagentPrototype.cs +++ b/Content.Shared/Chemistry/ReagentPrototype.cs @@ -5,6 +5,7 @@ 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 @@ -12,6 +13,8 @@ namespace Content.Shared.Chemistry [Prototype("reagent")] public class ReagentPrototype : IPrototype, IIndexedPrototype { + private const float CelsiusToKelvin = 273.15f; + #pragma warning disable 649 [Dependency] private readonly IModuleManager _moduleManager; #pragma warning restore 649 @@ -29,7 +32,6 @@ namespace Content.Shared.Chemistry public Color SubstanceColor => _substanceColor; //List of metabolism effects this reagent has, should really only be used server-side. public List Metabolism => _metabolism; - public string SpriteReplacementPath => _spritePath; public ReagentPrototype() diff --git a/Content.Shared/GameObjects/EntitySystems/SharedGasTileOverlaySystem.cs b/Content.Shared/GameObjects/EntitySystems/SharedGasTileOverlaySystem.cs new file mode 100644 index 0000000000..111f81f10d --- /dev/null +++ b/Content.Shared/GameObjects/EntitySystems/SharedGasTileOverlaySystem.cs @@ -0,0 +1,73 @@ +using System; +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 +{ + public abstract class SharedGasTileOverlaySystem : EntitySystem + { + [Serializable, NetSerializable] + public struct GasData + { + public int Index { get; set; } + public float Opacity { get; set; } + + public GasData(int gasId, float opacity) + { + Index = gasId; + Opacity = opacity; + } + } + + [Serializable, NetSerializable] + public readonly struct GasOverlayData + { + public readonly int FireState; + public readonly float FireTemperature; + public readonly GasData[] Gas; + + public GasOverlayData(int fireState, float fireTemperature, GasData[] gas) + { + FireState = fireState; + FireTemperature = fireTemperature; + Gas = gas; + } + } + + [Serializable, NetSerializable] + public readonly struct GasTileOverlayData + { + public readonly GridId GridIndex; + public readonly MapIndices GridIndices; + public readonly GasOverlayData Data; + + public GasTileOverlayData(GridId gridIndex, MapIndices gridIndices, GasOverlayData data) + { + GridIndex = gridIndex; + GridIndices = gridIndices; + Data = data; + } + + public override int GetHashCode() + { + return GridIndex.GetHashCode() ^ GridIndices.GetHashCode() ^ Data.GetHashCode(); + } + } + + [Serializable, NetSerializable] + public class GasTileOverlayMessage : EntitySystemMessage + { + public GasTileOverlayData[] OverlayData { get; } + public bool ClearAllOtherOverlays { get; } + + public GasTileOverlayMessage(GasTileOverlayData[] overlayData, bool clearAllOtherOverlays = false) + { + OverlayData = overlayData; + ClearAllOtherOverlays = clearAllOtherOverlays; + } + } + } +} diff --git a/Resources/Audio/Effects/space_wind.ogg b/Resources/Audio/Effects/space_wind.ogg new file mode 100644 index 0000000000000000000000000000000000000000..3709cdb05575345259e84a219111f6ffd8cdbd38 GIT binary patch literal 22791 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 D;Syu- literal 0 HcmV?d00001 diff --git a/Resources/Groups/groups.yml b/Resources/Groups/groups.yml index bdfa5ec6c0..fc07a7092a 100644 --- a/Resources/Groups/groups.yml +++ b/Resources/Groups/groups.yml @@ -171,6 +171,12 @@ - anchor - unanchor - tubeconnections + - addatmos + - addgas + - fillgas + - listgases + - removegas + - settemp CanViewVar: true CanAdminPlace: true CanScript: true diff --git a/Resources/Prototypes/Atmospherics/gases.yml b/Resources/Prototypes/Atmospherics/gases.yml new file mode 100644 index 0000000000..b6ec483c1b --- /dev/null +++ b/Resources/Prototypes/Atmospherics/gases.yml @@ -0,0 +1,28 @@ +- type: gas + id: 0 + name: Oxygen + specificHeat: 20 + +- type: gas + id: 1 + name: Nitrogen + specificHeat: 30 + +- type: gas + id: 2 + name: Carbon Dioxide + specificHeat: 30 + +- type: gas + id: 3 + name: Phoron + specificHeat: 200 + gasOverlaySprite: /Textures/Effects/atmospherics.rsi + gasOverlayState: phoron + +- type: gas + id: 4 + name: Tritium + specificHeat: 10 + gasOverlaySprite: /Textures/Effects/atmospherics.rsi + gasOverlayState: tritium diff --git a/Resources/Prototypes/Atmospherics/reactions.yml b/Resources/Prototypes/Atmospherics/reactions.yml new file mode 100644 index 0000000000..9b28728a42 --- /dev/null +++ b/Resources/Prototypes/Atmospherics/reactions.yml @@ -0,0 +1,11 @@ +- type: gasReaction + id: PhoronFire + priority: -2 + minimumTemperature: 373.149 # Same as Atmospherics.FireMinimumTemperatureToExist + minimumRequirements: # In this case, same as minimum mole count. + - 0.01 # oxygen + - 0 # nitrogen + - 0 # carbon dioxide + - 0.01 # phoron + effects: + - !type:PhoronFireReaction {} diff --git a/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml b/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml index 1e509147e0..cb2ae3a10e 100644 --- a/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml +++ b/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml @@ -51,6 +51,8 @@ interfaces: - key: enum.WiresUiKey.Key type: WiresBoundUserInterface + - type: Airtight + adjacentAtmosphere: true - type: Occluder - type: SnapGrid offset: Center diff --git a/Resources/Prototypes/Entities/Constructible/Storage/Closets/closet.yml b/Resources/Prototypes/Entities/Constructible/Storage/Closets/closet.yml index bb2500721e..45ae98fcca 100644 --- a/Resources/Prototypes/Entities/Constructible/Storage/Closets/closet.yml +++ b/Resources/Prototypes/Entities/Constructible/Storage/Closets/closet.yml @@ -17,6 +17,7 @@ sprite: Constructible/Structures/closet.rsi state: generic_door - type: Clickable + - type: MovedByPressure - type: InteractionOutline - type: Collidable shapes: diff --git a/Resources/Prototypes/Entities/Constructible/Walls/walls.yml b/Resources/Prototypes/Entities/Constructible/Walls/walls.yml index fb97f7198f..2ba3947118 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/walls.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/walls.yml @@ -33,6 +33,8 @@ sizeY: 32 - type: SnapGrid offset: Center + - type: Airtight + - type: IconSmooth key: walls base: solid diff --git a/Resources/Prototypes/Entities/Constructible/Walls/windows.yml b/Resources/Prototypes/Entities/Constructible/Walls/windows.yml index 6b3be3d922..bcecaf60cf 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/windows.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/windows.yml @@ -31,6 +31,7 @@ thresholdvalue: 100 - type: SnapGrid offset: Center + - type: Airtight - type: Window base: window diff --git a/Resources/Prototypes/Entities/Mobs/Player/observer.yml b/Resources/Prototypes/Entities/Mobs/Player/observer.yml index dccd2699a6..eba5ba58d4 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/observer.yml @@ -16,6 +16,7 @@ DoRangeCheck: false - type: IgnorePause - type: Ghost + - type: CanSeeGases - type: Sprite netsync: false drawdepth: Ghosts diff --git a/Resources/Prototypes/Entities/Mobs/Species/human.yml b/Resources/Prototypes/Entities/Mobs/Species/human.yml index 2e2989ee36..eab5362bdd 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/human.yml @@ -11,6 +11,7 @@ - type: Flashable - type: Hands - type: MovementSpeedModifier + - type: MovedByPressure - type: Hunger - type: Thirst # Organs @@ -139,6 +140,7 @@ - type: Grammar proper: true - type: Pullable + - type: CanSeeGases - type: entity save: false diff --git a/Resources/Prototypes/Entities/item_base.yml b/Resources/Prototypes/Entities/item_base.yml index 014c2c445d..160dfad548 100644 --- a/Resources/Prototypes/Entities/item_base.yml +++ b/Resources/Prototypes/Entities/item_base.yml @@ -7,6 +7,7 @@ size: 5 - type: Clickable - type: InteractionOutline + - type: MovedByPressure - type: Collidable shapes: - !type:PhysShapeAabb diff --git a/Resources/Prototypes/Reagents/chemicals.yml b/Resources/Prototypes/Reagents/chemicals.yml index 0f6421018e..482f42721c 100644 --- a/Resources/Prototypes/Reagents/chemicals.yml +++ b/Resources/Prototypes/Reagents/chemicals.yml @@ -35,8 +35,8 @@ boilingPoint: 100.0 - type: reagent - id: chem.Plasma - name: plasma + id: chem.Phoron + name: phoron desc: Funky, space-magic pixie dust. You probably shouldn't eat this, but we both know you will anyways. color: "#500064" boilingPoint: -127.3 # Random values picked between the actual values for CO2 and O2 diff --git a/Resources/Prototypes/Reagents/elements.yml b/Resources/Prototypes/Reagents/elements.yml index 13fa9d1d5c..50900bea4b 100644 --- a/Resources/Prototypes/Reagents/elements.yml +++ b/Resources/Prototypes/Reagents/elements.yml @@ -13,6 +13,7 @@ color: "#808080" boilingPoint: -183.0 meltingPoint: -218.4 + gasOverlayTexture: /Textures/Effects/Gas/deleteme.png - type: reagent id: chem.S diff --git a/Resources/Textures/Effects/atmospherics.rsi/chem_gas_old.png b/Resources/Textures/Effects/atmospherics.rsi/chem_gas_old.png new file mode 100644 index 0000000000000000000000000000000000000000..11a6ef1a58cebb4ef75c10cb004463b40170fd98 GIT binary patch literal 307 zcmV-30nGl1P)-XLO5(Qfnsl=rK05FJ%IIruvBI4{d_m}J# z9+`tfQyDw+ku@+CT0elDa`tucJr!+sOzq06;T6D}abNS1c`S3{i%%fLVJ9I{;Wk?|YT+ zG0aj`IRk*%%$8?I<_t*o>Sg`Y_W^zwA}?|n!uwY6#zym0E|=s7+2x*x50NG79vXQ#-|h^r_1Z-*BkXEQ-HSJ46FD^p7(m! zpMH)CARlsuR1p=CGkOK5t^zL^2Vjv#7>rZ^7^wg-j&A7D5bfkro|Ox0JgWjUUVzs9 zi|A`-F7>l+KUD!9LM-qcFe|*d4EswrbUp3@z%;^Z@oR-}&w`|3dru(MRukg4&x@D7 zvJHnvuMcvYY>y%$_hQbVSvg2~)B&?7!^A^+8anN8VLOlhKAN9iVDA_`BRtwRB-;hI zPfZ&u4=;ay#DjG#-73IyTaa!^-1eSaIDJ`p4C4x^8)_ZYQJ?N-?L?c_2F%)eap+>C z04r%pfW+y;gM+1ykrOc*@F9nYElBIKQvGN-Xk1E5ic=MlQwkU@W32&`w2j#6c9c1_ z0n`9`oxf;|Acuo@URV-fi6$u52y>UIhKOVkq#P(5`_Rs8mm&j6QeNwOx3J_LA~`_v z5hDdiNLW_|r@e$jMBEa>f!cy1_I|GFwTZsDgTY|t*kdpBYC&x-_hKl@Bh?%C?!KZf17+S-OFeFX}D3(d%iz~ zI~y=NitsAipawQFQO^OSAgjubvH>1NQx5@dAU0Z_)D{!zU1*p7b~2@vaTV69OrBSv zR&WWESrrgb)Z}41R&jy7f18kz*2r_gok0jLM=XE;*&VSKp2-u-^&l%3Dhs##jsWK{ zE&`l1q}7OX72G~&slFC-?kPZ1|7fuRQqmq*q9ign{i;`u=8yJiiEx1A0FlkTA%hH_ zkQ~Bgb1&%~5iwJwOWur;hi#CJ8^LbwE||vO4@K=)2_#blW`mIL{vg_q4|SNk%wU`i=;{^rM$m9 z{|%DKf;0~BEDc4Z>CjVvwFZVNURqg)e;TEYa>5#D zbHm;;PXq7cXvtRNHA_!3+k04Tgik$NBfzbUYeCIoYOfy+yrfoiB)0{(hzc4B_i95c zqObZ>xz$y2ODW}sK8kqwobVY^l8AczD7o95f>ubqpw?b!{B>*jw^nZNcen?o{Xb+R z`z*IFh-|bCIIaLmZM>v{cvc0+jgUVMKfMe$dy5Tep-rR?o+Ex%`W57H8CPM4{4Sqp*BUJwPz-mBfGx&28!CJI~H0LdYm#3*a?0jp#~k!L|*8}JP_1E=L!kGIhP0000< KMNUMnLSTY_lqwbg literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/atmospherics.rsi/freon_old.png b/Resources/Textures/Effects/atmospherics.rsi/freon_old.png new file mode 100644 index 0000000000000000000000000000000000000000..597212a36ba55a4ad5ee153e80f5c57847b64ae8 GIT binary patch literal 599 zcmV-d0;v6oP)o*Zx` z!uu8N0CYhDRRCF%de~cCfHoW+0ntG(fXgA_P}U)7&p?*5j9yVD_gtmTYw3)jk>{4i zS<_2$Qr2XdZ>pRDG?dyp1THyWs?y=eT3T#~gXOQjqU-ap6`;o*HE zJePC+*$t|G6Gl5A^qX_^3odp0x%Gdoj2cj7?`)TwkiIRY$YzzFYvBuSDaNs{Cs;j6$f_y6H%dIdATXkChN4X}I*HidK9 zrP&R^nOMzk2$MS>t}-R0BVg~uYD9pGH(W#tc;-rNE^v-sYisBd4iDiB?^;8Xt2s%| zh-Ty#`-0FN52&&J1M5ASOTaz-`I2naEbduE^~byvUcWn) zfa$E^fIQiP2+_;Q0Dc(E2mlk_0m(&}S28@Ofq~hdxg12KYKHSap+-g(77>8#&-d^@ lVN-XLO5(Qfnsl=rK05FJ%IIruvBI4{d_m}J# z9+`tfQyDw+ku@+CT0elDa`tucJr!+sOzq06;T6D}abNS1c`S3{i%%fLVJ9I{;Wk?|YT+ zG0aj`IRk*%%$8?I<_t*o>Sg`Y_W^zwA_yAA?>V169p~D z(_YV-mM14{4gVyBUctT3=f={Gxuxa70Ba;8B|fjHCBx7l%tq20CY^8qJW1a{>x7ns z-g)&xx8JR&$MWh&I7w-_g1hlj9n~qwQd_AVV}V9T%Q-t*N4O6d$$3V@I?r>M=uDrM zX{Zz=5hXd+t3z_`QpXynwZLY{C)96%r6kM6(4MEt5}QYrl%sN#`x~GY6HzD9$D$D=_!1!-g5a(dy8(Ts`E;EC}i8m8;{_$3h% zDQXJ{4Xq7O!=V&`yr>a0NIr|!FkR2bFUhMaA=8FvYawB84V)&g1_|HY03K2z`OVxi z1X@EY)HJY8*c0(c&b1^?5*I> zweM+#yAz(#yH{S@#uBZ~(_RvB{iX$(R=x6TpSRZL?TwXiaOa0KW{uK%h{`EE9L;(| zM=?r?9@?}Vp$5peL(j2lfLfot#es5SEX}o=hFVS=cMVY-9GBY%co*b*zct>bS_{V- zL|qY@fk&BY_J)ru9ZzdFcI(NEywN4ctV60LQbTXflH;TNr~Ht+(X%1SzevGRz4xPY z5*Zq^dS!|uXz9Ue+9kOq(9$EnbjH24ps!z4ifG+5yF9kH7UcDJsfLbJsYGbuIN3Gf zo?^XQqFSH_wRSAn9MGD`Kxm1AvhR03!_m#-V3If@%}zv|Q-+)0&IJ!-9-8<&L_sk`*^j zr{)?)SwgLTWtr6|yLqF)VQ3~|nFqW#(g0wj0l-i%%15`3w|3SMdktE`{iS_Tdjg`) zQJ)WX!lG(u#FN{r(aFP!K=|*7?ct&y@Csq*NNp#3!^0G$?ThDbyvA8`yvt)XO;me$ z8=HQ4cVyJlj5kXWV4!^fvNwLo#58T>5xw!{=bEE!`y&Xw9#c9W@C1ayx$;}fnNvP=AD7VGMJqQn6 z=uB9Ir=Y*7h`gUmc%MK30000Oo1jvB>-zsAq6D0VO#tIPt z00000000000001NjwMHy+}ds4jLw^J^}a*0WSB*xS#q|g&i2$TIl-IJ-TOy(?;l+b zCw!znpfyB-vdh2`CCHo6O~?Oz@oRFDO9oV7I#mVHPLce`|9gYaF16SY z%($XL?qDUIn{!Pau>&H!G<^RAzf;lyPii;~5(&y3T#5#(nYdCd(K|LnkWrJ2%8Vb{ zkZE;*C1(u{*3gi$*ie4HnzM)Id%t!iao(?WYP}iV*_z>O&G7pC&*{V0?R4?izkw_T zizOFh05+j#C(bt+iHOKwM>lJS$CBUO6K-k zv1p_Wi%xcKgQs51obh+P^R{5FaAR{M<0l&nC~>4+2mk;80002cVX3Zo8H;YZ0ssKO zqmlN!d;jQy1I&0*CxtqMr@1-Ts%g5)L_OWn%$Mv@9TZK`hy(!+M|gLdh@J#xYTAmO zn{}-MipKzz>h>*mcr)rYiB$_jg2a8OF=GH!!x6Hl=rw8^=Lr9rk*@I>gy-6)XUUji zZeg723pkPIN_GefQp}ina;Sj51U1kh9P>9;u|yUvG#jXLrMqw|6=;G|nbMwAfQaIC zSR@~%4A6iIL?bbN^}BHQ?A7>tuUPlNUU%O{`~sZ{{fSX&H*Ej_002ovPDHLkV1g&M B8j1h_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/atmospherics.rsi/nitrous_oxide.png b/Resources/Textures/Effects/atmospherics.rsi/nitrous_oxide.png new file mode 100644 index 0000000000000000000000000000000000000000..cd092091a8d633790b8b9e3e0e8eb9a6e7fb0cd7 GIT binary patch literal 2041 zcmVpQ3N#52+w4?Dz%Ai0m3an*faaj=jZ3YqYj61?o5og z#%A?;^lQ2h{fBVei>n=yjvx2~3cO;6^DU=(oE~+oro(&FABflzA)#g8*Vvf=$i%8A zAC(`~R|Qo6IpjH)lkiFaErfU#R;;>N?vc=wwPS^hEmiX{1VJ5`HKOs~vsS>(zCPJRv&ftf8f5u~Goy5N2f? zg*PRws^-iMV5LN@AS{8D0z8PU-pu$cj_LPk6k5sk$e6EZ=y$_Y1R}~aJ%U{}RKv1E zTL3H)z*}w>0ip(YfNo9aV=P;|TjNeb!X!iqaM#HrTc*mWvs*v?K4c<5xASLY_Rr6( zKXo5iDc~;7pMT$FkE9<#MTCH5G6+!Ze0Gbqqtj=}X80;ZLW=<1&aWya@6t{5^bbl% zs1e}K&d*l**_6fHX|$3tk^*)*A9aq`rfl_*Va zkT-e&-3P|AfH$5PZvy;syb17MuIzq*)P{;0pbGO%%GMgQJZ+0w(dq2&o{llr1VB~; z%lXH^9I>)#mjks9+tWYm_!zP9#|oR4jLPtQ414Q@*yn{dC*=4!{iM*90_Mk*D^`13 zq{zx>ZM%YU=TwA{FdP-G1csw)?052m~E5Os>xsH#n21XU$jTS#hoxoL- zL=q}pCmlzK@ta7f=_~icOn_@OAI)nT=7~t#ww)xDY}iFYq;MI)*qz_v)M@zIcm?%O@ZrN?eWchr`MOelh8 zzaOAtpU$i;A|#yiytgizWoXxV?1_Z=S;h}JQ39OPzicKm!(tYZZDN*$tFakhi(?`$ zg-X|-0a^3duFCofsV2yzCT7t{_0hExm@zQ3Jz8yRqPBQ+Tj^^hE9)l~Xpwh*7SJ)d zE=SK!?3}-~GeU{&-8zTf2+9^|m5A6T6@AglJ~GB4Bh%;KWIqUyDRLe{Uj-}Y?|?

Kl`c>cc0`+FjB(!K3nIEE&uq>_^v}O{)G)^#2+)mA z613MDC;{%$rhS79qz2I1yjoGm#_n2SH_+OI>WA!i1xx3(ZB%57RZYSc=Y#sBT}8$Z zU-OVs03+nD#-GYLj~wK@HcmSy<>uM>*Pqof%`WXmN?`iotMHUQ8N@=i8N<*oZ9C_4 z+Nx$o!pBOr`XQ)p1Y#tq{A7>?DHXgr3A>8vrQW-313O449cS8tq=g5z7P)`MPot!e ziNdq0k%BN9CDh`_Da(t9%`K5(ej2D244_Oc?~TPdO}0c1OU7zWQgNptx)@MmTPr_H z3RC7a0z_8gN~q_i{V)jBhg_d=o_7wjK94PkU&@GReKgEU57u!DTEwx&FmffLzuE^Y zSaYNiQF|wF<(z8gd#<-aK0|-C4>Wx{h^W2~pyhtV`6x?Kp!Qfg=iJNC$?$<@QyCGF zX8~wbK#qHyui3L(2Ga)-lo8R}2VjIfO$J&CAD165PC+J$>dG{ql~ufKy8u2=^Y5D$t)q_hcbAF^Sy>!q4F?(Rg223A##?D0aL=IJ-Rs>36C|W>8ogXcD7!~+k ze6X^?qf?B8Rs>kBz=r`=p4w3$S&pz)EP_rSX!D~)!t6JMSmzle$gX5*{0`e#K8Wam zi0EkqMQ#LAw0XvR(?L{kMm92@O^UFMo(RBleg&j3EnSNOjUL{doY5VD7>QOzptp$f zY=P!+Od#?+&W{vYEd3Q&&c|v6N2^T+(D095!?MfL!ScZtvQ)hlY=y|m$yHX~?tOM4 z(85pcA?*5eaA)Xap<@nSovZ6r8Fzat_<@}f13|a`GTfB_cf!lw{4w4H`1N?^|1cuc z3f1t^D}Ki6tzcv)z;ymxnIe7nxw5@NnuAm|Th;VDcK7p+QXt#FO6SkNYYu(bf%M0<%XI0-7^s)e#hOL)@XemBaP}j^mJCm zZK^vvWX#NG?*ToyyHB}BsoQD9scsW~XIc(mTASlf%K1Pi0nd@Xh}Wy5q`Fo4GkE0_ zwNR}!YAG$FDm$ZtWUfysVw=h8sLR4KU_ zog-Hq`RgLTK`e~!0`|h4U&+Nj35QJ5XgGo3MN8y~D9wYIOSG5G^=$-?MmDN?Mr$+)aSYU1psXzYt`_I2d9#3NI ztAL-!vx>(G{@&hI()z#`J3+x~U<+MwFbAF^upu|*AL8{WUc_<0S8n{w|NOfofb&`_ zgjD0d9Z&&~9>UtFPC>}ftXj|3hx#Ap^AXpau>c1_L=ZeWsMd9F{7M()fnAF?UKEHb z7k~&u=X^-o8Bjc|YNEn^~RQp?L<5pETRMGC zKh^v#npc*YXTIJ#%=bGiKo*DwN)NS4bHmz3()V0zi2&{-07&_Gb!IY~TtwSgAwZrf zd-$sB*g*i$dI9>-j3r=cR)Z0~3SJ+=EC~Seu-S#7hqS}xO_{bW;Em9GTiaKVNoC;G zMgKYdyAqZD8tt_}XneTYt6adUzJaS7LaOgLqEOfJmq7GYXVms1n%eZ>u-DMOzln@5HwtXae9pK-b}4sd4SvW{m5+^fJ@ehcTct zsy^sy4L`1*|f2omIy!q_oW$E4?noTjzGUbdWAtfSvt!2fQXuwi!d!w!!bMrO6&$h>ukW z`agluw#;Q$cf$;guTJ6@A=*)#xm~R2Vvd069Tahgh7bl>^UEIM?OkQ11*pN^%@m0LfSfXvGahWS{$-+kP8Y6ZY^b<_3 zgm!HM=`iycODzKVnz&sqLpsba!ZR};nHRMjD9re4hcxg?^Xt(^=dMDg_d*QR5drAZ zJj5(|f^n=ZV}2{G8j|f?1u@HdC~tlYRET9X&x^i2^NR+nE49|twg&o{XZsEUBNrhR znswDHX`=_i z2*Nxrn!%X!q8|)#2^;h71k}Z`83L;9QB9X(5Rq2&GHCVTXY**!RY?JAwq}4}Wq>NK z?+*O{(&0quAcDY}^E0A1qO0(+zQ_kdSW_3>5bv5uzY4*rQw>OSv3du`Lw1`4e7$e@T+AJni)h6w4ypX(?Q42@c7SG>W!cF{Q#ZF zq?MVps2bU8-7_*SZH88L6=8ikxN9+IAP??UBO}-$P}9sc8V{5_L+5SabNaXAu&%zL z>)`Lv(_(=T&@`~BX=Il)smgR`*AU@dx^|``C@bwR2}7fF$+TOM zs5d5x&O<^3Ot-cu#H`Qpz)o1{mMjIaTtd{Py3fU4 z234hSEG!FD1uexyQ%|Ov=iLTo-lxE30V!!yfIN_v+j<#B#3XC4S+BF01y zpLV$ndI>-C`v=ZuPcxgEY0TbjbOG%TuwL`#igR}83f6#VsstnuwccyhxS?lLR+hzH zz@c-+FN)0iTlV0xg(8m^OE=vMhs0nY;8t4EbDu1@HbD zxu32`Yce!eXxw=`v(EPVL?#QE7w7%|cujK?(b~9G3}O7FS8VA>0kep#>21y&1FR}~ zSbVMy!YpL(LpqRJlXV%SX==scpmSJ3^Q;IGgn7tj8dsOY-_9^n2gvwab}kcyWezi1 zb71*KvWj`0q#R)@P+1B_^IEH_$D%6;LoE=Ub_HovS1`ZlMuI>oV2j2Jhu&PwKf@T?*uHXuP+g0uz1nsMXumhJL{uup#FF>mecQB% z7kNKA*K#K!m_HsJ!7i64j0R>kt~1SK`XnHre=-K$z+H0eN<^AAZiAJ7HtvpKHEvZ5 zQHGtmf-{#wyI_?CWL%Fqb{7Gd?+wn-QbFs%ym*EQ_PP;?y%5&}1?f8oKr~{uHX+j$ zBwb@?P)}MOU_XVjipL z8qQMTDmbp3(LgC+=l0TXW*f2rJNE67>Z=CWDg!b>Qp%1K%9r(kV-^iNoJ+**!2NXfCuI&%C6xo6|REg${7t%m(AP(2A0gU`Tz+7AruZx?CS$^ z#!=d8?F8dieSirxh5=&kSoHzZKxz&k>gSyUTsmb5z@Zh;p`dl}3A{hXp(j!qwMKx= zII29d{vI|t#&=J^L^7eUcGuoJ$X<4?EwK`&2{dFV57LWt>-Dxjo(~?a(iqm9EK~pn09ZIg zGSus>Zt9Kq*2F4{-tx3E#{uwLVBVd}7hsStQ2@)+O1}2Sz|HY|0B+LP{Q;oW@2$ZY z*UiORsR}nC%3mMaSco4MJ(@d!xFDkfTu7(u=E8&M$;mUXFcX*dk12x|Fd)~M0gey} znc%~MFdr3tMxidKQyj!l_YBv~#cJ+(&~~>Ur9+bvCdQb}G^gF|r}&*A@HNoiT?6P- zq&J39XVbmESS9X-`~zWny~uym9n9%Osf=etC2ksMp)6f&!*{=ecyJj3Ery z)Yc&g$JzxZVdf;qn2#%WJRcg|wWLzt1yPI0%sl2r-NmsU!@CYZ_lN+rTAAA%wYM1G zTG{T!kFum?1y>2dIr&CaLgd|M1+X_I# z+Z=C?p0+x^p$W9*695J+fR&EMta`P(eCzWcl(lq&CI}y130W?b#&40_UtSthrTiqq(RTv?M#HWUUeZHH6i364E@0eYH~rp5geVUN`WU8!C- zmturQn!@eYb|}s_3&1o2gA#jqumq{iA%@eI0H!)3iO}@E48T|Y;HmZGqMxbPTbDU9 zEpulH@419#2_uH*Kq`QQC_6HzkKS&^oKgz_-TPZ>#Ra0i$Ma#VB-Y^`3usj8(~2fz zA_m+AkV(`DQl>_V)(UmT``9lOWv$`|fW)Lq&Q*k08*M^2S-1r~Sj<`WI3=(t35v&( zPpj6Kj7Ou3)RWBLGEKrC?+6<^8x_2Zz1(=fP{et zK&9+mn;`F6l9yQYfZHN)Owh3jFtJkl+8YkYOhDAiatLR97PGtp0_1vhw*-oW| zo@kfWfFcToNdUR3((#l`uryX&$?N7)ia}~1D~EGmE|79Tgy$HAI=3p!72PAs5t)fl z1=bAe%uO&itMs7bf;iT%g&$ZG>O$H(m-$FfpZovu&+mWFp!4PMk|Ac!I)%xYcakId zE%*QI1&S|)DFDSxtfF-9Z;eylO8i5p>FLa?0unzlHT(Nkm;x}I-Dss)!RjX_plLo8 zB7h`)a}D#6ols& zkTV{~xo$4iC(a?i3=6=`{RN)-K4Qa3Z2sUyh%dzgFw0wvp$=+05qE)t8tXGS zAZSIq+m{^XXAVey3|=Itp-p4}fbRXRWCpPgzdWt_>*n%O0g%8eiE)L-D>0YMBH1a( zkwxm*9Hk|Iwq9?!JkFPmEey-ks-yl|-7}`^^>#`y^&^mMP@Y==9j&Z&rj{|J{@Y|& zo>sc1m^j360^H&SouFQ2E210yzo6^pqHlIvXLB!+8%R1lnz@CnZ_4GQgjT)Y>I;oP zeoFK-SS2yQV3N}1QkcxQu_^#Ko)2;!r%P#1SAQS~z=#HQ)~0s?57vDk{;!QGG=3Bd zAQn9IEl}fESTk3300000NkvXXu0mjfC$zXX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/atmospherics.rsi/phoron_old.png b/Resources/Textures/Effects/atmospherics.rsi/phoron_old.png new file mode 100644 index 0000000000000000000000000000000000000000..24fe050f29926e11867e40dc7f8fbffbac7b4640 GIT binary patch literal 592 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 TOSJW)00000NkvXXu0mjfL;&nB literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/atmospherics.rsi/tritium_old.png b/Resources/Textures/Effects/atmospherics.rsi/tritium_old.png new file mode 100644 index 0000000000000000000000000000000000000000..d49a319ff99f48dcede4e8f7be18d4d9570f21df GIT binary patch literal 1026 zcmV+d1pWJoP)3qKg4^juz8Z7~J@IjRzDIS6c7XW}4JXl-l9NIaL;J@JU zr^APjIZg@v`+~=pVEnd^XKkf(tWdUv8^i_4B0&Nl$iQ19NZ zw!jB>(H8iyoi9u@z?*iw=dscN%{*)&HjxBuHP`n%wk4|Zm(^U~^VpWC#$Q%*eXnO* zf-S_XF*V@r!xZ5W5^!8h5rzRp*qh@e@aA}-4<=jB7}SLrMIqQd%pSX^p#zFSuzQ$2 zwi~J`#Hh_T>>g&%?uK%SiQsWAF%dk@CC0RZHh6XHrX_<{$8K8c)dT7Hu0l*2Y)`F_ z2HR6Bq`}7QmYR>HJbs53TBu4s}h5;dL(!(1uu3Q30n!SR&BNZb-Hc_6oFQT+QL!b%PJ=xSGSc>jod%MHrdv zR)nd5dlg}lYWmK$(}!CTrV@47qTA8jwFi(M9rD`AhcC^w2{b!?)*mKz`?PZb*`f@< ze-R7sm8_nh{^pVjiv-kjC`)&XeSK9MOEkDIVyQjxBb*Bu8k3?7FoT$j4-u9m!^-An zT>80yXe=2$@zqzN^m76K4JO?ounLMN?L^KKjd?y`L}05~TTu151f}g_i98`rEwfUy$i9g@VIu|fXF?PEf8rl<&&!2uSARN84 zVlY1aTtGB>+ESW(;w>Nz_UK7jRw!F^Pkc4^@2qnHE0kw8mG!ixH21{cjaNRu>s&x~ z;195GL7qMF`#tXYZs!6659{U{pyBo5H2@&KC%%R!EsVa(MH+wyDt4)Kqi_BvEH6| w%OZ>tXyo}r2`~Ush=ugTf6kwNE+7;C0NbVJYU@o{D*ylh07*qoM6N<$g3I^ZxBvhE literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/atmospherics.rsi/water_vapor.png b/Resources/Textures/Effects/atmospherics.rsi/water_vapor.png new file mode 100644 index 0000000000000000000000000000000000000000..17cde3e8112cfeec58b57e6ec7288da9a9100d9e GIT binary patch literal 1280 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

#8sPD9*H0yUvIsBO8 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

bqGbwY7r$m=zuB$_@#!+QwW8Z1S`=+1 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/fire.rsi/fire.png b/Resources/Textures/Effects/fire.rsi/fire.png new file mode 100644 index 0000000000000000000000000000000000000000..78bb9be62527f43d7b2fa2c24896734ce3a42f18 GIT binary patch literal 584 zcmV-O0=NB%P)V+-DMJ4gev95JCtc zWC;RDYadGR_M4N$XvrPd=5#tqZk~?C5s9lU0%_F&F5zL&p?}qq5IP_N5u-&gjX5Wa z+65%7w6p8ywYo73&<7nRAe;kIqeIflJ9|+lWQtM7xD7Nsj=DgSq*O|PYjxN5VN$Mj zV;SSFvO#bnnd2L`#h>k8NxBa{NQgUU&b8;g1&l@qbO3;(9xr{=)AwC4H_2E6qk%&| z&7FPIWB2tD`QtjVoN?F+Oc|akp0>XG)aroHPI9|NYYS|5a~*IM-F$xIyiFR%^w=nc zVHlv4^2@_8%)0(;AG|#cnBI?@*e2BIOEKHt0j1Q~0XEZaZpUiOu)X?!lBf6^Ob8)_ z5JCtcgb=cb>I%$%z=;v9{aBR?d8(mKxH?XRNZbD4O#tck`?7M>3fxzRO+Qxl zsHe3p(l=ZYFlBw`odjlQ`0RW}cO9f2`A%qa}wEO_* W5rBbe-mcvM0000 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 <data /> <data><IncludeFilters /><ExcludeFilters><Filter ModuleMask="*.UnitTesting" ModuleVersionMask="*" ClassMask="*" FunctionMask="*" IsEnabled="True" /></ExcludeFilters></data> + True True True <data /> <data><IncludeFilters /><ExcludeFilters><Filter ModuleMask="Lidgren.Network" ModuleVersionMask="*" ClassMask="*" FunctionMask="*" IsEnabled="True" /></ExcludeFilters></data> True + True True True True @@ -59,6 +61,7 @@ True True True + True True True True @@ -70,7 +73,8 @@ True True True + True True - True - True + True + True \ No newline at end of file