Atmos pipe rework (#3833)

* Initial

* Cleanup a bunch of things

* some changes dunno

* RequireAnchored

* a

* stuff

* more work

* Lots of progress

* delete pipe visualizer

* a

* b

* pipenet and pipenode cleanup

* Fixes

* Adds GasValve

* Adds GasMiner

* Fix stuff, maybe?

* More fixes

* Ignored components on the client

* Adds thermomachine behavior, change a bunch of stuff

* Remove Anchored

* some work, but it's shitcode

* significantly more ECS

* ECS AtmosDevices

* Cleanup

* fix appearance

* when the pipe direction is sus

* Gas tanks and canisters

* pipe anchoring and stuff

* coding is my passion

* Unsafe pipes take longer to unanchor

* turns out we're no longer using eris canisters

* Gas canister inserted tank appearance, improvements

* Work on a bunch of appearances

* Scrubber appearance

* Reorganize AtmosphereSystem.Piping into a bunch of different systems

* Appearance for vent/scrubber/pump turns off when leaving atmosphere

* ThermoMachine appearance

* Cleanup gas tanks

* Remove passive gate unused imports

* remove old canister UI functionality

* PipeNode environment air, make everything use AssumeAir instead of merging manually

* a

* Reorganize atmos to follow new structure

* ?????

* Canister UI, restructure client

* Restructure shared

* Fix build tho

* listen, at least the canister UI works entirely...

* fix build : )

* Atmos device prototypes have names and descriptions

* gas canister ui slider doesn't jitter

* trinary prototypes

* sprite for miners

* ignore components

* fix YAML

* Fix port system doing useless thing

* Fix build

* fix thinking moment

* fix build again because

* canister direction

* pipenode is a word

* GasTank Air will throw on invalid states

* fix build....

* Unhardcode volume pump thresholds

* Volume pump and filter take time into account

* Rename Join/Leave atmosphere events to AtmosDeviceEnabled/Disabled Event

* Gas tank node volume is set by initial mixtuer

* I love node container
This commit is contained in:
Vera Aguilera Puerto
2021-06-19 13:25:05 +02:00
committed by GitHub
parent cfc3f2e7fc
commit a2b737d945
250 changed files with 3964 additions and 3163 deletions

View File

@@ -0,0 +1,133 @@
- type: entity
parent: GasPipeBase
abstract: true
id: GasBinaryBase
placement:
mode: SnapgridCenter
components:
- type: AtmosDevice
- type: NodeContainer
nodes:
inlet:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: North
outlet:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: South
- type: entity
parent: GasBinaryBase
id: GasPressurePump
name: gas pump
description: A pump that moves gas by pressure.
placement:
mode: SnapgridCenter
components:
- type: Sprite
netsync: false
sprite: Constructible/Atmos/pump.rsi
layers:
- sprite: Constructible/Atmos/pipe.rsi
state: pipeStraight
- state: pumpPressure
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: PressurePumpVisualizer
enabledState: pumpPressureOn
- type: GasPressurePump
- type: entity
parent: GasBinaryBase
id: GasVolumePump
name: volumetric gas pump
description: A pump that moves gas by volume.
placement:
mode: SnapgridCenter
components:
- type: Sprite
netsync: false
sprite: Constructible/Atmos/pump.rsi
layers:
- sprite: Constructible/Atmos/pipe.rsi
state: pipeStraight
- state: pumpVolume
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: GasVolumePump
- type: entity
parent: GasBinaryBase
id: GasPassiveGate
name: passive gate
description: A one-way air valve that does not require power.
placement:
mode: SnapgridCenter
components:
- type: Sprite
netsync: false
sprite: Constructible/Atmos/pump.rsi
layers:
- sprite: Constructible/Atmos/pipe.rsi
state: pipeStraight
- state: pumpPassiveGate
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: GasPassiveGate
- type: entity
parent: GasBinaryBase
id: GasValve
name: manual valve
description: A pipe with a valve that can be used to disable the flow of gas through it.
placement:
mode: SnapgridCenter
components:
# TODO ATMOS: Give unique sprite.
- type: Sprite
netsync: false
sprite: Constructible/Atmos/pump.rsi
layers:
- sprite: Constructible/Atmos/pipe.rsi
state: pipeStraight
- state: pumpPassiveGate
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: GasValve
- type: NodeContainer
nodes:
pipe:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: Longitudinal
- type: entity
parent: GasBinaryBase
id: GasPort
name: connector port
description: For connecting portable devices related to atmospherics control.
placement:
mode: SnapgridCenter
components:
- type: Sprite
netsync: false
sprite: Constructible/Atmos/gascanisterport.rsi
layers:
- sprite: Constructible/Atmos/pipe.rsi
state: pipeHalf
- state: gasCanisterPort
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: GasPort
- type: NodeContainer
nodes:
connected:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: SPBend

