Files
RobustToolbox/Robust.UnitTesting/Shared/Map/GridCollision_Test.cs
T
metalgearslothandGitHub d72185933a Add support for grid chunk removals (#1941)
* Add support for grid chunk removals

Also allows grids to be removed when they have no more chunks remaining.

* No more crashing pog

* Slightly better

* Minor optimisations and fix bounds

* Avoid creating new chunks for anchoring

* chucky

* comment

* Tests

* Remove some logs

* Remove another log

* Review
2021-08-23 16:00:07 +10:00

88 lines
2.8 KiB
C#

using System.Threading.Tasks;
using NUnit.Framework;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
using Robust.Shared.Maths;
using Robust.Shared.Physics;
namespace Robust.UnitTesting.Shared.Map
{
public class GridCollision_Test : RobustIntegrationTest
{
[Test]
public async Task TestGridsCollide()
{
var server = StartServer();
await server.WaitIdleAsync();
var mapManager = server.ResolveDependency<IMapManager>();
var entManager = server.ResolveDependency<IEntityManager>();
MapId mapId;
IMapGrid? gridId1 = null;
IMapGrid? gridId2 = null;
PhysicsComponent? physics1 = null;
PhysicsComponent? physics2 = null;
IEntity? gridEnt1;
IEntity? gridEnt2;
await server.WaitPost(() =>
{
mapId = mapManager.CreateMap();
gridId1 = mapManager.CreateGrid(mapId);
gridId2 = mapManager.CreateGrid(mapId);
gridEnt1 = entManager.GetEntity(gridId1.GridEntityId);
gridEnt2 = entManager.GetEntity(gridId2.GridEntityId);
physics1 = gridEnt1.GetComponent<PhysicsComponent>();
physics2 = gridEnt2.GetComponent<PhysicsComponent>();
// Can't collide static bodies and grids (at time of this writing) start as static
// (given most other games would probably prefer them as static) hence we need to make them dynamic.
physics1.BodyType = BodyType.Dynamic;
physics2.BodyType = BodyType.Dynamic;
});
await server.WaitRunTicks(1);
// No tiles set hence should be no collision
await server.WaitAssertion(() =>
{
var edge = physics1?.ContactEdges;
while (edge != null)
{
Assert.That(edge.Other, Is.Not.EqualTo(physics2));
edge = edge.Next;
}
});
await server.WaitAssertion(() =>
{
gridId1?.SetTile(new Vector2i(0, 0), new Tile(1));
gridId2?.SetTile(new Vector2i(0, 0), new Tile(1));
});
await server.WaitRunTicks(1);
await server.WaitAssertion(() =>
{
var colliding = false;
var edge = physics1?.ContactEdges;
while (edge != null)
{
if (edge.Other == physics2)
{
colliding = true;
break;
}
edge = edge.Next;
}
Assert.That(colliding);
});
}
}
}