Files
OldThink/Content.Server/Atmos/Components/GridAtmosphereComponent.cs

137 lines
4.3 KiB
C#
Raw Normal View History

using System;
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
using System.Collections;
using System.Collections.Generic;
Atmos pipe rework (#3833) * Initial * Cleanup a bunch of things * some changes dunno * RequireAnchored * a * stuff * more work * Lots of progress * delete pipe visualizer * a * b * pipenet and pipenode cleanup * Fixes * Adds GasValve * Adds GasMiner * Fix stuff, maybe? * More fixes * Ignored components on the client * Adds thermomachine behavior, change a bunch of stuff * Remove Anchored * some work, but it's shitcode * significantly more ECS * ECS AtmosDevices * Cleanup * fix appearance * when the pipe direction is sus * Gas tanks and canisters * pipe anchoring and stuff * coding is my passion * Unsafe pipes take longer to unanchor * turns out we're no longer using eris canisters * Gas canister inserted tank appearance, improvements * Work on a bunch of appearances * Scrubber appearance * Reorganize AtmosphereSystem.Piping into a bunch of different systems * Appearance for vent/scrubber/pump turns off when leaving atmosphere * ThermoMachine appearance * Cleanup gas tanks * Remove passive gate unused imports * remove old canister UI functionality * PipeNode environment air, make everything use AssumeAir instead of merging manually * a * Reorganize atmos to follow new structure * ????? * Canister UI, restructure client * Restructure shared * Fix build tho * listen, at least the canister UI works entirely... * fix build : ) * Atmos device prototypes have names and descriptions * gas canister ui slider doesn't jitter * trinary prototypes * sprite for miners * ignore components * fix YAML * Fix port system doing useless thing * Fix build * fix thinking moment * fix build again because * canister direction * pipenode is a word * GasTank Air will throw on invalid states * fix build.... * Unhardcode volume pump thresholds * Volume pump and filter take time into account * Rename Join/Leave atmosphere events to AtmosDeviceEnabled/Disabled Event * Gas tank node volume is set by initial mixtuer * I love node container
2021-06-19 13:25:05 +02:00
using Content.Server.Atmos.EntitySystems;
using Content.Server.Atmos.Piping.Components;
2021-06-09 22:19:39 +02:00
using Content.Server.NodeContainer.NodeGroups;
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
using Robust.Shared.GameObjects;
using Robust.Shared.Maths;
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
using Robust.Shared.Serialization;
Serialization v3 content PR (#3491) * serv3 in shared pt 1 * beginning of deepclone api * progress in implementing ideepclone & serv3 in content * adds target * its cant hurt you it cant hurt you * more changes to content.server * adds dataclasses * almost there * renamed & edited entry * finishes refactoring content to use serv3 * gasmixture runtimes, next: reagentunit * fucin hell that was an annoying one * adds flags * fixes some yaml errors * removes comment * fixes generic components for now * removes todo actually clones values my god paul fixes bug involving resolving custom data classes from other proj renames dataclass fixes spritecomp adds WithFormat.Constants support * adds deepclone to ResistanceSet * adds a bunch of deepclone implementations adds a deepclone analyzer (TODO) adds a deep clone fallback for classes & structs * fixes a bunch of runtimes * adds deepclone to entityuid * adds generator to sln * gets rid of warnings * fixes * argh * componentdata refactors * more deepclone impl * heck me i reworked all of content deepclone * renames custom dataclasstarget * misc * reworks prototypes * deepclone nuke * renamed customdataclass attribute * fixes everything * misc fixed * the killcommit * getting there * changed yamlfieldattribute namespace * adds back iselfserialize * renames everything to data(field/definition) * ouch * Fix most errors on content * Fix more errors in content * Fix some components * work on tests * fixes some customdataclasses * fuggin shit * yes * yeas * Remove data classes * Data field naming fixes * arg * Git resetti RobustToolbox * Merge fixes * General fixes * Fix startup serialization errors * Fix DamageContainerPrototype when supported classes or types are null * Implement construction graph step type serializer * Fix up construction serialization * Fix up construction serialization part 2 * Fix null list in technology database component * Fix body serialization * Fix entity storage serialization * Fix actions serialization * Fix AI serialization * Fix reaction serialization * Fix body serialization * Fix grid atmosphere serialization * Rename IServ3Manager to ISerializationManager * Convert every non generic serializer to the new format, general fixes * Serialization and body system fix * pushinheritance fix * Update all prototypes to have a parent and have consistent id/parent properties * Merge fixes * smh my head * cuddling slaps * Content commit for engine PR * stuff * more fixes * argh * yes even you are fixed * changelog fixes * fixes seeds * argh * Test fixes * Add writing for alert order prototype * Fix alert order writing * FIX * its been alot ok * Fix the rest of the visualizers * Fix server alerts component tests * Fix alert prototype tests not using the read value * Fix alert prototype tests initializing serialization multiple times * THIS IS AN AMERICAN CODEBASE GOD BLESS THE USA * Add ImplicitDataDefinitionForInheritors to IMechanismBehavior Fixes the behaviors not being found * Fix NRE in strap component Good night to the 1 buckle optimization * Fix clothing component slot flags serialization tag * Fix body component in all components test * Merge fixes * ffs * Make construction graph prototype use serialization hooks * human yaml linted * a * Do the thing for construction * stuff * a * monke see yaml linter * LINT HARDER * Remove redundant todo * yes * Add skip hook argument to readers and copiers * we gamin * test/datafield fixes * adds more verbose validation * moves linter to action * Improve construction graph step type serializer error message * Fix ammo box component NRE * gamin * some updates to the linter * yes * removes that test * misc fixes * array fix priority fix misc fixes * adds proper info the validation * adds alwaysrelevant usa * Make yaml linter take half as long to run (~50% less) * Make yaml linter 5 times faster (~80% less execution time) * based vera being based * fixes mapsaving * warning cleanup & moves surpressor * removes old msbuild targets * Revert "Make yaml linter 5 times faster (~80% less execution time)" This reverts commit 3e6091359a26252c3e98828199553de668031c63. * Add -nowarn to yaml linter run configuration * Improve yaml linter message feedback * Make dependencies an argument instead of a property on the serialization manager * yamllinting slaps * Clean up type serializers * Move yaml linter code to its own method * Fix yaml errors * Change yaml linter action name and remove -nowarn * yaml linter please shut * Git resetti robust toolbox Co-authored-by: Paul <ritter.paul1+git@googlemail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2021-03-05 01:08:38 +01:00
using Robust.Shared.Serialization.Manager.Attributes;
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
using Robust.Shared.ViewVariables;
Serialization v3 content PR (#3491) * serv3 in shared pt 1 * beginning of deepclone api * progress in implementing ideepclone & serv3 in content * adds target * its cant hurt you it cant hurt you * more changes to content.server * adds dataclasses * almost there * renamed & edited entry * finishes refactoring content to use serv3 * gasmixture runtimes, next: reagentunit * fucin hell that was an annoying one * adds flags * fixes some yaml errors * removes comment * fixes generic components for now * removes todo actually clones values my god paul fixes bug involving resolving custom data classes from other proj renames dataclass fixes spritecomp adds WithFormat.Constants support * adds deepclone to ResistanceSet * adds a bunch of deepclone implementations adds a deepclone analyzer (TODO) adds a deep clone fallback for classes & structs * fixes a bunch of runtimes * adds deepclone to entityuid * adds generator to sln * gets rid of warnings * fixes * argh * componentdata refactors * more deepclone impl * heck me i reworked all of content deepclone * renames custom dataclasstarget * misc * reworks prototypes * deepclone nuke * renamed customdataclass attribute * fixes everything * misc fixed * the killcommit * getting there * changed yamlfieldattribute namespace * adds back iselfserialize * renames everything to data(field/definition) * ouch * Fix most errors on content * Fix more errors in content * Fix some components * work on tests * fixes some customdataclasses * fuggin shit * yes * yeas * Remove data classes * Data field naming fixes * arg * Git resetti RobustToolbox * Merge fixes * General fixes * Fix startup serialization errors * Fix DamageContainerPrototype when supported classes or types are null * Implement construction graph step type serializer * Fix up construction serialization * Fix up construction serialization part 2 * Fix null list in technology database component * Fix body serialization * Fix entity storage serialization * Fix actions serialization * Fix AI serialization * Fix reaction serialization * Fix body serialization * Fix grid atmosphere serialization * Rename IServ3Manager to ISerializationManager * Convert every non generic serializer to the new format, general fixes * Serialization and body system fix * pushinheritance fix * Update all prototypes to have a parent and have consistent id/parent properties * Merge fixes * smh my head * cuddling slaps * Content commit for engine PR * stuff * more fixes * argh * yes even you are fixed * changelog fixes * fixes seeds * argh * Test fixes * Add writing for alert order prototype * Fix alert order writing * FIX * its been alot ok * Fix the rest of the visualizers * Fix server alerts component tests * Fix alert prototype tests not using the read value * Fix alert prototype tests initializing serialization multiple times * THIS IS AN AMERICAN CODEBASE GOD BLESS THE USA * Add ImplicitDataDefinitionForInheritors to IMechanismBehavior Fixes the behaviors not being found * Fix NRE in strap component Good night to the 1 buckle optimization * Fix clothing component slot flags serialization tag * Fix body component in all components test * Merge fixes * ffs * Make construction graph prototype use serialization hooks * human yaml linted * a * Do the thing for construction * stuff * a * monke see yaml linter * LINT HARDER * Remove redundant todo * yes * Add skip hook argument to readers and copiers * we gamin * test/datafield fixes * adds more verbose validation * moves linter to action * Improve construction graph step type serializer error message * Fix ammo box component NRE * gamin * some updates to the linter * yes * removes that test * misc fixes * array fix priority fix misc fixes * adds proper info the validation * adds alwaysrelevant usa * Make yaml linter take half as long to run (~50% less) * Make yaml linter 5 times faster (~80% less execution time) * based vera being based * fixes mapsaving * warning cleanup & moves surpressor * removes old msbuild targets * Revert "Make yaml linter 5 times faster (~80% less execution time)" This reverts commit 3e6091359a26252c3e98828199553de668031c63. * Add -nowarn to yaml linter run configuration * Improve yaml linter message feedback * Make dependencies an argument instead of a property on the serialization manager * yamllinting slaps * Clean up type serializers * Move yaml linter code to its own method * Fix yaml errors * Change yaml linter action name and remove -nowarn * yaml linter please shut * Git resetti robust toolbox Co-authored-by: Paul <ritter.paul1+git@googlemail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2021-03-05 01:08:38 +01:00
using Dependency = Robust.Shared.IoC.DependencyAttribute;
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
Atmos pipe rework (#3833) * Initial * Cleanup a bunch of things * some changes dunno * RequireAnchored * a * stuff * more work * Lots of progress * delete pipe visualizer * a * b * pipenet and pipenode cleanup * Fixes * Adds GasValve * Adds GasMiner * Fix stuff, maybe? * More fixes * Ignored components on the client * Adds thermomachine behavior, change a bunch of stuff * Remove Anchored * some work, but it's shitcode * significantly more ECS * ECS AtmosDevices * Cleanup * fix appearance * when the pipe direction is sus * Gas tanks and canisters * pipe anchoring and stuff * coding is my passion * Unsafe pipes take longer to unanchor * turns out we're no longer using eris canisters * Gas canister inserted tank appearance, improvements * Work on a bunch of appearances * Scrubber appearance * Reorganize AtmosphereSystem.Piping into a bunch of different systems * Appearance for vent/scrubber/pump turns off when leaving atmosphere * ThermoMachine appearance * Cleanup gas tanks * Remove passive gate unused imports * remove old canister UI functionality * PipeNode environment air, make everything use AssumeAir instead of merging manually * a * Reorganize atmos to follow new structure * ????? * Canister UI, restructure client * Restructure shared * Fix build tho * listen, at least the canister UI works entirely... * fix build : ) * Atmos device prototypes have names and descriptions * gas canister ui slider doesn't jitter * trinary prototypes * sprite for miners * ignore components * fix YAML * Fix port system doing useless thing * Fix build * fix thinking moment * fix build again because * canister direction * pipenode is a word * GasTank Air will throw on invalid states * fix build.... * Unhardcode volume pump thresholds * Volume pump and filter take time into account * Rename Join/Leave atmosphere events to AtmosDeviceEnabled/Disabled Event * Gas tank node volume is set by initial mixtuer * I love node container
2021-06-19 13:25:05 +02:00
namespace Content.Server.Atmos.Components
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
{
/// <summary>
2021-08-03 14:26:34 +02:00
/// Internal Atmos class. Use <see cref="AtmosphereSystem"/> to interact with atmos instead.
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
/// </summary>
[ComponentReference(typeof(IAtmosphereComponent))]
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
[RegisterComponent, Serializable]
[Virtual]
public class GridAtmosphereComponent : Component, IAtmosphereComponent, ISerializationHooks
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
{
Atmos pipe rework (#3833) * Initial * Cleanup a bunch of things * some changes dunno * RequireAnchored * a * stuff * more work * Lots of progress * delete pipe visualizer * a * b * pipenet and pipenode cleanup * Fixes * Adds GasValve * Adds GasMiner * Fix stuff, maybe? * More fixes * Ignored components on the client * Adds thermomachine behavior, change a bunch of stuff * Remove Anchored * some work, but it's shitcode * significantly more ECS * ECS AtmosDevices * Cleanup * fix appearance * when the pipe direction is sus * Gas tanks and canisters * pipe anchoring and stuff * coding is my passion * Unsafe pipes take longer to unanchor * turns out we're no longer using eris canisters * Gas canister inserted tank appearance, improvements * Work on a bunch of appearances * Scrubber appearance * Reorganize AtmosphereSystem.Piping into a bunch of different systems * Appearance for vent/scrubber/pump turns off when leaving atmosphere * ThermoMachine appearance * Cleanup gas tanks * Remove passive gate unused imports * remove old canister UI functionality * PipeNode environment air, make everything use AssumeAir instead of merging manually * a * Reorganize atmos to follow new structure * ????? * Canister UI, restructure client * Restructure shared * Fix build tho * listen, at least the canister UI works entirely... * fix build : ) * Atmos device prototypes have names and descriptions * gas canister ui slider doesn't jitter * trinary prototypes * sprite for miners * ignore components * fix YAML * Fix port system doing useless thing * Fix build * fix thinking moment * fix build again because * canister direction * pipenode is a word * GasTank Air will throw on invalid states * fix build.... * Unhardcode volume pump thresholds * Volume pump and filter take time into account * Rename Join/Leave atmosphere events to AtmosDeviceEnabled/Disabled Event * Gas tank node volume is set by initial mixtuer * I love node container
2021-06-19 13:25:05 +02:00
public virtual bool Simulated => true;
[ViewVariables]
public bool ProcessingPaused { get; set; } = false;
[ViewVariables]
public float Timer { get; set; } = 0f;
[ViewVariables]
public int UpdateCounter { get; set; } = 0;
Serialization v3 content PR (#3491) * serv3 in shared pt 1 * beginning of deepclone api * progress in implementing ideepclone & serv3 in content * adds target * its cant hurt you it cant hurt you * more changes to content.server * adds dataclasses * almost there * renamed & edited entry * finishes refactoring content to use serv3 * gasmixture runtimes, next: reagentunit * fucin hell that was an annoying one * adds flags * fixes some yaml errors * removes comment * fixes generic components for now * removes todo actually clones values my god paul fixes bug involving resolving custom data classes from other proj renames dataclass fixes spritecomp adds WithFormat.Constants support * adds deepclone to ResistanceSet * adds a bunch of deepclone implementations adds a deepclone analyzer (TODO) adds a deep clone fallback for classes & structs * fixes a bunch of runtimes * adds deepclone to entityuid * adds generator to sln * gets rid of warnings * fixes * argh * componentdata refactors * more deepclone impl * heck me i reworked all of content deepclone * renames custom dataclasstarget * misc * reworks prototypes * deepclone nuke * renamed customdataclass attribute * fixes everything * misc fixed * the killcommit * getting there * changed yamlfieldattribute namespace * adds back iselfserialize * renames everything to data(field/definition) * ouch * Fix most errors on content * Fix more errors in content * Fix some components * work on tests * fixes some customdataclasses * fuggin shit * yes * yeas * Remove data classes * Data field naming fixes * arg * Git resetti RobustToolbox * Merge fixes * General fixes * Fix startup serialization errors * Fix DamageContainerPrototype when supported classes or types are null * Implement construction graph step type serializer * Fix up construction serialization * Fix up construction serialization part 2 * Fix null list in technology database component * Fix body serialization * Fix entity storage serialization * Fix actions serialization * Fix AI serialization * Fix reaction serialization * Fix body serialization * Fix grid atmosphere serialization * Rename IServ3Manager to ISerializationManager * Convert every non generic serializer to the new format, general fixes * Serialization and body system fix * pushinheritance fix * Update all prototypes to have a parent and have consistent id/parent properties * Merge fixes * smh my head * cuddling slaps * Content commit for engine PR * stuff * more fixes * argh * yes even you are fixed * changelog fixes * fixes seeds * argh * Test fixes * Add writing for alert order prototype * Fix alert order writing * FIX * its been alot ok * Fix the rest of the visualizers * Fix server alerts component tests * Fix alert prototype tests not using the read value * Fix alert prototype tests initializing serialization multiple times * THIS IS AN AMERICAN CODEBASE GOD BLESS THE USA * Add ImplicitDataDefinitionForInheritors to IMechanismBehavior Fixes the behaviors not being found * Fix NRE in strap component Good night to the 1 buckle optimization * Fix clothing component slot flags serialization tag * Fix body component in all components test * Merge fixes * ffs * Make construction graph prototype use serialization hooks * human yaml linted * a * Do the thing for construction * stuff * a * monke see yaml linter * LINT HARDER * Remove redundant todo * yes * Add skip hook argument to readers and copiers * we gamin * test/datafield fixes * adds more verbose validation * moves linter to action * Improve construction graph step type serializer error message * Fix ammo box component NRE * gamin * some updates to the linter * yes * removes that test * misc fixes * array fix priority fix misc fixes * adds proper info the validation * adds alwaysrelevant usa * Make yaml linter take half as long to run (~50% less) * Make yaml linter 5 times faster (~80% less execution time) * based vera being based * fixes mapsaving * warning cleanup & moves surpressor * removes old msbuild targets * Revert "Make yaml linter 5 times faster (~80% less execution time)" This reverts commit 3e6091359a26252c3e98828199553de668031c63. * Add -nowarn to yaml linter run configuration * Improve yaml linter message feedback * Make dependencies an argument instead of a property on the serialization manager * yamllinting slaps * Clean up type serializers * Move yaml linter code to its own method * Fix yaml errors * Change yaml linter action name and remove -nowarn * yaml linter please shut * Git resetti robust toolbox Co-authored-by: Paul <ritter.paul1+git@googlemail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2021-03-05 01:08:38 +01:00
[DataField("uniqueMixes")]
public List<GasMixture>? UniqueMixes;
Serialization v3 content PR (#3491) * serv3 in shared pt 1 * beginning of deepclone api * progress in implementing ideepclone & serv3 in content * adds target * its cant hurt you it cant hurt you * more changes to content.server * adds dataclasses * almost there * renamed & edited entry * finishes refactoring content to use serv3 * gasmixture runtimes, next: reagentunit * fucin hell that was an annoying one * adds flags * fixes some yaml errors * removes comment * fixes generic components for now * removes todo actually clones values my god paul fixes bug involving resolving custom data classes from other proj renames dataclass fixes spritecomp adds WithFormat.Constants support * adds deepclone to ResistanceSet * adds a bunch of deepclone implementations adds a deepclone analyzer (TODO) adds a deep clone fallback for classes & structs * fixes a bunch of runtimes * adds deepclone to entityuid * adds generator to sln * gets rid of warnings * fixes * argh * componentdata refactors * more deepclone impl * heck me i reworked all of content deepclone * renames custom dataclasstarget * misc * reworks prototypes * deepclone nuke * renamed customdataclass attribute * fixes everything * misc fixed * the killcommit * getting there * changed yamlfieldattribute namespace * adds back iselfserialize * renames everything to data(field/definition) * ouch * Fix most errors on content * Fix more errors in content * Fix some components * work on tests * fixes some customdataclasses * fuggin shit * yes * yeas * Remove data classes * Data field naming fixes * arg * Git resetti RobustToolbox * Merge fixes * General fixes * Fix startup serialization errors * Fix DamageContainerPrototype when supported classes or types are null * Implement construction graph step type serializer * Fix up construction serialization * Fix up construction serialization part 2 * Fix null list in technology database component * Fix body serialization * Fix entity storage serialization * Fix actions serialization * Fix AI serialization * Fix reaction serialization * Fix body serialization * Fix grid atmosphere serialization * Rename IServ3Manager to ISerializationManager * Convert every non generic serializer to the new format, general fixes * Serialization and body system fix * pushinheritance fix * Update all prototypes to have a parent and have consistent id/parent properties * Merge fixes * smh my head * cuddling slaps * Content commit for engine PR * stuff * more fixes * argh * yes even you are fixed * changelog fixes * fixes seeds * argh * Test fixes * Add writing for alert order prototype * Fix alert order writing * FIX * its been alot ok * Fix the rest of the visualizers * Fix server alerts component tests * Fix alert prototype tests not using the read value * Fix alert prototype tests initializing serialization multiple times * THIS IS AN AMERICAN CODEBASE GOD BLESS THE USA * Add ImplicitDataDefinitionForInheritors to IMechanismBehavior Fixes the behaviors not being found * Fix NRE in strap component Good night to the 1 buckle optimization * Fix clothing component slot flags serialization tag * Fix body component in all components test * Merge fixes * ffs * Make construction graph prototype use serialization hooks * human yaml linted * a * Do the thing for construction * stuff * a * monke see yaml linter * LINT HARDER * Remove redundant todo * yes * Add skip hook argument to readers and copiers * we gamin * test/datafield fixes * adds more verbose validation * moves linter to action * Improve construction graph step type serializer error message * Fix ammo box component NRE * gamin * some updates to the linter * yes * removes that test * misc fixes * array fix priority fix misc fixes * adds proper info the validation * adds alwaysrelevant usa * Make yaml linter take half as long to run (~50% less) * Make yaml linter 5 times faster (~80% less execution time) * based vera being based * fixes mapsaving * warning cleanup & moves surpressor * removes old msbuild targets * Revert "Make yaml linter 5 times faster (~80% less execution time)" This reverts commit 3e6091359a26252c3e98828199553de668031c63. * Add -nowarn to yaml linter run configuration * Improve yaml linter message feedback * Make dependencies an argument instead of a property on the serialization manager * yamllinting slaps * Clean up type serializers * Move yaml linter code to its own method * Fix yaml errors * Change yaml linter action name and remove -nowarn * yaml linter please shut * Git resetti robust toolbox Co-authored-by: Paul <ritter.paul1+git@googlemail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2021-03-05 01:08:38 +01:00
[DataField("tiles")]
public Dictionary<Vector2i, int>? TilesUniqueMixes;
2020-08-13 14:18:26 +02:00
[ViewVariables]
public readonly Dictionary<Vector2i, TileAtmosphere> Tiles = new(1000);
2020-08-13 14:18:26 +02:00
[ViewVariables]
public readonly HashSet<TileAtmosphere> ActiveTiles = new(1000);
[ViewVariables]
public int ActiveTilesCount => ActiveTiles.Count;
[ViewVariables]
public readonly HashSet<ExcitedGroup> ExcitedGroups = new(1000);
[ViewVariables]
public int ExcitedGroupCount => ExcitedGroups.Count;
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
[ViewVariables]
public readonly HashSet<TileAtmosphere> HotspotTiles = new(1000);
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
[ViewVariables]
public int HotspotTilesCount => HotspotTiles.Count;
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
[ViewVariables]
public readonly HashSet<TileAtmosphere> SuperconductivityTiles = new(1000);
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
PipeNet (#1626) * PipeNode * Pipe prototypes * Fixes Default NodeGroup not being registered by NodeGroupFactory * GasNet * PumpComponent * IPipeNet * PipeComponent * misc naming, yaml * PipeComponent rework * PipeNet gas transfer from pipes * PipeNet correctly combines gas on combining with other group * Client ignores piping components * AfterRemake * PipeNet remake simplification * IGasMixtureHolder on PipeComponent, IPipeNet * PipeContainerComponent * BasePump * DebugPump * IgnoredComponent fix * Pipe LocalAir and Air * comments * Pump fix * PipeNet fix * name simplification * PipeDirection name changes * BaseVentComponent and DebugVentComponent * Moves Pipe to own file * DebugVentComponent moved to own file * BaseScrubberComponent * DebugScrubberComponent * IgnoredComponents update * scrubber prototype * vent prototype fix * comments * Removes vent and scrubber PipeDirection check * PipeContainer, Pipe, and PipeNode refactor * Yaml cleanup * pump prototype fix * Removes AssumeAir usage from old IGasMixtureHolders * Simplfies Vent & Scrubber to use AtmosHelper methods * Vents and scrubbers invalidate the coordinate they changed the gas of * UpdatedPipingComponent * ScrubberComponent renamed to SiphonComponent * Removes PumpSystem * Removes framTime from UpdatedPiping * PipeNetDevices * PipeNetDevice updated by GridAtmosphereComponent * PipeNets react from update in GridAtmosphereComponent * GridAtmosphereComponent stores PipeNets/PipeNetDevices to be updated in queue * diff fix * Removes debug gas starting in pipes * type safety in IPipeNet when combining groups * null checks * GridAtmos stores PipeNets and PipeNetDevices in List * comments * rogue curly bracket * ProcessPipeNets update fix * RemovePipeNet fix * PipeNet update() unique index * fix diff * Integration test fixes * Error Logging * error fix Co-authored-by: py01 <pyronetics01@gmail.com>
2020-08-27 09:45:27 -06:00
[ViewVariables]
public int SuperconductivityTilesCount => SuperconductivityTiles.Count;
PipeNet (#1626) * PipeNode * Pipe prototypes * Fixes Default NodeGroup not being registered by NodeGroupFactory * GasNet * PumpComponent * IPipeNet * PipeComponent * misc naming, yaml * PipeComponent rework * PipeNet gas transfer from pipes * PipeNet correctly combines gas on combining with other group * Client ignores piping components * AfterRemake * PipeNet remake simplification * IGasMixtureHolder on PipeComponent, IPipeNet * PipeContainerComponent * BasePump * DebugPump * IgnoredComponent fix * Pipe LocalAir and Air * comments * Pump fix * PipeNet fix * name simplification * PipeDirection name changes * BaseVentComponent and DebugVentComponent * Moves Pipe to own file * DebugVentComponent moved to own file * BaseScrubberComponent * DebugScrubberComponent * IgnoredComponents update * scrubber prototype * vent prototype fix * comments * Removes vent and scrubber PipeDirection check * PipeContainer, Pipe, and PipeNode refactor * Yaml cleanup * pump prototype fix * Removes AssumeAir usage from old IGasMixtureHolders * Simplfies Vent & Scrubber to use AtmosHelper methods * Vents and scrubbers invalidate the coordinate they changed the gas of * UpdatedPipingComponent * ScrubberComponent renamed to SiphonComponent * Removes PumpSystem * Removes framTime from UpdatedPiping * PipeNetDevices * PipeNetDevice updated by GridAtmosphereComponent * PipeNets react from update in GridAtmosphereComponent * GridAtmosphereComponent stores PipeNets/PipeNetDevices to be updated in queue * diff fix * Removes debug gas starting in pipes * type safety in IPipeNet when combining groups * null checks * GridAtmos stores PipeNets and PipeNetDevices in List * comments * rogue curly bracket * ProcessPipeNets update fix * RemovePipeNet fix * PipeNet update() unique index * fix diff * Integration test fixes * Error Logging * error fix Co-authored-by: py01 <pyronetics01@gmail.com>
2020-08-27 09:45:27 -06:00
[ViewVariables]
public HashSet<TileAtmosphere> HighPressureDelta = new(1000);
PipeNet (#1626) * PipeNode * Pipe prototypes * Fixes Default NodeGroup not being registered by NodeGroupFactory * GasNet * PumpComponent * IPipeNet * PipeComponent * misc naming, yaml * PipeComponent rework * PipeNet gas transfer from pipes * PipeNet correctly combines gas on combining with other group * Client ignores piping components * AfterRemake * PipeNet remake simplification * IGasMixtureHolder on PipeComponent, IPipeNet * PipeContainerComponent * BasePump * DebugPump * IgnoredComponent fix * Pipe LocalAir and Air * comments * Pump fix * PipeNet fix * name simplification * PipeDirection name changes * BaseVentComponent and DebugVentComponent * Moves Pipe to own file * DebugVentComponent moved to own file * BaseScrubberComponent * DebugScrubberComponent * IgnoredComponents update * scrubber prototype * vent prototype fix * comments * Removes vent and scrubber PipeDirection check * PipeContainer, Pipe, and PipeNode refactor * Yaml cleanup * pump prototype fix * Removes AssumeAir usage from old IGasMixtureHolders * Simplfies Vent & Scrubber to use AtmosHelper methods * Vents and scrubbers invalidate the coordinate they changed the gas of * UpdatedPipingComponent * ScrubberComponent renamed to SiphonComponent * Removes PumpSystem * Removes framTime from UpdatedPiping * PipeNetDevices * PipeNetDevice updated by GridAtmosphereComponent * PipeNets react from update in GridAtmosphereComponent * GridAtmosphereComponent stores PipeNets/PipeNetDevices to be updated in queue * diff fix * Removes debug gas starting in pipes * type safety in IPipeNet when combining groups * null checks * GridAtmos stores PipeNets and PipeNetDevices in List * comments * rogue curly bracket * ProcessPipeNets update fix * RemovePipeNet fix * PipeNet update() unique index * fix diff * Integration test fixes * Error Logging * error fix Co-authored-by: py01 <pyronetics01@gmail.com>
2020-08-27 09:45:27 -06:00
[ViewVariables]
public int HighPressureDeltaCount => HighPressureDelta.Count;
[ViewVariables]
public readonly HashSet<IPipeNet> PipeNets = new();
[ViewVariables]
public readonly HashSet<AtmosDeviceComponent> AtmosDevices = new();
[ViewVariables]
public Queue<TileAtmosphere> CurrentRunTiles = new();
[ViewVariables]
public Queue<ExcitedGroup> CurrentRunExcitedGroups = new();
[ViewVariables]
public Queue<IPipeNet> CurrentRunPipeNet = new();
[ViewVariables]
public Queue<AtmosDeviceComponent> CurrentRunAtmosDevices = new();
PipeNet (#1626) * PipeNode * Pipe prototypes * Fixes Default NodeGroup not being registered by NodeGroupFactory * GasNet * PumpComponent * IPipeNet * PipeComponent * misc naming, yaml * PipeComponent rework * PipeNet gas transfer from pipes * PipeNet correctly combines gas on combining with other group * Client ignores piping components * AfterRemake * PipeNet remake simplification * IGasMixtureHolder on PipeComponent, IPipeNet * PipeContainerComponent * BasePump * DebugPump * IgnoredComponent fix * Pipe LocalAir and Air * comments * Pump fix * PipeNet fix * name simplification * PipeDirection name changes * BaseVentComponent and DebugVentComponent * Moves Pipe to own file * DebugVentComponent moved to own file * BaseScrubberComponent * DebugScrubberComponent * IgnoredComponents update * scrubber prototype * vent prototype fix * comments * Removes vent and scrubber PipeDirection check * PipeContainer, Pipe, and PipeNode refactor * Yaml cleanup * pump prototype fix * Removes AssumeAir usage from old IGasMixtureHolders * Simplfies Vent & Scrubber to use AtmosHelper methods * Vents and scrubbers invalidate the coordinate they changed the gas of * UpdatedPipingComponent * ScrubberComponent renamed to SiphonComponent * Removes PumpSystem * Removes framTime from UpdatedPiping * PipeNetDevices * PipeNetDevice updated by GridAtmosphereComponent * PipeNets react from update in GridAtmosphereComponent * GridAtmosphereComponent stores PipeNets/PipeNetDevices to be updated in queue * diff fix * Removes debug gas starting in pipes * type safety in IPipeNet when combining groups * null checks * GridAtmos stores PipeNets and PipeNetDevices in List * comments * rogue curly bracket * ProcessPipeNets update fix * RemovePipeNet fix * PipeNet update() unique index * fix diff * Integration test fixes * Error Logging * error fix Co-authored-by: py01 <pyronetics01@gmail.com>
2020-08-27 09:45:27 -06:00
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
[ViewVariables]
public readonly HashSet<Vector2i> InvalidatedCoords = new(1000);
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
[ViewVariables]
public Queue<Vector2i> CurrentRunInvalidatedCoordinates = new();
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
[ViewVariables]
public int InvalidatedCoordsCount => InvalidatedCoords.Count;
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
[ViewVariables]
public long EqualizationQueueCycleControl { get; set; }
[ViewVariables]
public AtmosphereProcessingState State { get; set; } = AtmosphereProcessingState.TileEqualize;
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
Serialization v3 content PR (#3491) * serv3 in shared pt 1 * beginning of deepclone api * progress in implementing ideepclone & serv3 in content * adds target * its cant hurt you it cant hurt you * more changes to content.server * adds dataclasses * almost there * renamed & edited entry * finishes refactoring content to use serv3 * gasmixture runtimes, next: reagentunit * fucin hell that was an annoying one * adds flags * fixes some yaml errors * removes comment * fixes generic components for now * removes todo actually clones values my god paul fixes bug involving resolving custom data classes from other proj renames dataclass fixes spritecomp adds WithFormat.Constants support * adds deepclone to ResistanceSet * adds a bunch of deepclone implementations adds a deepclone analyzer (TODO) adds a deep clone fallback for classes & structs * fixes a bunch of runtimes * adds deepclone to entityuid * adds generator to sln * gets rid of warnings * fixes * argh * componentdata refactors * more deepclone impl * heck me i reworked all of content deepclone * renames custom dataclasstarget * misc * reworks prototypes * deepclone nuke * renamed customdataclass attribute * fixes everything * misc fixed * the killcommit * getting there * changed yamlfieldattribute namespace * adds back iselfserialize * renames everything to data(field/definition) * ouch * Fix most errors on content * Fix more errors in content * Fix some components * work on tests * fixes some customdataclasses * fuggin shit * yes * yeas * Remove data classes * Data field naming fixes * arg * Git resetti RobustToolbox * Merge fixes * General fixes * Fix startup serialization errors * Fix DamageContainerPrototype when supported classes or types are null * Implement construction graph step type serializer * Fix up construction serialization * Fix up construction serialization part 2 * Fix null list in technology database component * Fix body serialization * Fix entity storage serialization * Fix actions serialization * Fix AI serialization * Fix reaction serialization * Fix body serialization * Fix grid atmosphere serialization * Rename IServ3Manager to ISerializationManager * Convert every non generic serializer to the new format, general fixes * Serialization and body system fix * pushinheritance fix * Update all prototypes to have a parent and have consistent id/parent properties * Merge fixes * smh my head * cuddling slaps * Content commit for engine PR * stuff * more fixes * argh * yes even you are fixed * changelog fixes * fixes seeds * argh * Test fixes * Add writing for alert order prototype * Fix alert order writing * FIX * its been alot ok * Fix the rest of the visualizers * Fix server alerts component tests * Fix alert prototype tests not using the read value * Fix alert prototype tests initializing serialization multiple times * THIS IS AN AMERICAN CODEBASE GOD BLESS THE USA * Add ImplicitDataDefinitionForInheritors to IMechanismBehavior Fixes the behaviors not being found * Fix NRE in strap component Good night to the 1 buckle optimization * Fix clothing component slot flags serialization tag * Fix body component in all components test * Merge fixes * ffs * Make construction graph prototype use serialization hooks * human yaml linted * a * Do the thing for construction * stuff * a * monke see yaml linter * LINT HARDER * Remove redundant todo * yes * Add skip hook argument to readers and copiers * we gamin * test/datafield fixes * adds more verbose validation * moves linter to action * Improve construction graph step type serializer error message * Fix ammo box component NRE * gamin * some updates to the linter * yes * removes that test * misc fixes * array fix priority fix misc fixes * adds proper info the validation * adds alwaysrelevant usa * Make yaml linter take half as long to run (~50% less) * Make yaml linter 5 times faster (~80% less execution time) * based vera being based * fixes mapsaving * warning cleanup & moves surpressor * removes old msbuild targets * Revert "Make yaml linter 5 times faster (~80% less execution time)" This reverts commit 3e6091359a26252c3e98828199553de668031c63. * Add -nowarn to yaml linter run configuration * Improve yaml linter message feedback * Make dependencies an argument instead of a property on the serialization manager * yamllinting slaps * Clean up type serializers * Move yaml linter code to its own method * Fix yaml errors * Change yaml linter action name and remove -nowarn * yaml linter please shut * Git resetti robust toolbox Co-authored-by: Paul <ritter.paul1+git@googlemail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2021-03-05 01:08:38 +01:00
void ISerializationHooks.BeforeSerialization()
{
var uniqueMixes = new List<GasMixture>();
var uniqueMixHash = new Dictionary<GasMixture, int>();
var tiles = new Dictionary<Vector2i, int>();
foreach (var (indices, tile) in Tiles)
{
if (tile.Air == null) continue;
if (uniqueMixHash.TryGetValue(tile.Air, out var index))
{
tiles[indices] = index;
continue;
}
uniqueMixes.Add(tile.Air);
var newIndex = uniqueMixes.Count - 1;
uniqueMixHash[tile.Air] = newIndex;
tiles[indices] = newIndex;
}
if (uniqueMixes.Count == 0) uniqueMixes = null;
if (tiles.Count == 0) tiles = null;
UniqueMixes = uniqueMixes;
TilesUniqueMixes = tiles;
Serialization v3 content PR (#3491) * serv3 in shared pt 1 * beginning of deepclone api * progress in implementing ideepclone & serv3 in content * adds target * its cant hurt you it cant hurt you * more changes to content.server * adds dataclasses * almost there * renamed & edited entry * finishes refactoring content to use serv3 * gasmixture runtimes, next: reagentunit * fucin hell that was an annoying one * adds flags * fixes some yaml errors * removes comment * fixes generic components for now * removes todo actually clones values my god paul fixes bug involving resolving custom data classes from other proj renames dataclass fixes spritecomp adds WithFormat.Constants support * adds deepclone to ResistanceSet * adds a bunch of deepclone implementations adds a deepclone analyzer (TODO) adds a deep clone fallback for classes & structs * fixes a bunch of runtimes * adds deepclone to entityuid * adds generator to sln * gets rid of warnings * fixes * argh * componentdata refactors * more deepclone impl * heck me i reworked all of content deepclone * renames custom dataclasstarget * misc * reworks prototypes * deepclone nuke * renamed customdataclass attribute * fixes everything * misc fixed * the killcommit * getting there * changed yamlfieldattribute namespace * adds back iselfserialize * renames everything to data(field/definition) * ouch * Fix most errors on content * Fix more errors in content * Fix some components * work on tests * fixes some customdataclasses * fuggin shit * yes * yeas * Remove data classes * Data field naming fixes * arg * Git resetti RobustToolbox * Merge fixes * General fixes * Fix startup serialization errors * Fix DamageContainerPrototype when supported classes or types are null * Implement construction graph step type serializer * Fix up construction serialization * Fix up construction serialization part 2 * Fix null list in technology database component * Fix body serialization * Fix entity storage serialization * Fix actions serialization * Fix AI serialization * Fix reaction serialization * Fix body serialization * Fix grid atmosphere serialization * Rename IServ3Manager to ISerializationManager * Convert every non generic serializer to the new format, general fixes * Serialization and body system fix * pushinheritance fix * Update all prototypes to have a parent and have consistent id/parent properties * Merge fixes * smh my head * cuddling slaps * Content commit for engine PR * stuff * more fixes * argh * yes even you are fixed * changelog fixes * fixes seeds * argh * Test fixes * Add writing for alert order prototype * Fix alert order writing * FIX * its been alot ok * Fix the rest of the visualizers * Fix server alerts component tests * Fix alert prototype tests not using the read value * Fix alert prototype tests initializing serialization multiple times * THIS IS AN AMERICAN CODEBASE GOD BLESS THE USA * Add ImplicitDataDefinitionForInheritors to IMechanismBehavior Fixes the behaviors not being found * Fix NRE in strap component Good night to the 1 buckle optimization * Fix clothing component slot flags serialization tag * Fix body component in all components test * Merge fixes * ffs * Make construction graph prototype use serialization hooks * human yaml linted * a * Do the thing for construction * stuff * a * monke see yaml linter * LINT HARDER * Remove redundant todo * yes * Add skip hook argument to readers and copiers * we gamin * test/datafield fixes * adds more verbose validation * moves linter to action * Improve construction graph step type serializer error message * Fix ammo box component NRE * gamin * some updates to the linter * yes * removes that test * misc fixes * array fix priority fix misc fixes * adds proper info the validation * adds alwaysrelevant usa * Make yaml linter take half as long to run (~50% less) * Make yaml linter 5 times faster (~80% less execution time) * based vera being based * fixes mapsaving * warning cleanup & moves surpressor * removes old msbuild targets * Revert "Make yaml linter 5 times faster (~80% less execution time)" This reverts commit 3e6091359a26252c3e98828199553de668031c63. * Add -nowarn to yaml linter run configuration * Improve yaml linter message feedback * Make dependencies an argument instead of a property on the serialization manager * yamllinting slaps * Clean up type serializers * Move yaml linter code to its own method * Fix yaml errors * Change yaml linter action name and remove -nowarn * yaml linter please shut * Git resetti robust toolbox Co-authored-by: Paul <ritter.paul1+git@googlemail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2021-03-05 01:08:38 +01:00
}
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 <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Update Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Address a few reviews * Oops, forgot to remove this * Update Content.Server/Atmos/AtmosphereMap.cs Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * 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 <znix@znix.xyz> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Co-authored-by: ComicIronic <comicironic@gmail.com> Co-authored-by: silicons <2003111+silicons@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-08-02 20:08:20 +02:00
}
}