View File

@@ -1,6 +1,6 @@
- type: entity
abstract: true
id: GasCanisterBase
id: GasCanister
name: gas canister
description: A canister that can contain any type of gas. It can be attached to connector ports using a wrench.
parent: BaseConstructibleDynamic
@@ -8,6 +8,39 @@
- type: InteractionOutline
- type: SnapGrid
- type: Sprite
netsync: false
sprite: Constructible/Atmos/canister.rsi
state: grey
- type: Appearance
visuals:
- type: GasPortableVisualizer
stateConnected: can-connector
- type: GasCanisterVisualizer
insertedTankState: can-open
pressureStates:
- can-o0
- can-o1
- can-o2
- can-o3
- type: UserInterface
interfaces:
- key: enum.GasCanisterUiKey.Key
type: GasCanisterBoundUserInterface
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 300
behaviors:
- !type:PlaySoundBehavior
sound: /Audio/Effects/metalbreak.ogg
- !type:SpawnEntitiesBehavior
spawn:
GasCanisterBrokenBase:
min: 1
max: 1
- !type:DoActsBehavior
acts: [ "Destruction" ]
- type: Damageable
resistances: metallicResistances
- type: Physics
@@ -15,7 +48,7 @@
fixtures:
- shape:
!type:PhysShapeAabb
bounds: "-0.5,-0.25,0.5,0.25"
bounds: "-0.25,-0.25,0.25,0.25"
mass: 25
mask:
- MobImpassable
@@ -24,54 +57,36 @@
- MobImpassable
- SmallImpassable
- VaultImpassable
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 100
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- type: AtmosDevice
requireAnchored: false
- type: ContainerContainer
containers:
GasCanisterTankHolder: !type:ContainerSlot {}
- type: NodeContainer
nodes:
port:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: Connector
connectionsEnabled: false
needAnchored: false
rotationsEnabled: false
volume: 1000
tank:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: None
needAnchored: false
connectToContainedEntities: false
environmentalAir: true
rotationsEnabled: false
volume: 1
- type: GasPortable
- type: GasCanister
- type: UserInterface
- type: Appearance
- type: entity
parent: GasCanisterBase
id: GasCanister
components:
- type: Sprite
netsync: false
sprite: Constructible/Atmos/canister.rsi
state: grey
- type: Appearance
visuals:
- type: GasCanisterVisualizer
stateConnected: can-connector
pressureStates:
- can-o0
- can-o1
- can-o2
- can-o3
- type: UserInterface
interfaces:
- key: enum.GasCanisterUiKey.Key
type: GasCanisterBoundUserInterface
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 300
behaviors:
- !type:PlaySoundBehavior
sound: /Audio/Effects/metalbreak.ogg
- !type:SpawnEntitiesBehavior
spawn:
GasCanisterBrokenBase:
min: 1
max: 1
- !type:DoActsBehavior
acts: [ "Destruction" ]
- type: GasPassiveGate
enabled: false
inlet: port
outlet: tank
- type: entity
parent: GasCanister

View File

@@ -1,44 +0,0 @@
- type: entity
abstract: true
id: GasCanisterPortBase
placement:
mode: SnapgridCenter
components:
- type: Clickable
- type: InteractionOutline
- type: Physics
- type: SnapGrid
- type: Sprite
netsync: false
sprite: Constructible/Atmos/gascanisterport.rsi
layers:
- sprite: Constructible/Atmos/pipe.rsi
state: pipeHalf
- state: gasCanisterPort
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: Damageable
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 100
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- type: GasCanisterPort
- type: PipeNetDevice
- type: entity
parent: GasCanisterPortBase
id: GasCanisterPort
name: Gas Canister Port
description: "Connect a gas canister here to release gasses into a system."
components:
- type: NodeContainer
nodes:
pipe:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: South

View File

