Add Destructible SpawnGasBehavior (#18965)
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Content.Server.Administration.Logs;
|
using Content.Server.Administration.Logs;
|
||||||
|
using Content.Server.Atmos.EntitySystems;
|
||||||
using Content.Server.Body.Systems;
|
using Content.Server.Body.Systems;
|
||||||
using Content.Server.Chemistry.EntitySystems;
|
using Content.Server.Chemistry.EntitySystems;
|
||||||
using Content.Server.Construction;
|
using Content.Server.Construction;
|
||||||
@@ -26,6 +27,7 @@ namespace Content.Server.Destructible
|
|||||||
[Dependency] public readonly IRobustRandom Random = default!;
|
[Dependency] public readonly IRobustRandom Random = default!;
|
||||||
public new IEntityManager EntityManager => base.EntityManager;
|
public new IEntityManager EntityManager => base.EntityManager;
|
||||||
|
|
||||||
|
[Dependency] public readonly AtmosphereSystem AtmosphereSystem = default!;
|
||||||
[Dependency] public readonly AudioSystem AudioSystem = default!;
|
[Dependency] public readonly AudioSystem AudioSystem = default!;
|
||||||
[Dependency] public readonly BodySystem BodySystem = default!;
|
[Dependency] public readonly BodySystem BodySystem = default!;
|
||||||
[Dependency] public readonly ConstructionSystem ConstructionSystem = default!;
|
[Dependency] public readonly ConstructionSystem ConstructionSystem = default!;
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
using Content.Server.Atmos;
|
||||||
|
using JetBrains.Annotations;
|
||||||
|
|
||||||
|
namespace Content.Server.Destructible.Thresholds.Behaviors;
|
||||||
|
|
||||||
|
[UsedImplicitly]
|
||||||
|
[DataDefinition]
|
||||||
|
public sealed class SpawnGasBehavior : IThresholdBehavior
|
||||||
|
{
|
||||||
|
[DataField("gasMixture", required: true)]
|
||||||
|
public GasMixture Gas = new();
|
||||||
|
|
||||||
|
public void Execute(EntityUid owner, DestructibleSystem system, EntityUid? cause = null)
|
||||||
|
{
|
||||||
|
var air = system.AtmosphereSystem.GetContainingMixture(owner, false, true);
|
||||||
|
|
||||||
|
if (air != null)
|
||||||
|
system.AtmosphereSystem.Merge(air, Gas);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -67,11 +67,19 @@
|
|||||||
sound:
|
sound:
|
||||||
path: /Audio/Effects/metalbreak.ogg
|
path: /Audio/Effects/metalbreak.ogg
|
||||||
- !type:ExplodeBehavior
|
- !type:ExplodeBehavior
|
||||||
- !type:SpawnEntitiesBehavior # in future should also emit a cloud of hot gas
|
- !type:SpawnEntitiesBehavior
|
||||||
spawn:
|
spawn:
|
||||||
MachineFrameDestroyed:
|
MachineFrameDestroyed:
|
||||||
min: 1
|
min: 1
|
||||||
max: 1
|
max: 1
|
||||||
|
- !type:SpawnGasBehavior
|
||||||
|
gasMixture:
|
||||||
|
volume: 1000
|
||||||
|
moles:
|
||||||
|
- 0 # oxygen
|
||||||
|
- 0 # nitrogen
|
||||||
|
- 340.5701689 # carbon dioxide
|
||||||
|
temperature: 373.15
|
||||||
- type: Explosive
|
- type: Explosive
|
||||||
explosionType: Default
|
explosionType: Default
|
||||||
maxIntensity: 100
|
maxIntensity: 100
|
||||||
|
|||||||
Reference in New Issue
Block a user