From 43f35828d4690f629b40fe05a783a5f342c1cee8 Mon Sep 17 00:00:00 2001 From: metalgearsloth Date: Fri, 30 Aug 2024 23:09:11 +1000 Subject: [PATCH 1/6] weh --- .../EntitySystems/EventHorizonSystem.cs | 6 ++++- .../EntitySystems/GravityWellSystem.cs | 24 +++++++++++++++---- Content.Shared/Physics/CollisionGroup.cs | 4 ++++ .../Entities/Mobs/Player/narsie.yml | 8 ++----- .../Entities/Mobs/Player/observer.yml | 2 +- .../Entities/Mobs/Player/ratvar.yml | 8 ++----- .../Generation/Singularity/singularity.yml | 8 ++----- 7 files changed, 35 insertions(+), 25 deletions(-) diff --git a/Content.Server/Singularity/EntitySystems/EventHorizonSystem.cs b/Content.Server/Singularity/EntitySystems/EventHorizonSystem.cs index 6e3d9e925166..e1637dc29896 100644 --- a/Content.Server/Singularity/EntitySystems/EventHorizonSystem.cs +++ b/Content.Server/Singularity/EntitySystems/EventHorizonSystem.cs @@ -12,6 +12,7 @@ using Robust.Shared.Map; using Robust.Shared.Map.Components; using Robust.Shared.Physics.Events; +using Robust.Shared.Physics.Systems; using Robust.Shared.Timing; namespace Content.Server.Singularity.EntitySystems; @@ -28,6 +29,7 @@ public sealed class EventHorizonSystem : SharedEventHorizonSystem [Dependency] private readonly IMapManager _mapMan = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly SharedContainerSystem _containerSystem = default!; + [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly SharedTransformSystem _xformSystem = default!; [Dependency] private readonly TagSystem _tagSystem = default!; #endregion Dependencies @@ -37,7 +39,6 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(PreventConsume); - SubscribeLocalEvent(PreventConsume); SubscribeLocalEvent(PreventConsume); SubscribeLocalEvent(OnHorizonMapInit); SubscribeLocalEvent(OnStartCollide); @@ -150,6 +151,9 @@ public bool AttemptConsumeEntity(EntityUid hungry, EntityUid morsel, EventHorizo /// public bool CanConsumeEntity(EntityUid hungry, EntityUid uid, EventHorizonComponent eventHorizon) { + if (!_physics.IsHardCollidable(hungry, uid)) + return false; + var ev = new EventHorizonAttemptConsumeEntityEvent(uid, hungry, eventHorizon); RaiseLocalEvent(uid, ref ev); return !ev.Cancelled; diff --git a/Content.Server/Singularity/EntitySystems/GravityWellSystem.cs b/Content.Server/Singularity/EntitySystems/GravityWellSystem.cs index 8c884d023c41..7dcf3ef1ae5a 100644 --- a/Content.Server/Singularity/EntitySystems/GravityWellSystem.cs +++ b/Content.Server/Singularity/EntitySystems/GravityWellSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Singularity.Components; using Content.Shared.Atmos.Components; using Content.Shared.Ghost; +using Content.Shared.Physics; using Content.Shared.Singularity.EntitySystems; using Robust.Shared.Map; using Robust.Shared.Map.Components; @@ -33,9 +34,18 @@ public sealed class GravityWellSystem : SharedGravityWellSystem /// public const float MinGravPulseRange = 0.00001f; + private EntityQuery _wellQuery; + private EntityQuery _mapQuery; + private EntityQuery _gridQuery; + private EntityQuery _physicsQuery; + public override void Initialize() { base.Initialize(); + _wellQuery = GetEntityQuery(); + _mapQuery = GetEntityQuery(); + _gridQuery = GetEntityQuery(); + _physicsQuery = GetEntityQuery(); SubscribeLocalEvent(OnGravityWellStartup); var vvHandle = _vvManager.GetTypeHandler(); @@ -111,11 +121,15 @@ private void Update(EntityUid uid, TimeSpan frameTime, GravityWellComponent? gra /// The entity to check. private bool CanGravPulseAffect(EntityUid entity) { - return !( - EntityManager.HasComponent(entity) || - EntityManager.HasComponent(entity) || - EntityManager.HasComponent(entity) || - EntityManager.HasComponent(entity) + if (_physicsQuery.TryComp(entity, out var physics)) + { + if (physics.CollisionLayer == (int) CollisionGroup.GhostImpassable) + return false; + } + + return !(_gridQuery.HasComp(entity) || + _mapQuery.HasComp(entity) || + _wellQuery.HasComp(entity) ); } diff --git a/Content.Shared/Physics/CollisionGroup.cs b/Content.Shared/Physics/CollisionGroup.cs index 9f8c5ad9befb..0a11f93dbc81 100644 --- a/Content.Shared/Physics/CollisionGroup.cs +++ b/Content.Shared/Physics/CollisionGroup.cs @@ -22,13 +22,17 @@ public enum CollisionGroup GhostImpassable = 1 << 5, // 32 Things impassible by ghosts/observers, ie blessed tiles or forcefields BulletImpassable = 1 << 6, // 64 Can be hit by bullets InteractImpassable = 1 << 7, // 128 Blocks interaction/InRangeUnobstructed + // Y dis door passable when all the others impassable / collision. DoorPassable = 1 << 8, // 256 Allows door to close over top, Like blast doors over conveyors for disposals rooms/cargo. MapGrid = MapGridHelpers.CollisionGroup, // Map grids, like shuttles. This is the actual grid itself, not the walls or other entities connected to the grid. // 32 possible groups + // Why dis exist AllMask = -1, + SingularityLayer = Opaque | Impassable | MidImpassable | HighImpassable | LowImpassable | BulletImpassable | InteractImpassable | DoorPassable, + // Humanoids, etc. MobMask = Impassable | HighImpassable | MidImpassable | LowImpassable, MobLayer = Opaque | BulletImpassable, diff --git a/Resources/Prototypes/Entities/Mobs/Player/narsie.yml b/Resources/Prototypes/Entities/Mobs/Player/narsie.yml index 7030572cf472..a5972b5807b1 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/narsie.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/narsie.yml @@ -51,19 +51,15 @@ hard: false restitution: 0.8 density: 99999 - mask: - - AllMask layer: - - AllMask + - SingularityLayer EventHorizonConsumer: shape: !type:PhysShapeCircle radius: 5 hard: false - mask: - - AllMask layer: - - AllMask + - SingularityLayer - type: Input context: "ghost" - type: MovementIgnoreGravity diff --git a/Resources/Prototypes/Entities/Mobs/Player/observer.yml b/Resources/Prototypes/Entities/Mobs/Player/observer.yml index 52994a72c659..5ceac9e773e0 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/observer.yml @@ -24,7 +24,7 @@ !type:PhysShapeCircle radius: 0.35 density: 15 - mask: + layer: - GhostImpassable - type: entity diff --git a/Resources/Prototypes/Entities/Mobs/Player/ratvar.yml b/Resources/Prototypes/Entities/Mobs/Player/ratvar.yml index 958c98f483e2..2ef19fb008be 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/ratvar.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/ratvar.yml @@ -48,19 +48,15 @@ hard: false restitution: 0.8 density: 1 - mask: - - AllMask layer: - - AllMask + - SingularityLayer EventHorizonConsumer: shape: !type:PhysShapeCircle radius: 5 hard: false - mask: - - AllMask layer: - - AllMask + - SingularityLayer - type: Input context: "ghost" - type: MovementIgnoreGravity diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/singularity.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/singularity.yml index 25d219ab9459..8f18ebce1547 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/singularity.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/singularity.yml @@ -30,19 +30,15 @@ hard: true restitution: 0.8 density: 99999 - mask: - - AllMask layer: - - AllMask + - SingularityLayer EventHorizonConsumer: shape: !type:PhysShapeCircle radius: 0.35 hard: false - mask: - - AllMask layer: - - AllMask + - SingularityLayer - type: Singularity energy: 180 level: 1 From 60781bd9fb89909573a1c87c9fd9f29801a3028e Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Fri, 30 Aug 2024 17:17:32 +0200 Subject: [PATCH 2/6] Fix broken tests directly mutating entities from wrong thread. --- .../Tests/Actions/ActionPvsDetachTest.cs | 22 ++++++++++++------- .../Tests/Buckle/BuckleDragTest.cs | 6 ++++- Content.IntegrationTests/Tests/CargoTest.cs | 13 ++++++----- .../Tests/Commands/SuicideCommandTests.cs | 7 ++++-- .../Tests/Shuttle/DockTest.cs | 6 ++++- 5 files changed, 37 insertions(+), 17 deletions(-) diff --git a/Content.IntegrationTests/Tests/Actions/ActionPvsDetachTest.cs b/Content.IntegrationTests/Tests/Actions/ActionPvsDetachTest.cs index 420a90a50bd8..45addff00bf5 100644 --- a/Content.IntegrationTests/Tests/Actions/ActionPvsDetachTest.cs +++ b/Content.IntegrationTests/Tests/Actions/ActionPvsDetachTest.cs @@ -32,11 +32,14 @@ public async Task TestActionDetach() // PVS-detach action entities // We do this by just giving them the ghost layer var visSys = server.System(); - var enumerator = server.Transform(ent).ChildEnumerator; - while (enumerator.MoveNext(out var child)) + server.Post(() => { - visSys.AddLayer(child, (int) VisibilityFlags.Ghost); - } + var enumerator = server.Transform(ent).ChildEnumerator; + while (enumerator.MoveNext(out var child)) + { + visSys.AddLayer(child, (int) VisibilityFlags.Ghost); + } + }); await pair.RunTicksSync(5); // Client's actions have left been detached / are out of view, but action comp state has not changed @@ -44,11 +47,14 @@ public async Task TestActionDetach() Assert.That(cSys.GetActions(cEnt).Count(), Is.EqualTo(initActions)); // Re-enter PVS view - enumerator = server.Transform(ent).ChildEnumerator; - while (enumerator.MoveNext(out var child)) + server.Post(() => { - visSys.RemoveLayer(child, (int) VisibilityFlags.Ghost); - } + var enumerator = server.Transform(ent).ChildEnumerator; + while (enumerator.MoveNext(out var child)) + { + visSys.RemoveLayer(child, (int) VisibilityFlags.Ghost); + } + }); await pair.RunTicksSync(5); Assert.That(sys.GetActions(ent).Count(), Is.EqualTo(initActions)); Assert.That(cSys.GetActions(cEnt).Count(), Is.EqualTo(initActions)); diff --git a/Content.IntegrationTests/Tests/Buckle/BuckleDragTest.cs b/Content.IntegrationTests/Tests/Buckle/BuckleDragTest.cs index 82d5d3baa04c..19e8aba1824e 100644 --- a/Content.IntegrationTests/Tests/Buckle/BuckleDragTest.cs +++ b/Content.IntegrationTests/Tests/Buckle/BuckleDragTest.cs @@ -34,7 +34,11 @@ public async Task BucklePullTest() Assert.That(pullable.BeingPulled, Is.False); // Strap the human to the chair - Assert.That(Server.System().TryBuckle(sUrist, SPlayer, STarget.Value)); + await Server.WaitAssertion(() => + { + Assert.That(Server.System().TryBuckle(sUrist, SPlayer, STarget.Value)); + }); + await RunTicks(5); Assert.That(buckle.Buckled, Is.True); Assert.That(buckle.BuckledTo, Is.EqualTo(STarget)); diff --git a/Content.IntegrationTests/Tests/CargoTest.cs b/Content.IntegrationTests/Tests/CargoTest.cs index 89018d9d17c6..37fd3a80f9a4 100644 --- a/Content.IntegrationTests/Tests/CargoTest.cs +++ b/Content.IntegrationTests/Tests/CargoTest.cs @@ -253,13 +253,16 @@ public async Task StackPrice() { await using var pair = await PoolManager.GetServerClient(); var server = pair.Server; - var entManager = server.ResolveDependency(); - var priceSystem = entManager.System(); - var ent = entManager.SpawnEntity("StackEnt", MapCoordinates.Nullspace); - var price = priceSystem.GetPrice(ent); - Assert.That(price, Is.EqualTo(100.0)); + await server.WaitAssertion(() => + { + var priceSystem = entManager.System(); + + var ent = entManager.SpawnEntity("StackEnt", MapCoordinates.Nullspace); + var price = priceSystem.GetPrice(ent); + Assert.That(price, Is.EqualTo(100.0)); + }); await pair.CleanReturnAsync(); } diff --git a/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs b/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs index 540e86c650af..2a9e0c90a72f 100644 --- a/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs +++ b/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs @@ -145,8 +145,11 @@ await server.WaitPost(() => damageableComp = entManager.GetComponent(player); }); - if (protoMan.TryIndex("Slash", out var slashProto)) - damageableSystem.TryChangeDamage(player, new DamageSpecifier(slashProto, FixedPoint2.New(46.5))); + server.Post(() => + { + if (protoMan.TryIndex("Slash", out var slashProto)) + damageableSystem.TryChangeDamage(player, new DamageSpecifier(slashProto, FixedPoint2.New(46.5))); + }); // Check that running the suicide command kills the player // and properly ghosts them without them being able to return to their body diff --git a/Content.IntegrationTests/Tests/Shuttle/DockTest.cs b/Content.IntegrationTests/Tests/Shuttle/DockTest.cs index a1aa462a6973..a4f038ae30e6 100644 --- a/Content.IntegrationTests/Tests/Shuttle/DockTest.cs +++ b/Content.IntegrationTests/Tests/Shuttle/DockTest.cs @@ -98,7 +98,11 @@ public async Task TestPlanetDock() var dockingSystem = entManager.System(); var mapSystem = entManager.System(); - var mapGrid = entManager.AddComponent(map.MapUid); + MapGridComponent mapGrid = default; + server.Post(() => + { + mapGrid = entManager.AddComponent(map.MapUid); + }); var shuttle = EntityUid.Invalid; // Spawn shuttle and affirm no valid docks. From 9bbcbc8dc403ce4274c1a656f09420f0ede5f0b6 Mon Sep 17 00:00:00 2001 From: metalgearsloth Date: Sat, 31 Aug 2024 14:51:44 +1000 Subject: [PATCH 3/6] fix build --- Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs b/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs index b07124d0cd59..e1eef2be4a9d 100644 --- a/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs +++ b/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs @@ -144,8 +144,6 @@ await server.WaitPost(() => mobThresholdsComp = entManager.GetComponent(player); damageableComp = entManager.GetComponent(player); - server.Post(() => - { if (protoMan.TryIndex("Slash", out var slashProto)) damageableSystem.TryChangeDamage(player, new DamageSpecifier(slashProto, FixedPoint2.New(46.5))); }); From 47a8ee556bda932892f0cb07a4b2368653e951e9 Mon Sep 17 00:00:00 2001 From: metalgearsloth Date: Sat, 31 Aug 2024 14:56:41 +1000 Subject: [PATCH 4/6] gundam --- Content.IntegrationTests/Tests/Shuttle/DockTest.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Content.IntegrationTests/Tests/Shuttle/DockTest.cs b/Content.IntegrationTests/Tests/Shuttle/DockTest.cs index e9a074677b07..9443b5b5debb 100644 --- a/Content.IntegrationTests/Tests/Shuttle/DockTest.cs +++ b/Content.IntegrationTests/Tests/Shuttle/DockTest.cs @@ -99,7 +99,6 @@ public async Task TestPlanetDock() var mapSystem = entManager.System(); MapGridComponent mapGrid = default!; - MapGridComponent mapGrid = default; server.Post(() => { mapGrid = entManager.AddComponent(map.MapUid); From e5daca6dcf3f753fcf36db11a980c4e5a3dfc229 Mon Sep 17 00:00:00 2001 From: metalgearsloth Date: Sat, 31 Aug 2024 17:21:07 +1000 Subject: [PATCH 5/6] weher --- .../Tests/Shuttle/DockTest.cs | 4 --- .../EntitySystems/EventHorizonSystem.cs | 29 +++++++++---------- 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/Content.IntegrationTests/Tests/Shuttle/DockTest.cs b/Content.IntegrationTests/Tests/Shuttle/DockTest.cs index 9443b5b5debb..f6e99596e904 100644 --- a/Content.IntegrationTests/Tests/Shuttle/DockTest.cs +++ b/Content.IntegrationTests/Tests/Shuttle/DockTest.cs @@ -99,10 +99,6 @@ public async Task TestPlanetDock() var mapSystem = entManager.System(); MapGridComponent mapGrid = default!; - server.Post(() => - { - mapGrid = entManager.AddComponent(map.MapUid); - }); var shuttle = EntityUid.Invalid; // Spawn shuttle and affirm no valid docks. diff --git a/Content.Server/Singularity/EntitySystems/EventHorizonSystem.cs b/Content.Server/Singularity/EntitySystems/EventHorizonSystem.cs index e1637dc29896..3bf820535f0f 100644 --- a/Content.Server/Singularity/EntitySystems/EventHorizonSystem.cs +++ b/Content.Server/Singularity/EntitySystems/EventHorizonSystem.cs @@ -11,6 +11,7 @@ using Robust.Shared.Containers; using Robust.Shared.Map; using Robust.Shared.Map.Components; +using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Events; using Robust.Shared.Physics.Systems; using Robust.Shared.Timing; @@ -34,10 +35,14 @@ public sealed class EventHorizonSystem : SharedEventHorizonSystem [Dependency] private readonly TagSystem _tagSystem = default!; #endregion Dependencies + private EntityQuery _physicsQuery; + public override void Initialize() { base.Initialize(); + _physicsQuery = GetEntityQuery(); + SubscribeLocalEvent(PreventConsume); SubscribeLocalEvent(PreventConsume); SubscribeLocalEvent(OnHorizonMapInit); @@ -151,9 +156,6 @@ public bool AttemptConsumeEntity(EntityUid hungry, EntityUid morsel, EventHorizo /// public bool CanConsumeEntity(EntityUid hungry, EntityUid uid, EventHorizonComponent eventHorizon) { - if (!_physics.IsHardCollidable(hungry, uid)) - return false; - var ev = new EventHorizonAttemptConsumeEntityEvent(uid, hungry, eventHorizon); RaiseLocalEvent(uid, ref ev); return !ev.Cancelled; @@ -163,24 +165,19 @@ public bool CanConsumeEntity(EntityUid hungry, EntityUid uid, EventHorizonCompon /// Attempts to consume all entities within a given distance of an entity; /// Excludes the center entity. /// - public void ConsumeEntitiesInRange(EntityUid uid, float range, TransformComponent? xform = null, EventHorizonComponent? eventHorizon = null) + public void ConsumeEntitiesInRange(EntityUid uid, float range, PhysicsComponent? body = null, EventHorizonComponent? eventHorizon = null) { - if (!Resolve(uid, ref xform, ref eventHorizon)) + if (!Resolve(uid, ref body, ref eventHorizon)) return; - var range2 = range * range; - var xformQuery = EntityManager.GetEntityQuery(); - var epicenter = _xformSystem.GetWorldPosition(xform, xformQuery); - foreach (var entity in _lookup.GetEntitiesInRange(_xformSystem.GetMapCoordinates(uid, xform), range, flags: LookupFlags.Uncontained)) + // TODO: Should be sundries + static-sundries but apparently this is load-bearing for SpawnAndDeleteAllEntitiesInTheSameSpot so go figure. + foreach (var entity in _lookup.GetEntitiesInRange(uid, range, flags: LookupFlags.Uncontained)) { if (entity == uid) continue; - if (!xformQuery.TryGetComponent(entity, out var entityXform)) - continue; - // GetEntitiesInRange gets everything in a _square_ centered on the given position, but we are a _circle_. If we don't have this check and the station is rotated it is possible for the singularity to reach _outside of the containment field_ and eat the emitters. - var displacement = _xformSystem.GetWorldPosition(entityXform, xformQuery) - epicenter; - if (displacement.LengthSquared() > range2) + // See TODO above + if (_physicsQuery.TryComp(entity, out var otherBody) && !_physics.IsHardCollidable((uid, null, body), (entity, null, otherBody))) continue; AttemptConsumeEntity(uid, entity, eventHorizon); @@ -322,11 +319,11 @@ public void ConsumeTilesInRange(EntityUid uid, float range, TransformComponent? /// public void ConsumeEverythingInRange(EntityUid uid, float range, TransformComponent? xform = null, EventHorizonComponent? eventHorizon = null) { - if (!Resolve(uid, ref xform, ref eventHorizon)) + if (!Resolve(uid, ref eventHorizon)) return; if (eventHorizon.ConsumeEntities) - ConsumeEntitiesInRange(uid, range, xform, eventHorizon); + ConsumeEntitiesInRange(uid, range, null, eventHorizon); if (eventHorizon.ConsumeTiles) ConsumeTilesInRange(uid, range, xform, eventHorizon); } From d8ae7566fdf2677f164a5893672cd0dc48614616 Mon Sep 17 00:00:00 2001 From: metalgearsloth Date: Sat, 31 Aug 2024 17:48:10 +1000 Subject: [PATCH 6/6] WHY --- Resources/Prototypes/Entities/Mobs/Player/narsie.yml | 4 ++++ Resources/Prototypes/Entities/Mobs/Player/ratvar.yml | 4 ++++ .../Structures/Power/Generation/Singularity/singularity.yml | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/Resources/Prototypes/Entities/Mobs/Player/narsie.yml b/Resources/Prototypes/Entities/Mobs/Player/narsie.yml index a5972b5807b1..5d07409b5f81 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/narsie.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/narsie.yml @@ -51,6 +51,8 @@ hard: false restitution: 0.8 density: 99999 + mask: + - SingularityLayer layer: - SingularityLayer EventHorizonConsumer: @@ -58,6 +60,8 @@ !type:PhysShapeCircle radius: 5 hard: false + mask: + - SingularityLayer layer: - SingularityLayer - type: Input diff --git a/Resources/Prototypes/Entities/Mobs/Player/ratvar.yml b/Resources/Prototypes/Entities/Mobs/Player/ratvar.yml index 2ef19fb008be..530f5e10374c 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/ratvar.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/ratvar.yml @@ -48,6 +48,8 @@ hard: false restitution: 0.8 density: 1 + mask: + - SingularityLayer layer: - SingularityLayer EventHorizonConsumer: @@ -55,6 +57,8 @@ !type:PhysShapeCircle radius: 5 hard: false + mask: + - SingularityLayer layer: - SingularityLayer - type: Input diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/singularity.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/singularity.yml index 8f18ebce1547..bf2c6cfcc0c9 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/singularity.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/singularity.yml @@ -30,6 +30,8 @@ hard: true restitution: 0.8 density: 99999 + mask: + - SingularityLayer layer: - SingularityLayer EventHorizonConsumer: @@ -37,6 +39,8 @@ !type:PhysShapeCircle radius: 0.35 hard: false + mask: + - SingularityLayer layer: - SingularityLayer - type: Singularity