@@ -1,57 +0,0 @@
- type: entity
abstract: true
id: GasFilterBase
placement:
mode: SnapgridCenter
components:
- type: Clickable
- type: InteractionOutline
- type: Physics
- type: SnapGrid
- type: Damageable
resistances: metallicResistances
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 100
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- type: Sprite
netsync: false
sprite: Constructible/Atmos/gasfilter.rsi
layers:
- sprite: Constructible/Atmos/pipe.rsi
state: pipeTJunction
- state: gasFilter
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: GasFilterVisualizer
- type: PipeNetDevice
- type: entity
parent: GasFilterBase
id: GasFilter
name: gas filter
description: It filters gases.
components:
- type: NodeContainer
nodes:
inlet:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: West
filter:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: South
outlet:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: East
- type: GasFilter
inletDirection: West
filterOutletDirection: South
outletDirection: East

View File

@@ -1,47 +0,0 @@
- type: entity
abstract: true
id: GasGeneratorBase
placement:
mode: SnapgridCenter
components:
- type: Clickable
- type: InteractionOutline
- type: Physics
bodyType: Static
fixtures:
- shape:
!type:PhysShapeAabb
bounds: "-0.5,-0.5,0.5,0.5"
layer:
- Impassable
- MobImpassable
- VaultImpassable
- Opaque
mask:
- Impassable
- MobImpassable
- VaultImpassable
- type: SnapGrid
- type: GasGenerator
- type: PipeNetDevice
- type: entity
parent: GasGeneratorBase
id: GasGenerator
name: gas generator
description: Fabricates gas.
components:
- type: Sprite
netsync: false
sprite: Constructible/Atmos/gasgenerator.rsi
layers:
- sprite: Constructible/Atmos/pipe.rsi
state: pipeFourway
- state: gasGenerator
- type: NodeContainer
nodes:
pipe:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: Fourway

View File

@@ -1,34 +0,0 @@
- type: entity
id: Heater
name: heater
description: Heats gas.
placement:
mode: SnapgridCenter
components:
- type: Clickable
- type: InteractionOutline
- type: Physics
- type: SnapGrid
- type: Damageable
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 100
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- type: Sprite
netsync: false
sprite: Constructible/Atmos/heater.rsi
layers:
- state: heater
- state: heaterPipe
- type: NodeContainer
nodes:
inlet:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: East
- type: PipeHeater
- type: PipeNetDevice

View File

@@ -0,0 +1,87 @@
- type: entity
abstract: true
name: gas miner
description: Gases mined from the gas giant below (above?) flow out through this massive vent.
id: GasMinerBase
placement:
mode: SnapgridCenter
components:
- type: Clickable
- type: InteractionOutline
- type: Physics
- type: SnapGrid
- type: Damageable
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 100
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- type: Sprite
netsync: false
sprite: Constructible/Atmos/miners.rsi
state: miner
- type: AtmosDevice
- type: GasMiner
- type: entity
name: O2 gas miner
parent: GasMinerBase
id: GasMinerOxygen
placement:
mode: SnapgridCenter
components:
- type: GasMiner
spawnGas: Oxygen
- type: entity
name: N2 gas miner
parent: GasMinerBase
id: GasMinerNitrogen
placement:
mode: SnapgridCenter
components:
- type: GasMiner
spawnGas: Nitrogen
- type: entity
name: CO2 gas miner
parent: GasMinerBase
id: GasMinerCarbonDioxide
placement:
mode: SnapgridCenter
components:
- type: GasMiner
spawnGas: CarbonDioxide
- type: entity
name: Plasma gas miner
parent: GasMinerBase
id: GasMinerPlasma
placement:
mode: SnapgridCenter
components:
- type: GasMiner
spawnGas: Plasma
- type: entity
name: Tritium gas miner
parent: GasMinerBase
id: GasMinerTritium
placement:
mode: SnapgridCenter
components:
- type: GasMiner
spawnGas: Tritium
- type: entity
name: Water Vapor gas miner
parent: GasMinerBase
id: GasMinerWaterVapor
placement:
mode: SnapgridCenter
components:
- type: GasMiner
spawnGas: WaterVapor

View File

