Make canisters dump their contents on destruction. (#5177)
* Make canisters dump their contents on destruction. * Address reviews
This commit is contained in:
@@ -3,6 +3,7 @@ using Content.Server.Atmos.Components;
|
|||||||
using Content.Server.Atmos.EntitySystems;
|
using Content.Server.Atmos.EntitySystems;
|
||||||
using Content.Server.Atmos.Piping.Components;
|
using Content.Server.Atmos.Piping.Components;
|
||||||
using Content.Server.Atmos.Piping.Unary.Components;
|
using Content.Server.Atmos.Piping.Unary.Components;
|
||||||
|
using Content.Server.Destructible;
|
||||||
using Content.Server.Hands.Components;
|
using Content.Server.Hands.Components;
|
||||||
using Content.Server.NodeContainer;
|
using Content.Server.NodeContainer;
|
||||||
using Content.Server.NodeContainer.NodeGroups;
|
using Content.Server.NodeContainer.NodeGroups;
|
||||||
@@ -44,6 +45,22 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
|
|||||||
SubscribeLocalEvent<GasCanisterComponent, GasCanisterHoldingTankEjectMessage>(OnHoldingTankEjectMessage);
|
SubscribeLocalEvent<GasCanisterComponent, GasCanisterHoldingTankEjectMessage>(OnHoldingTankEjectMessage);
|
||||||
SubscribeLocalEvent<GasCanisterComponent, GasCanisterChangeReleasePressureMessage>(OnCanisterChangeReleasePressure);
|
SubscribeLocalEvent<GasCanisterComponent, GasCanisterChangeReleasePressureMessage>(OnCanisterChangeReleasePressure);
|
||||||
SubscribeLocalEvent<GasCanisterComponent, GasCanisterChangeReleaseValveMessage>(OnCanisterChangeReleaseValve);
|
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)
|
private void OnCanisterStartup(EntityUid uid, GasCanisterComponent canister, ComponentStartup args)
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -267,6 +267,7 @@
|
|||||||
max: 1
|
max: 1
|
||||||
- !type:DoActsBehavior
|
- !type:DoActsBehavior
|
||||||
acts: [ "Destruction" ]
|
acts: [ "Destruction" ]
|
||||||
|
- !type:DumpCanisterBehavior
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: GasCanister
|
parent: GasCanister
|
||||||
|
|||||||
Reference in New Issue
Block a user