make explosions affect containers (#21625)

Co-authored-by: deltanedas <@deltanedas:kde.org>
This commit is contained in:
deltanedas
2023-11-13 22:57:52 +00:00
committed by GitHub
parent 91a2479b66
commit c9f2bf6fb7
2 changed files with 16 additions and 0 deletions

View File

@@ -406,6 +406,19 @@ public sealed partial class ExplosionSystem
_damageableSystem.TryChangeDamage(uid, damage, ignoreResistances: true, damageable: damageable); _damageableSystem.TryChangeDamage(uid, damage, ignoreResistances: true, damageable: damageable);
} }
// if it's a container, try to damage all its contents
if (_containersQuery.TryGetComponent(uid, out var containers))
{
foreach (var container in containers.Containers.Values)
{
foreach (var ent in container.ContainedEntities)
{
// setting throw force to 0 to prevent offset items inside containers
ProcessEntity(ent, epicenter, damage, 0f, id, _transformQuery.GetComponent(uid));
}
}
}
// throw // throw
if (xform != null // null implies anchored if (xform != null // null implies anchored
&& !xform.Anchored && !xform.Anchored

View File

@@ -21,6 +21,7 @@ using Robust.Server.GameStates;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Audio; using Robust.Shared.Audio;
using Robust.Shared.Configuration; using Robust.Shared.Configuration;
using Robust.Shared.Containers;
using Robust.Shared.Map; using Robust.Shared.Map;
using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Components;
using Robust.Shared.Player; using Robust.Shared.Player;
@@ -51,6 +52,7 @@ public sealed partial class ExplosionSystem : EntitySystem
[Dependency] private readonly SharedTransformSystem _transformSystem = default!; [Dependency] private readonly SharedTransformSystem _transformSystem = default!;
private EntityQuery<TransformComponent> _transformQuery; private EntityQuery<TransformComponent> _transformQuery;
private EntityQuery<ContainerManagerComponent> _containersQuery;
private EntityQuery<DamageableComponent> _damageQuery; private EntityQuery<DamageableComponent> _damageQuery;
private EntityQuery<PhysicsComponent> _physicsQuery; private EntityQuery<PhysicsComponent> _physicsQuery;
private EntityQuery<ProjectileComponent> _projectileQuery; private EntityQuery<ProjectileComponent> _projectileQuery;
@@ -104,6 +106,7 @@ public sealed partial class ExplosionSystem : EntitySystem
InitVisuals(); InitVisuals();
_transformQuery = GetEntityQuery<TransformComponent>(); _transformQuery = GetEntityQuery<TransformComponent>();
_containersQuery = GetEntityQuery<ContainerManagerComponent>();
_damageQuery = GetEntityQuery<DamageableComponent>(); _damageQuery = GetEntityQuery<DamageableComponent>();
_physicsQuery = GetEntityQuery<PhysicsComponent>(); _physicsQuery = GetEntityQuery<PhysicsComponent>();
_projectileQuery = GetEntityQuery<ProjectileComponent>(); _projectileQuery = GetEntityQuery<ProjectileComponent>();