@@ -1,6 +1,6 @@
- type: entity
abstract: true
id: PipeBase
id: GasPipeBase
name: pipe
description: Holds gas.
placement:
@@ -11,6 +11,9 @@
- type: Physics
- type: SnapGrid
- type: Damageable
- type: Anchorable
- type: Rotatable
- type: Pullable
- type: Destructible
thresholds:
- trigger:
@@ -20,19 +23,20 @@
- !type:DoActsBehavior
acts: ["Destruction"]
- type: Sprite
sprite: Constructible/Atmos/pipe.rsi
drawdepth: BelowFloor
netsync: false
- type: Appearance
visuals:
- type: PipeVisualizer
- type: PipeConnectorVisualizer
- type: Icon
sprite: Constructible/Atmos/pipe.rsi
- type: NodeContainer
- type: AtmosUnsafeUnanchor
#Note: The PipeDirection of the PipeNode should be the south-facing version, because the entity starts at an angle of 0 (east)
#Note: The PipeDirection of the PipeNode should be the south-facing version, because the entity starts at an angle of 0 (south)
- type: entity
parent: PipeBase
id: PipeHalf
parent: GasPipeBase
id: GasPipeHalf
suffix: Half
components:
- type: NodeContainer
@@ -41,12 +45,12 @@
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: South
- type: Icon
- type: Sprite
state: pipeHalf
- type: entity
parent: PipeBase
id: PipeStraight
parent: GasPipeBase
id: GasPipeStraight
suffix: Straight
components:
- type: NodeContainer
@@ -55,12 +59,12 @@
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: Longitudinal
- type: Icon
- type: Sprite
state: pipeStraight
- type: entity
parent: PipeBase
id: PipeBend
parent: GasPipeBase
id: GasPipeBend
suffix: Bend
components:
- type: NodeContainer
@@ -69,12 +73,12 @@
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: SWBend
- type: Icon
- type: Sprite
state: pipeBend
- type: entity
parent: PipeBase
id: PipeTJunction
parent: GasPipeBase
id: GasPipeTJunction
suffix: TJunction
components:
- type: NodeContainer
@@ -83,12 +87,12 @@
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: TSouth
- type: Icon
- type: Sprite
state: pipeTJunction
- type: entity
parent: PipeBase
id: PipeFourway
parent: GasPipeBase
id: GasPipeFourway
suffix: Fourway
components:
- type: NodeContainer
@@ -97,5 +101,5 @@
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: Fourway
- type: Icon
- type: Sprite
state: pipeFourway

View File

@@ -1,52 +0,0 @@
- type: entity
abstract: true
id: PumpBase
placement:
mode: SnapgridCenter
components:
- type: Clickable
- type: InteractionOutline
- type: Physics
- type: SnapGrid
- type: Damageable
resistances: metallicResistances
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 100
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- type: Sprite
netsync: false
sprite: Constructible/Atmos/pump.rsi
layers:
- sprite: Constructible/Atmos/pipe.rsi
state: pipeStraight
- state: pumpPressure
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: PumpVisualizer
- type: PipeNetDevice
- type: entity
parent: PumpBase
id: DebugPressurePump
name: pressure pump
suffix: DEBUG
components:
- type: NodeContainer
nodes:
inlet:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: North
outlet:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: South
- type: PressurePump
initialInletDirection: North
initialOutletDirection: South

View File

@@ -1,47 +0,0 @@
- type: entity
abstract: true
id: ScrubberBase
placement:
mode: SnapgridCenter
components:
- type: Clickable
- type: InteractionOutline
- type: Physics
- type: SnapGrid
- type: Damageable
resistances: metallicResistances
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 100
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- type: Sprite
netsync: false
sprite: Constructible/Atmos/scrubber.rsi
layers:
- sprite: Constructible/Atmos/pipe.rsi
state: pipeHalf
- state: scrubOff
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: SiphonVisualizer
- type: PipeNetDevice
- type: entity
parent: ScrubberBase
id: Scrubber
name: scrubber
description: Scrubs unwanted gasses out of the air.
components:
- type: NodeContainer
nodes:
pipe:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: South
- type: PressureSiphon
scrubberOutletDirection: South

View File

@@ -0,0 +1,66 @@
- type: entity
parent: GasPipeBase
abstract: true
id: GasTrinaryBase
placement:
mode: SnapgridCenter
components:
- type: AtmosDevice
- type: NodeContainer
nodes:
inlet:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: North
filter:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: East
outlet:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: South
- type: entity
parent: GasTrinaryBase
id: GasFilter
name: gas filter
description: Very useful for filtering gases.
placement:
mode: SnapgridCenter
components:
# TODO ATMOS Improve this sprite and appearance...
- type: Sprite
netsync: false
sprite: Constructible/Atmos/gasfilter.rsi
layers:
- sprite: Constructible/Atmos/pipe.rsi
state: pipeTJunction
- state: gasFilter
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: GasFilter
- type: entity
parent: GasTrinaryBase
id: GasMixer
name: gas mixer
description: Very useful for mixing gases.
placement:
mode: SnapgridCenter
components:
# TODO ATMOS Give this its actual sprite...
- type: Sprite
netsync: false
sprite: Constructible/Atmos/gasfilter.rsi
layers:
- sprite: Constructible/Atmos/pipe.rsi
state: pipeTJunction
- state: gasFilter
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: GasMixer
inletOne: inlet
inletTwo: filter

