diff --git a/Robust.Shared/GameObjects/Systems/SharedMapSystem.Grid.cs b/Robust.Shared/GameObjects/Systems/SharedMapSystem.Grid.cs index aadb6a83e..9b221e472 100644 --- a/Robust.Shared/GameObjects/Systems/SharedMapSystem.Grid.cs +++ b/Robust.Shared/GameObjects/Systems/SharedMapSystem.Grid.cs @@ -1,5 +1,7 @@ using Robust.Shared.GameStates; using Robust.Shared.Map; +using Robust.Shared.Physics.Components; +using Robust.Shared.Physics.Systems; namespace Robust.Shared.GameObjects; diff --git a/Robust.Shared/Map/MapGrid.cs b/Robust.Shared/Map/MapGrid.cs index 8c454eb19..82b85bbc4 100644 --- a/Robust.Shared/Map/MapGrid.cs +++ b/Robust.Shared/Map/MapGrid.cs @@ -870,6 +870,7 @@ namespace Robust.Shared.Map return; // TODO: Move this to the component when we combine. + _entityManager.EntitySysManager.GetEntitySystem().WakeBody(GridEntityId); _mapManager.OnGridBoundsChange(GridEntityId, this); system?.RegenerateCollision(GridEntityId, chunkRectangles, removedChunks); } diff --git a/Robust.Shared/Physics/Systems/SharedPhysicsSystem.Components.cs b/Robust.Shared/Physics/Systems/SharedPhysicsSystem.Components.cs index f76438d32..ff20c0aef 100644 --- a/Robust.Shared/Physics/Systems/SharedPhysicsSystem.Components.cs +++ b/Robust.Shared/Physics/Systems/SharedPhysicsSystem.Components.cs @@ -355,7 +355,7 @@ public partial class SharedPhysicsSystem { if (body._awake == value) return; - + if (value && (body.BodyType == BodyType.Static || !body.CanCollide)) return; @@ -541,6 +541,15 @@ public partial class SharedPhysicsSystem body._sleepTime = value; } + public bool WakeBody(EntityUid uid, PhysicsComponent? body = null, FixturesComponent? manager = null, bool force = false) + { + if (!Resolve(uid, ref body, ref manager)) + return false; + + WakeBody(body, manager, force); + return body._awake; + } + /// /// Tries to enable the body and also set it awake. /// diff --git a/Robust.UnitTesting/Shared/Map/GridCollision_Test.cs b/Robust.UnitTesting/Shared/Map/GridCollision_Test.cs index 498babd56..e61dc3b20 100644 --- a/Robust.UnitTesting/Shared/Map/GridCollision_Test.cs +++ b/Robust.UnitTesting/Shared/Map/GridCollision_Test.cs @@ -31,8 +31,7 @@ namespace Robust.UnitTesting.Shared.Map EntityUid? gridEnt1; EntityUid? gridEnt2; - await server.WaitPost(() => - { + await server.WaitPost(() => { mapId = mapManager.CreateMap(); gridId1 = mapManager.CreateGrid(mapId); gridId2 = mapManager.CreateGrid(mapId); @@ -85,6 +84,9 @@ namespace Robust.UnitTesting.Shared.Map var contact = node.Value; node = node.Next; + if (!contact.IsTouching) + continue; + var bodyA = contact.FixtureA!.Body; var bodyB = contact.FixtureB!.Body;