Files
crystall-punk-14/Content.Server/GameObjects/Components/Atmos/GasCanisterComponent.cs

322 lines
9.9 KiB
C#
Raw Normal View History

#nullable enable
Canisters [ Continuation of clement-or #2544 ] (#2628) * Added atmos sprites from CEV-Eris * Moved canister sprites to appropriate dir * Removed unnecessary sprites, edited canisters prototype * Created Gas Canister UI and release pressure buttons * Changed GasMixture's pressure calculation (convert liters to cube meters) * Added relabeling Canisters * Reverted changes on GasMixture * Changed my name in the credits * Added valve opening on canisters * Change canister visual state when connected to a port * Added nullable to SharedGasCanisterComponent * Replaced nullable contexts * Changed again nullable annotation context * Moved name in the credits to correct alphabetical order * Canisters: Fix the most blatant issues with this PR (the added project interdependencies for no reason whatsoever) * Canisters: Stop crashes when canisters leave atmosphere * Canisters: Gas released into no atmosphere gets transferred "into space" (deleted) * Atmos: Nullability annotations on TileAtmosphere, explaination of the states of TileAtmosphere.Air * Canisters: If in an airblocked tile, do NOT release gas * Scrubbers: Fix typo leading to them not connecting properly. * Revert manual changes to credits file (sorry!) (1/2) This reverts commit 94f3b0e5df8d9c2fa189866a17a231920f99bdaf. * Revert manual changes to credits file (sorry!) (2/2) This reverts commit 1986fb094dfaa44060f08d280f36b755258d17a6. * Canisters: Apply @Zumorica 's reviews * Canisters: Add missing localization as suggested by PJB Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Canisters: Pressure lights! * Canisters: Light is now unshaded. * Canisters: Now using IActivate * Gas canisters (& air canister), now with their numbers properly calibrated (hopefully) * Canisters: Refactor how their layers are added to be more like ApcVisualizer * Canisters: Clean up of the tile invalidation/air release logic * Canisters: Some gas canister window improvements * Canisters: Clean up release pressure change button label code Co-authored-by: Clement-O <topy72.mine@gmail.com> Co-authored-by: Clément <clement.orlandini@gmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-12-08 19:45:24 +00:00
using System;
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 System.Linq;
Canisters [ Continuation of clement-or #2544 ] (#2628) * Added atmos sprites from CEV-Eris * Moved canister sprites to appropriate dir * Removed unnecessary sprites, edited canisters prototype * Created Gas Canister UI and release pressure buttons * Changed GasMixture's pressure calculation (convert liters to cube meters) * Added relabeling Canisters * Reverted changes on GasMixture * Changed my name in the credits * Added valve opening on canisters * Change canister visual state when connected to a port * Added nullable to SharedGasCanisterComponent * Replaced nullable contexts * Changed again nullable annotation context * Moved name in the credits to correct alphabetical order * Canisters: Fix the most blatant issues with this PR (the added project interdependencies for no reason whatsoever) * Canisters: Stop crashes when canisters leave atmosphere * Canisters: Gas released into no atmosphere gets transferred "into space" (deleted) * Atmos: Nullability annotations on TileAtmosphere, explaination of the states of TileAtmosphere.Air * Canisters: If in an airblocked tile, do NOT release gas * Scrubbers: Fix typo leading to them not connecting properly. * Revert manual changes to credits file (sorry!) (1/2) This reverts commit 94f3b0e5df8d9c2fa189866a17a231920f99bdaf. * Revert manual changes to credits file (sorry!) (2/2) This reverts commit 1986fb094dfaa44060f08d280f36b755258d17a6. * Canisters: Apply @Zumorica 's reviews * Canisters: Add missing localization as suggested by PJB Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Canisters: Pressure lights! * Canisters: Light is now unshaded. * Canisters: Now using IActivate * Gas canisters (& air canister), now with their numbers properly calibrated (hopefully) * Canisters: Refactor how their layers are added to be more like ApcVisualizer * Canisters: Clean up of the tile invalidation/air release logic * Canisters: Some gas canister window improvements * Canisters: Clean up release pressure change button label code Co-authored-by: Clement-O <topy72.mine@gmail.com> Co-authored-by: Clément <clement.orlandini@gmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-12-08 19:45:24 +00:00
using Content.Server.Atmos;
using Content.Server.GameObjects.Components.Atmos.Piping;
using Content.Server.Interfaces;
Canisters [ Continuation of clement-or #2544 ] (#2628) * Added atmos sprites from CEV-Eris * Moved canister sprites to appropriate dir * Removed unnecessary sprites, edited canisters prototype * Created Gas Canister UI and release pressure buttons * Changed GasMixture's pressure calculation (convert liters to cube meters) * Added relabeling Canisters * Reverted changes on GasMixture * Changed my name in the credits * Added valve opening on canisters * Change canister visual state when connected to a port * Added nullable to SharedGasCanisterComponent * Replaced nullable contexts * Changed again nullable annotation context * Moved name in the credits to correct alphabetical order * Canisters: Fix the most blatant issues with this PR (the added project interdependencies for no reason whatsoever) * Canisters: Stop crashes when canisters leave atmosphere * Canisters: Gas released into no atmosphere gets transferred "into space" (deleted) * Atmos: Nullability annotations on TileAtmosphere, explaination of the states of TileAtmosphere.Air * Canisters: If in an airblocked tile, do NOT release gas * Scrubbers: Fix typo leading to them not connecting properly. * Revert manual changes to credits file (sorry!) (1/2) This reverts commit 94f3b0e5df8d9c2fa189866a17a231920f99bdaf. * Revert manual changes to credits file (sorry!) (2/2) This reverts commit 1986fb094dfaa44060f08d280f36b755258d17a6. * Canisters: Apply @Zumorica 's reviews * Canisters: Add missing localization as suggested by PJB Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Canisters: Pressure lights! * Canisters: Light is now unshaded. * Canisters: Now using IActivate * Gas canisters (& air canister), now with their numbers properly calibrated (hopefully) * Canisters: Refactor how their layers are added to be more like ApcVisualizer * Canisters: Clean up of the tile invalidation/air release logic * Canisters: Some gas canister window improvements * Canisters: Clean up release pressure change button label code Co-authored-by: Clement-O <topy72.mine@gmail.com> Co-authored-by: Clément <clement.orlandini@gmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-12-08 19:45:24 +00:00
using Content.Server.Utility;
using Content.Shared.Atmos;
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 Content.Shared.GameObjects.Components.Atmos;
2020-12-20 04:26:21 +01:00
using Content.Shared.GameObjects.EntitySystems.ActionBlocker;
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 Content.Shared.Interfaces.GameObjects.Components;
Canisters [ Continuation of clement-or #2544 ] (#2628) * Added atmos sprites from CEV-Eris * Moved canister sprites to appropriate dir * Removed unnecessary sprites, edited canisters prototype * Created Gas Canister UI and release pressure buttons * Changed GasMixture's pressure calculation (convert liters to cube meters) * Added relabeling Canisters * Reverted changes on GasMixture * Changed my name in the credits * Added valve opening on canisters * Change canister visual state when connected to a port * Added nullable to SharedGasCanisterComponent * Replaced nullable contexts * Changed again nullable annotation context * Moved name in the credits to correct alphabetical order * Canisters: Fix the most blatant issues with this PR (the added project interdependencies for no reason whatsoever) * Canisters: Stop crashes when canisters leave atmosphere * Canisters: Gas released into no atmosphere gets transferred "into space" (deleted) * Atmos: Nullability annotations on TileAtmosphere, explaination of the states of TileAtmosphere.Air * Canisters: If in an airblocked tile, do NOT release gas * Scrubbers: Fix typo leading to them not connecting properly. * Revert manual changes to credits file (sorry!) (1/2) This reverts commit 94f3b0e5df8d9c2fa189866a17a231920f99bdaf. * Revert manual changes to credits file (sorry!) (2/2) This reverts commit 1986fb094dfaa44060f08d280f36b755258d17a6. * Canisters: Apply @Zumorica 's reviews * Canisters: Add missing localization as suggested by PJB Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Canisters: Pressure lights! * Canisters: Light is now unshaded. * Canisters: Now using IActivate * Gas canisters (& air canister), now with their numbers properly calibrated (hopefully) * Canisters: Refactor how their layers are added to be more like ApcVisualizer * Canisters: Clean up of the tile invalidation/air release logic * Canisters: Some gas canister window improvements * Canisters: Clean up release pressure change button label code Co-authored-by: Clement-O <topy72.mine@gmail.com> Co-authored-by: Clément <clement.orlandini@gmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-12-08 19:45:24 +00:00
using Robust.Server.GameObjects;
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.GameObjects;
using Robust.Shared.Serialization.Manager.Attributes;
using Robust.Shared.ViewVariables;
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
namespace Content.Server.GameObjects.Components.Atmos
{
Canisters [ Continuation of clement-or #2544 ] (#2628) * Added atmos sprites from CEV-Eris * Moved canister sprites to appropriate dir * Removed unnecessary sprites, edited canisters prototype * Created Gas Canister UI and release pressure buttons * Changed GasMixture's pressure calculation (convert liters to cube meters) * Added relabeling Canisters * Reverted changes on GasMixture * Changed my name in the credits * Added valve opening on canisters * Change canister visual state when connected to a port * Added nullable to SharedGasCanisterComponent * Replaced nullable contexts * Changed again nullable annotation context * Moved name in the credits to correct alphabetical order * Canisters: Fix the most blatant issues with this PR (the added project interdependencies for no reason whatsoever) * Canisters: Stop crashes when canisters leave atmosphere * Canisters: Gas released into no atmosphere gets transferred "into space" (deleted) * Atmos: Nullability annotations on TileAtmosphere, explaination of the states of TileAtmosphere.Air * Canisters: If in an airblocked tile, do NOT release gas * Scrubbers: Fix typo leading to them not connecting properly. * Revert manual changes to credits file (sorry!) (1/2) This reverts commit 94f3b0e5df8d9c2fa189866a17a231920f99bdaf. * Revert manual changes to credits file (sorry!) (2/2) This reverts commit 1986fb094dfaa44060f08d280f36b755258d17a6. * Canisters: Apply @Zumorica 's reviews * Canisters: Add missing localization as suggested by PJB Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Canisters: Pressure lights! * Canisters: Light is now unshaded. * Canisters: Now using IActivate * Gas canisters (& air canister), now with their numbers properly calibrated (hopefully) * Canisters: Refactor how their layers are added to be more like ApcVisualizer * Canisters: Clean up of the tile invalidation/air release logic * Canisters: Some gas canister window improvements * Canisters: Clean up release pressure change button label code Co-authored-by: Clement-O <topy72.mine@gmail.com> Co-authored-by: Clément <clement.orlandini@gmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-12-08 19:45:24 +00:00
/// <summary>
/// Component that manages gas mixtures temperature, pressure and output.
/// </summary>
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]
Canisters [ Continuation of clement-or #2544 ] (#2628) * Added atmos sprites from CEV-Eris * Moved canister sprites to appropriate dir * Removed unnecessary sprites, edited canisters prototype * Created Gas Canister UI and release pressure buttons * Changed GasMixture's pressure calculation (convert liters to cube meters) * Added relabeling Canisters * Reverted changes on GasMixture * Changed my name in the credits * Added valve opening on canisters * Change canister visual state when connected to a port * Added nullable to SharedGasCanisterComponent * Replaced nullable contexts * Changed again nullable annotation context * Moved name in the credits to correct alphabetical order * Canisters: Fix the most blatant issues with this PR (the added project interdependencies for no reason whatsoever) * Canisters: Stop crashes when canisters leave atmosphere * Canisters: Gas released into no atmosphere gets transferred "into space" (deleted) * Atmos: Nullability annotations on TileAtmosphere, explaination of the states of TileAtmosphere.Air * Canisters: If in an airblocked tile, do NOT release gas * Scrubbers: Fix typo leading to them not connecting properly. * Revert manual changes to credits file (sorry!) (1/2) This reverts commit 94f3b0e5df8d9c2fa189866a17a231920f99bdaf. * Revert manual changes to credits file (sorry!) (2/2) This reverts commit 1986fb094dfaa44060f08d280f36b755258d17a6. * Canisters: Apply @Zumorica 's reviews * Canisters: Add missing localization as suggested by PJB Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Canisters: Pressure lights! * Canisters: Light is now unshaded. * Canisters: Now using IActivate * Gas canisters (& air canister), now with their numbers properly calibrated (hopefully) * Canisters: Refactor how their layers are added to be more like ApcVisualizer * Canisters: Clean up of the tile invalidation/air release logic * Canisters: Some gas canister window improvements * Canisters: Clean up release pressure change button label code Co-authored-by: Clement-O <topy72.mine@gmail.com> Co-authored-by: Clément <clement.orlandini@gmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-12-08 19:45:24 +00:00
[ComponentReference(typeof(IActivate))]
public class GasCanisterComponent : Component, IGasMixtureHolder, IActivate
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
{
public override string Name => "GasCanister";
Canisters [ Continuation of clement-or #2544 ] (#2628) * Added atmos sprites from CEV-Eris * Moved canister sprites to appropriate dir * Removed unnecessary sprites, edited canisters prototype * Created Gas Canister UI and release pressure buttons * Changed GasMixture's pressure calculation (convert liters to cube meters) * Added relabeling Canisters * Reverted changes on GasMixture * Changed my name in the credits * Added valve opening on canisters * Change canister visual state when connected to a port * Added nullable to SharedGasCanisterComponent * Replaced nullable contexts * Changed again nullable annotation context * Moved name in the credits to correct alphabetical order * Canisters: Fix the most blatant issues with this PR (the added project interdependencies for no reason whatsoever) * Canisters: Stop crashes when canisters leave atmosphere * Canisters: Gas released into no atmosphere gets transferred "into space" (deleted) * Atmos: Nullability annotations on TileAtmosphere, explaination of the states of TileAtmosphere.Air * Canisters: If in an airblocked tile, do NOT release gas * Scrubbers: Fix typo leading to them not connecting properly. * Revert manual changes to credits file (sorry!) (1/2) This reverts commit 94f3b0e5df8d9c2fa189866a17a231920f99bdaf. * Revert manual changes to credits file (sorry!) (2/2) This reverts commit 1986fb094dfaa44060f08d280f36b755258d17a6. * Canisters: Apply @Zumorica 's reviews * Canisters: Add missing localization as suggested by PJB Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Canisters: Pressure lights! * Canisters: Light is now unshaded. * Canisters: Now using IActivate * Gas canisters (& air canister), now with their numbers properly calibrated (hopefully) * Canisters: Refactor how their layers are added to be more like ApcVisualizer * Canisters: Clean up of the tile invalidation/air release logic * Canisters: Some gas canister window improvements * Canisters: Clean up release pressure change button label code Co-authored-by: Clement-O <topy72.mine@gmail.com> Co-authored-by: Clément <clement.orlandini@gmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-12-08 19:45:24 +00:00
private const int MaxLabelLength = 32;
[ViewVariables(VVAccess.ReadWrite)]
public string Label { get; set; } = "Gas Canister";
[ViewVariables(VVAccess.ReadWrite)]
public bool ValveOpened { get; set; } = false;
/// <summary>
/// What <see cref="GasMixture"/> the canister contains.
/// </summary>
[ViewVariables(VVAccess.ReadWrite)]
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("gasMixture")]
public GasMixture Air { get; set; } = new (DefaultVolume);
[ViewVariables]
public bool Anchored => !Owner.TryGetComponent<IPhysicsComponent>(out var physics) || physics.Anchored;
Canisters [ Continuation of clement-or #2544 ] (#2628) * Added atmos sprites from CEV-Eris * Moved canister sprites to appropriate dir * Removed unnecessary sprites, edited canisters prototype * Created Gas Canister UI and release pressure buttons * Changed GasMixture's pressure calculation (convert liters to cube meters) * Added relabeling Canisters * Reverted changes on GasMixture * Changed my name in the credits * Added valve opening on canisters * Change canister visual state when connected to a port * Added nullable to SharedGasCanisterComponent * Replaced nullable contexts * Changed again nullable annotation context * Moved name in the credits to correct alphabetical order * Canisters: Fix the most blatant issues with this PR (the added project interdependencies for no reason whatsoever) * Canisters: Stop crashes when canisters leave atmosphere * Canisters: Gas released into no atmosphere gets transferred "into space" (deleted) * Atmos: Nullability annotations on TileAtmosphere, explaination of the states of TileAtmosphere.Air * Canisters: If in an airblocked tile, do NOT release gas * Scrubbers: Fix typo leading to them not connecting properly. * Revert manual changes to credits file (sorry!) (1/2) This reverts commit 94f3b0e5df8d9c2fa189866a17a231920f99bdaf. * Revert manual changes to credits file (sorry!) (2/2) This reverts commit 1986fb094dfaa44060f08d280f36b755258d17a6. * Canisters: Apply @Zumorica 's reviews * Canisters: Add missing localization as suggested by PJB Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Canisters: Pressure lights! * Canisters: Light is now unshaded. * Canisters: Now using IActivate * Gas canisters (& air canister), now with their numbers properly calibrated (hopefully) * Canisters: Refactor how their layers are added to be more like ApcVisualizer * Canisters: Clean up of the tile invalidation/air release logic * Canisters: Some gas canister window improvements * Canisters: Clean up release pressure change button label code Co-authored-by: Clement-O <topy72.mine@gmail.com> Co-authored-by: Clément <clement.orlandini@gmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-12-08 19:45:24 +00:00
/// <summary>
/// The floor connector port that the canister is attached to.
/// </summary>
[ViewVariables]
Canisters [ Continuation of clement-or #2544 ] (#2628) * Added atmos sprites from CEV-Eris * Moved canister sprites to appropriate dir * Removed unnecessary sprites, edited canisters prototype * Created Gas Canister UI and release pressure buttons * Changed GasMixture's pressure calculation (convert liters to cube meters) * Added relabeling Canisters * Reverted changes on GasMixture * Changed my name in the credits * Added valve opening on canisters * Change canister visual state when connected to a port * Added nullable to SharedGasCanisterComponent * Replaced nullable contexts * Changed again nullable annotation context * Moved name in the credits to correct alphabetical order * Canisters: Fix the most blatant issues with this PR (the added project interdependencies for no reason whatsoever) * Canisters: Stop crashes when canisters leave atmosphere * Canisters: Gas released into no atmosphere gets transferred "into space" (deleted) * Atmos: Nullability annotations on TileAtmosphere, explaination of the states of TileAtmosphere.Air * Canisters: If in an airblocked tile, do NOT release gas * Scrubbers: Fix typo leading to them not connecting properly. * Revert manual changes to credits file (sorry!) (1/2) This reverts commit 94f3b0e5df8d9c2fa189866a17a231920f99bdaf. * Revert manual changes to credits file (sorry!) (2/2) This reverts commit 1986fb094dfaa44060f08d280f36b755258d17a6. * Canisters: Apply @Zumorica 's reviews * Canisters: Add missing localization as suggested by PJB Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Canisters: Pressure lights! * Canisters: Light is now unshaded. * Canisters: Now using IActivate * Gas canisters (& air canister), now with their numbers properly calibrated (hopefully) * Canisters: Refactor how their layers are added to be more like ApcVisualizer * Canisters: Clean up of the tile invalidation/air release logic * Canisters: Some gas canister window improvements * Canisters: Clean up release pressure change button label code Co-authored-by: Clement-O <topy72.mine@gmail.com> Co-authored-by: Clément <clement.orlandini@gmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-12-08 19:45:24 +00:00
public GasCanisterPortComponent? ConnectedPort { get; private set; }
[ViewVariables]
public bool ConnectedToPort => ConnectedPort != null;
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
public const float DefaultVolume = 10;
Canisters [ Continuation of clement-or #2544 ] (#2628) * Added atmos sprites from CEV-Eris * Moved canister sprites to appropriate dir * Removed unnecessary sprites, edited canisters prototype * Created Gas Canister UI and release pressure buttons * Changed GasMixture's pressure calculation (convert liters to cube meters) * Added relabeling Canisters * Reverted changes on GasMixture * Changed my name in the credits * Added valve opening on canisters * Change canister visual state when connected to a port * Added nullable to SharedGasCanisterComponent * Replaced nullable contexts * Changed again nullable annotation context * Moved name in the credits to correct alphabetical order * Canisters: Fix the most blatant issues with this PR (the added project interdependencies for no reason whatsoever) * Canisters: Stop crashes when canisters leave atmosphere * Canisters: Gas released into no atmosphere gets transferred "into space" (deleted) * Atmos: Nullability annotations on TileAtmosphere, explaination of the states of TileAtmosphere.Air * Canisters: If in an airblocked tile, do NOT release gas * Scrubbers: Fix typo leading to them not connecting properly. * Revert manual changes to credits file (sorry!) (1/2) This reverts commit 94f3b0e5df8d9c2fa189866a17a231920f99bdaf. * Revert manual changes to credits file (sorry!) (2/2) This reverts commit 1986fb094dfaa44060f08d280f36b755258d17a6. * Canisters: Apply @Zumorica 's reviews * Canisters: Add missing localization as suggested by PJB Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Canisters: Pressure lights! * Canisters: Light is now unshaded. * Canisters: Now using IActivate * Gas canisters (& air canister), now with their numbers properly calibrated (hopefully) * Canisters: Refactor how their layers are added to be more like ApcVisualizer * Canisters: Clean up of the tile invalidation/air release logic * Canisters: Some gas canister window improvements * Canisters: Clean up release pressure change button label code Co-authored-by: Clement-O <topy72.mine@gmail.com> Co-authored-by: Clément <clement.orlandini@gmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-12-08 19:45:24 +00:00
[ViewVariables(VVAccess.ReadWrite)] public float ReleasePressure { get; set; }
/// <summary>
/// The user interface bound to the canister.
/// </summary>
private BoundUserInterface? UserInterface => Owner.GetUIOrNull(SharedGasCanisterComponent.GasCanisterUiKey.Key);
/// <summary>
/// Stores the last ui state after it's been casted into <see cref="GasCanisterBoundUserInterface"/>
/// </summary>
private GasCanisterBoundUserInterfaceState? _lastUiState;
private AppearanceComponent? _appearance;
public override void Initialize()
{
base.Initialize();
if (Owner.TryGetComponent<IPhysicsComponent>(out var physics))
{
AnchorUpdate();
}
Canisters [ Continuation of clement-or #2544 ] (#2628) * Added atmos sprites from CEV-Eris * Moved canister sprites to appropriate dir * Removed unnecessary sprites, edited canisters prototype * Created Gas Canister UI and release pressure buttons * Changed GasMixture's pressure calculation (convert liters to cube meters) * Added relabeling Canisters * Reverted changes on GasMixture * Changed my name in the credits * Added valve opening on canisters * Change canister visual state when connected to a port * Added nullable to SharedGasCanisterComponent * Replaced nullable contexts * Changed again nullable annotation context * Moved name in the credits to correct alphabetical order * Canisters: Fix the most blatant issues with this PR (the added project interdependencies for no reason whatsoever) * Canisters: Stop crashes when canisters leave atmosphere * Canisters: Gas released into no atmosphere gets transferred "into space" (deleted) * Atmos: Nullability annotations on TileAtmosphere, explaination of the states of TileAtmosphere.Air * Canisters: If in an airblocked tile, do NOT release gas * Scrubbers: Fix typo leading to them not connecting properly. * Revert manual changes to credits file (sorry!) (1/2) This reverts commit 94f3b0e5df8d9c2fa189866a17a231920f99bdaf. * Revert manual changes to credits file (sorry!) (2/2) This reverts commit 1986fb094dfaa44060f08d280f36b755258d17a6. * Canisters: Apply @Zumorica 's reviews * Canisters: Add missing localization as suggested by PJB Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Canisters: Pressure lights! * Canisters: Light is now unshaded. * Canisters: Now using IActivate * Gas canisters (& air canister), now with their numbers properly calibrated (hopefully) * Canisters: Refactor how their layers are added to be more like ApcVisualizer * Canisters: Clean up of the tile invalidation/air release logic * Canisters: Some gas canister window improvements * Canisters: Clean up release pressure change button label code Co-authored-by: Clement-O <topy72.mine@gmail.com> Co-authored-by: Clément <clement.orlandini@gmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-12-08 19:45:24 +00:00
if (UserInterface != null)
{
UserInterface.OnReceiveMessage += OnUiReceiveMessage;
}
// Init some variables
Label = Owner.Name;
Owner.TryGetComponent(out _appearance);
UpdateUserInterface();
UpdateAppearance();
}
public override void HandleMessage(ComponentMessage message, IComponent? component)
{
base.HandleMessage(message, component);
switch (message)
{
case AnchoredChangedMessage:
AnchorUpdate();
break;
}
}
Canisters [ Continuation of clement-or #2544 ] (#2628) * Added atmos sprites from CEV-Eris * Moved canister sprites to appropriate dir * Removed unnecessary sprites, edited canisters prototype * Created Gas Canister UI and release pressure buttons * Changed GasMixture's pressure calculation (convert liters to cube meters) * Added relabeling Canisters * Reverted changes on GasMixture * Changed my name in the credits * Added valve opening on canisters * Change canister visual state when connected to a port * Added nullable to SharedGasCanisterComponent * Replaced nullable contexts * Changed again nullable annotation context * Moved name in the credits to correct alphabetical order * Canisters: Fix the most blatant issues with this PR (the added project interdependencies for no reason whatsoever) * Canisters: Stop crashes when canisters leave atmosphere * Canisters: Gas released into no atmosphere gets transferred "into space" (deleted) * Atmos: Nullability annotations on TileAtmosphere, explaination of the states of TileAtmosphere.Air * Canisters: If in an airblocked tile, do NOT release gas * Scrubbers: Fix typo leading to them not connecting properly. * Revert manual changes to credits file (sorry!) (1/2) This reverts commit 94f3b0e5df8d9c2fa189866a17a231920f99bdaf. * Revert manual changes to credits file (sorry!) (2/2) This reverts commit 1986fb094dfaa44060f08d280f36b755258d17a6. * Canisters: Apply @Zumorica 's reviews * Canisters: Add missing localization as suggested by PJB Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Canisters: Pressure lights! * Canisters: Light is now unshaded. * Canisters: Now using IActivate * Gas canisters (& air canister), now with their numbers properly calibrated (hopefully) * Canisters: Refactor how their layers are added to be more like ApcVisualizer * Canisters: Clean up of the tile invalidation/air release logic * Canisters: Some gas canister window improvements * Canisters: Clean up release pressure change button label code Co-authored-by: Clement-O <topy72.mine@gmail.com> Co-authored-by: Clément <clement.orlandini@gmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-12-08 19:45:24 +00:00
#region Connector port methods
public override void OnRemove()
{
base.OnRemove();
Canisters [ Continuation of clement-or #2544 ] (#2628) * Added atmos sprites from CEV-Eris * Moved canister sprites to appropriate dir * Removed unnecessary sprites, edited canisters prototype * Created Gas Canister UI and release pressure buttons * Changed GasMixture's pressure calculation (convert liters to cube meters) * Added relabeling Canisters * Reverted changes on GasMixture * Changed my name in the credits * Added valve opening on canisters * Change canister visual state when connected to a port * Added nullable to SharedGasCanisterComponent * Replaced nullable contexts * Changed again nullable annotation context * Moved name in the credits to correct alphabetical order * Canisters: Fix the most blatant issues with this PR (the added project interdependencies for no reason whatsoever) * Canisters: Stop crashes when canisters leave atmosphere * Canisters: Gas released into no atmosphere gets transferred "into space" (deleted) * Atmos: Nullability annotations on TileAtmosphere, explaination of the states of TileAtmosphere.Air * Canisters: If in an airblocked tile, do NOT release gas * Scrubbers: Fix typo leading to them not connecting properly. * Revert manual changes to credits file (sorry!) (1/2) This reverts commit 94f3b0e5df8d9c2fa189866a17a231920f99bdaf. * Revert manual changes to credits file (sorry!) (2/2) This reverts commit 1986fb094dfaa44060f08d280f36b755258d17a6. * Canisters: Apply @Zumorica 's reviews * Canisters: Add missing localization as suggested by PJB Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Canisters: Pressure lights! * Canisters: Light is now unshaded. * Canisters: Now using IActivate * Gas canisters (& air canister), now with their numbers properly calibrated (hopefully) * Canisters: Refactor how their layers are added to be more like ApcVisualizer * Canisters: Clean up of the tile invalidation/air release logic * Canisters: Some gas canister window improvements * Canisters: Clean up release pressure change button label code Co-authored-by: Clement-O <topy72.mine@gmail.com> Co-authored-by: Clément <clement.orlandini@gmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-12-08 19:45:24 +00:00
if (UserInterface != null)
{
UserInterface.OnReceiveMessage -= OnUiReceiveMessage;
}
DisconnectFromPort();
}
public void TryConnectToPort()
{
if (!Owner.TryGetComponent<SnapGridComponent>(out var snapGrid)) return;
var port = snapGrid.GetLocal()
.Select(entity => entity.TryGetComponent<GasCanisterPortComponent>(out var port) ? port : null)
.Where(port => port != null)
Canisters [ Continuation of clement-or #2544 ] (#2628) * Added atmos sprites from CEV-Eris * Moved canister sprites to appropriate dir * Removed unnecessary sprites, edited canisters prototype * Created Gas Canister UI and release pressure buttons * Changed GasMixture's pressure calculation (convert liters to cube meters) * Added relabeling Canisters * Reverted changes on GasMixture * Changed my name in the credits * Added valve opening on canisters * Change canister visual state when connected to a port * Added nullable to SharedGasCanisterComponent * Replaced nullable contexts * Changed again nullable annotation context * Moved name in the credits to correct alphabetical order * Canisters: Fix the most blatant issues with this PR (the added project interdependencies for no reason whatsoever) * Canisters: Stop crashes when canisters leave atmosphere * Canisters: Gas released into no atmosphere gets transferred "into space" (deleted) * Atmos: Nullability annotations on TileAtmosphere, explaination of the states of TileAtmosphere.Air * Canisters: If in an airblocked tile, do NOT release gas * Scrubbers: Fix typo leading to them not connecting properly. * Revert manual changes to credits file (sorry!) (1/2) This reverts commit 94f3b0e5df8d9c2fa189866a17a231920f99bdaf. * Revert manual changes to credits file (sorry!) (2/2) This reverts commit 1986fb094dfaa44060f08d280f36b755258d17a6. * Canisters: Apply @Zumorica 's reviews * Canisters: Add missing localization as suggested by PJB Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Canisters: Pressure lights! * Canisters: Light is now unshaded. * Canisters: Now using IActivate * Gas canisters (& air canister), now with their numbers properly calibrated (hopefully) * Canisters: Refactor how their layers are added to be more like ApcVisualizer * Canisters: Clean up of the tile invalidation/air release logic * Canisters: Some gas canister window improvements * Canisters: Clean up release pressure change button label code Co-authored-by: Clement-O <topy72.mine@gmail.com> Co-authored-by: Clément <clement.orlandini@gmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-12-08 19:45:24 +00:00
.Where(port => !port!.ConnectedToCanister)
.FirstOrDefault();
if (port == null) return;
ConnectedPort = port;
ConnectedPort.ConnectGasCanister(this);
}
Canisters [ Continuation of clement-or #2544 ] (#2628) * Added atmos sprites from CEV-Eris * Moved canister sprites to appropriate dir * Removed unnecessary sprites, edited canisters prototype * Created Gas Canister UI and release pressure buttons * Changed GasMixture's pressure calculation (convert liters to cube meters) * Added relabeling Canisters * Reverted changes on GasMixture * Changed my name in the credits * Added valve opening on canisters * Change canister visual state when connected to a port * Added nullable to SharedGasCanisterComponent * Replaced nullable contexts * Changed again nullable annotation context * Moved name in the credits to correct alphabetical order * Canisters: Fix the most blatant issues with this PR (the added project interdependencies for no reason whatsoever) * Canisters: Stop crashes when canisters leave atmosphere * Canisters: Gas released into no atmosphere gets transferred "into space" (deleted) * Atmos: Nullability annotations on TileAtmosphere, explaination of the states of TileAtmosphere.Air * Canisters: If in an airblocked tile, do NOT release gas * Scrubbers: Fix typo leading to them not connecting properly. * Revert manual changes to credits file (sorry!) (1/2) This reverts commit 94f3b0e5df8d9c2fa189866a17a231920f99bdaf. * Revert manual changes to credits file (sorry!) (2/2) This reverts commit 1986fb094dfaa44060f08d280f36b755258d17a6. * Canisters: Apply @Zumorica 's reviews * Canisters: Add missing localization as suggested by PJB Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Canisters: Pressure lights! * Canisters: Light is now unshaded. * Canisters: Now using IActivate * Gas canisters (& air canister), now with their numbers properly calibrated (hopefully) * Canisters: Refactor how their layers are added to be more like ApcVisualizer * Canisters: Clean up of the tile invalidation/air release logic * Canisters: Some gas canister window improvements * Canisters: Clean up release pressure change button label code Co-authored-by: Clement-O <topy72.mine@gmail.com> Co-authored-by: Clément <clement.orlandini@gmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-12-08 19:45:24 +00:00
public void DisconnectFromPort()
{
ConnectedPort?.DisconnectGasCanister();
ConnectedPort = null;
}
private void AnchorUpdate()
{
if (Anchored)
{
TryConnectToPort();
}
else
{
DisconnectFromPort();
}
Canisters [ Continuation of clement-or #2544 ] (#2628) * Added atmos sprites from CEV-Eris * Moved canister sprites to appropriate dir * Removed unnecessary sprites, edited canisters prototype * Created Gas Canister UI and release pressure buttons * Changed GasMixture's pressure calculation (convert liters to cube meters) * Added relabeling Canisters * Reverted changes on GasMixture * Changed my name in the credits * Added valve opening on canisters * Change canister visual state when connected to a port * Added nullable to SharedGasCanisterComponent * Replaced nullable contexts * Changed again nullable annotation context * Moved name in the credits to correct alphabetical order * Canisters: Fix the most blatant issues with this PR (the added project interdependencies for no reason whatsoever) * Canisters: Stop crashes when canisters leave atmosphere * Canisters: Gas released into no atmosphere gets transferred "into space" (deleted) * Atmos: Nullability annotations on TileAtmosphere, explaination of the states of TileAtmosphere.Air * Canisters: If in an airblocked tile, do NOT release gas * Scrubbers: Fix typo leading to them not connecting properly. * Revert manual changes to credits file (sorry!) (1/2) This reverts commit 94f3b0e5df8d9c2fa189866a17a231920f99bdaf. * Revert manual changes to credits file (sorry!) (2/2) This reverts commit 1986fb094dfaa44060f08d280f36b755258d17a6. * Canisters: Apply @Zumorica 's reviews * Canisters: Add missing localization as suggested by PJB Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Canisters: Pressure lights! * Canisters: Light is now unshaded. * Canisters: Now using IActivate * Gas canisters (& air canister), now with their numbers properly calibrated (hopefully) * Canisters: Refactor how their layers are added to be more like ApcVisualizer * Canisters: Clean up of the tile invalidation/air release logic * Canisters: Some gas canister window improvements * Canisters: Clean up release pressure change button label code Co-authored-by: Clement-O <topy72.mine@gmail.com> Co-authored-by: Clément <clement.orlandini@gmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2020-12-08 19:45:24 +00:00
UpdateAppearance();
}
#endregion
void IActivate.Activate(ActivateEventArgs eventArgs)
{
if (!eventArgs.User.TryGetComponent(out IActorComponent? actor))
return;
UserInterface?.Open(actor.playerSession);
}
private void OnUiReceiveMessage(ServerBoundUserInterfaceMessage obj)
{
if (obj.Session.AttachedEntity == null)
{
return;
}
if (!PlayerCanUse(obj.Session.AttachedEntity))
{
return;
}
// If the label has been changed by a client
if (obj.Message is CanisterLabelChangedMessage canLabelMessage)
{
var newLabel = canLabelMessage.NewLabel;
if (newLabel.Length > MaxLabelLength)
newLabel = newLabel.Substring(0, MaxLabelLength);
Label = newLabel;
Owner.Name = Label;
UpdateUserInterface();
return;
}
// If the release pressure has been adjusted by the client on the gas canister
if (obj.Message is ReleasePressureButtonPressedMessage rPMessage)
{
ReleasePressure += rPMessage.ReleasePressure;
ReleasePressure = Math.Clamp(ReleasePressure, 0, 1000);
ReleasePressure = MathF.Round(ReleasePressure, 2);
UpdateUserInterface();
return;
}
if (obj.Message is UiButtonPressedMessage btnPressedMessage)
{
switch (btnPressedMessage.Button)
{
case UiButton.ValveToggle:
ToggleValve();
break;
}
}
}
/// <summary>
/// Update the user interface if relevant
/// </summary>
private void UpdateUserInterface()
{
var state = GetUserInterfaceState();
if (_lastUiState != null && _lastUiState.Equals(state))
{
return;
}
_lastUiState = state;
UserInterface?.SetState(state);
}
/// <summary>
/// Update the canister's sprite
/// </summary>
private void UpdateAppearance()
{
_appearance?.SetData(GasCanisterVisuals.ConnectedState, ConnectedToPort);
// The Eris canisters are being used, so best to use the Eris light logic unless someone else has a better idea.
// https://github.com/discordia-space/CEV-Eris/blob/fdd6ee7012f46838a6711adb1737cd90c48ae448/code/game/machinery/atmoalter/canister.dm#L129
if (Air.Pressure < 10)
{
_appearance?.SetData(GasCanisterVisuals.PressureState, 0);
}
else if (Air.Pressure < Atmospherics.OneAtmosphere)
{
_appearance?.SetData(GasCanisterVisuals.PressureState, 1);
}
else if (Air.Pressure < (15 * Atmospherics.OneAtmosphere))
{
_appearance?.SetData(GasCanisterVisuals.PressureState, 2);
}
else
{
_appearance?.SetData(GasCanisterVisuals.PressureState, 3);
}
}
/// <summary>
/// Get the current interface state from server data
/// </summary>
/// <returns>The state</returns>
private GasCanisterBoundUserInterfaceState GetUserInterfaceState()
{
// We round the pressure for ease of reading
return new GasCanisterBoundUserInterfaceState(Label,
MathF.Round(Air.Pressure, 2),
ReleasePressure,
ValveOpened);
}
public void AirWasUpdated()
{
UpdateUserInterface();
UpdateAppearance();
}
#region Check methods
private bool PlayerCanUse(IEntity? player)
{
if (player == null)
{
return false;
}
if (!ActionBlockerSystem.CanInteract(player) ||
!ActionBlockerSystem.CanUse(player))
{
return false;
}
return true;
}
#endregion
/// <summary>
/// Called when the canister's valve is toggled
/// </summary>
private void ToggleValve()
{
ValveOpened = !ValveOpened;
UpdateUserInterface();
}
/// <summary>
/// Called every frame
/// </summary>
/// <param name="frameTime"></param>
public void Update(in float frameTime)
{
if (ValveOpened)
{
var tileAtmosphere = Owner.Transform.Coordinates.GetTileAtmosphere();
if (tileAtmosphere != null)
{
// If tileAtmosphere.Air is null, then we're airblocked, so DON'T release
if (tileAtmosphere.Air != null)
{
Air.ReleaseGasTo(tileAtmosphere.Air, ReleasePressure);
tileAtmosphere.Invalidate();
}
}
else
{
Air.ReleaseGasTo(null, ReleasePressure);
}
AirWasUpdated();
}
}
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
}
}