View File

@@ -0,0 +1,152 @@
- type: entity
parent: GasPipeBase
abstract: true
id: GasUnaryBase
placement:
mode: SnapgridCenter
components:
- type: AtmosDevice
- type: NodeContainer
nodes:
pipe:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: South
- type: entity
parent: GasUnaryBase
id: GasVentPump
name: air vent
description: Has a valve and a pump attached to it.
placement:
mode: SnapgridCenter
components:
- type: Sprite
netsync: false
sprite: Constructible/Atmos/vent.rsi
layers:
- sprite: Constructible/Atmos/pipe.rsi
state: pipeHalf
- state: vent_off
map: ["enum.VentVisualLayers.Vent"]
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: VentPumpVisualizer
- type: GasVentPump
- type: entity
parent: GasUnaryBase
id: GasPassiveVent
name: passive vent
description: It is an open vent.
placement:
mode: SnapgridCenter
components:
# TODO ATMOS: Find sprite for this.
- type: Sprite
netsync: false
sprite: Constructible/Atmos/vent.rsi
layers:
- sprite: Constructible/Atmos/pipe.rsi
state: pipeHalf
- state: vent_off
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: GasPassiveVent
- type: entity
parent: GasUnaryBase
id: GasVentScrubber
name: air scrubber
description: Has a valve and pump attached to it.
placement:
mode: SnapgridCenter
components:
- type: Sprite
netsync: false
sprite: Constructible/Atmos/scrubber.rsi
layers:
- sprite: Constructible/Atmos/pipe.rsi
state: pipeHalf
- state: scrub_off
map: ["enum.ScrubberVisualLayers.Scrubber"]
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: ScrubberVisualizer
- type: AtmosDevice
- type: GasVentScrubber
- type: entity
parent: GasUnaryBase
id: GasOutletInjector
name: air injector
description: Has a valve and pump attached to it.
placement:
mode: SnapgridCenter
components:
- type: GasOutletInjector
# TODO ATMOS: Actual sprite for this.
- type: Sprite
netsync: false
sprite: Constructible/Atmos/pipe.rsi
state: pipeHalf
- type: entity
parent: GasUnaryBase
id: GasThermoMachineBase
name: thermomachine
description: Heats or cools gas in connected pipes.
abstract: true
placement:
mode: SnapgridCenter
components:
- type: Sprite
netsync: false
sprite: Constructible/Atmos/thermomachine.rsi
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: GasThermoMachine
- type: entity
parent: GasThermoMachineBase
id: GasThermoMachineFreezer
name: freezer
placement:
mode: SnapgridCenter
components:
- type: Sprite
layers:
- state: freezer_off
- state: pipe
- type: Appearance
visuals:
- type: ThermoMachineVisualizer
enabledState: freezer_on
- type: GasThermoMachine
mode: Freezer
minTemperature: 73.15
- type: entity
parent: GasThermoMachineBase
id: GasThermoMachineHeater
name: heater
placement:
mode: SnapgridCenter
components:
- type: Sprite
layers:
- state: heater_off
- state: pipe
- type: Appearance
visuals:
- type: ThermoMachineVisualizer
enabledState: heater_on
- type: GasThermoMachine
mode: Heater
maxTemperature: 573.15 # This is changed when parts are refreshed.

View File

@@ -1,47 +0,0 @@
- type: entity
abstract: true
id: VentBase
placement:
mode: SnapgridCenter
components:
- type: Clickable
- type: InteractionOutline
- type: Physics
- type: SnapGrid
- type: Damageable
resistances: metallicResistances
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 100
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- type: Sprite
netsync: false
sprite: Constructible/Atmos/vent.rsi
layers:
- sprite: Constructible/Atmos/pipe.rsi
state: pipeHalf
- state: ventOff
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: VentVisualizer
- type: PipeNetDevice
- type: entity
parent: VentBase
id: Vent
name: vent
description: A vent that releases gas.
components:
- type: NodeContainer
nodes:
pipe:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: South
- type: PressureVent
ventInletDirection: South

View File

@@ -13,6 +13,15 @@
- type: Clothing
sprite: Objects/Tanks/generic.rsi
QuickEquip: false
- type: NodeContainer
nodes:
tank:
!type:PipeNode
nodeGroupID: Pipe
pipeDirection: None
connectionsEnabled: false
needAnchored: false
rotationsEnabled: false
- type: GasTank
- type: ItemActions
actions: