Make canisters dump their contents on destruction. (#5177)

* Make canisters dump their contents on destruction.

* Address reviews
This commit is contained in:
moonheart08
2021-11-05 19:19:12 -05:00
committed by GitHub
parent 45ba69f1da
commit b889aff307
3 changed files with 38 additions and 0 deletions

View File

@@ -3,6 +3,7 @@ using Content.Server.Atmos.Components;
using Content.Server.Atmos.EntitySystems;
using Content.Server.Atmos.Piping.Components;
using Content.Server.Atmos.Piping.Unary.Components;
using Content.Server.Destructible;
using Content.Server.Hands.Components;
using Content.Server.NodeContainer;
using Content.Server.NodeContainer.NodeGroups;
@@ -44,6 +45,22 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
SubscribeLocalEvent<GasCanisterComponent, GasCanisterHoldingTankEjectMessage>(OnHoldingTankEjectMessage);
SubscribeLocalEvent<GasCanisterComponent, GasCanisterChangeReleasePressureMessage>(OnCanisterChangeReleasePressure);
SubscribeLocalEvent<GasCanisterComponent, GasCanisterChangeReleaseValveMessage>(OnCanisterChangeReleaseValve);
}
/// <summary>
/// Completely dumps the content of the canister into the world.
/// </summary>
public void PurgeContents(EntityUid uid, GasCanisterComponent? canister = null, ITransformComponent? transform = null)
{
if (!Resolve(uid, ref canister, ref transform)) return;
var environment = _atmosphereSystem.GetTileMixture(transform.Coordinates, true);
if (environment is not null)
_atmosphereSystem.Merge(environment, canister.Air);
canister.Air.Clear();
}
private void OnCanisterStartup(EntityUid uid, GasCanisterComponent canister, ComponentStartup args)

View File

@@ -0,0 +1,20 @@
using System;
using Content.Server.Atmos.Piping.Unary.Components;
using Content.Server.Atmos.Piping.Unary.EntitySystems;
using Robust.Shared.GameObjects;
using Robust.Shared.Serialization.Manager.Attributes;
namespace Content.Server.Destructible.Thresholds.Behaviors
{
[Serializable]
[DataDefinition]
public class DumpCanisterBehavior: IThresholdBehavior
{
public void Execute(IEntity owner, DestructibleSystem system)
{
var gasCanisterSystem = EntitySystem.Get<GasCanisterSystem>();
gasCanisterSystem.PurgeContents(owner.Uid);
}
}
}

View File

@@ -267,6 +267,7 @@
max: 1
- !type:DoActsBehavior
acts: [ "Destruction" ]
- !type:DumpCanisterBehavior
- type: entity
parent: GasCanister