EntitySystemExtensionsTest.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #nullable enable
  2. using Content.Shared.Physics;
  3. using Content.Shared.Spawning;
  4. using Robust.Shared.GameObjects;
  5. using Robust.Shared.Physics.Systems;
  6. namespace Content.IntegrationTests.Tests.Utility
  7. {
  8. [TestFixture]
  9. [TestOf(typeof(EntitySystemExtensions))]
  10. public sealed class EntitySystemExtensionsTest
  11. {
  12. private const string BlockerDummyId = "BlockerDummy";
  13. [TestPrototypes]
  14. private const string Prototypes = $@"
  15. - type: entity
  16. id: {BlockerDummyId}
  17. name: {BlockerDummyId}
  18. components:
  19. - type: Physics
  20. - type: Fixtures
  21. fixtures:
  22. fix1:
  23. shape:
  24. !type:PhysShapeAabb
  25. bounds: ""-0.49,-0.49,0.49,0.49""
  26. mask:
  27. - Impassable
  28. ";
  29. [Test]
  30. public async Task Test()
  31. {
  32. await using var pair = await PoolManager.GetServerClient();
  33. var server = pair.Server;
  34. var testMap = await pair.CreateTestMap();
  35. var mapCoordinates = testMap.MapCoords;
  36. var entityCoordinates = testMap.GridCoords;
  37. var sEntityManager = server.ResolveDependency<IEntityManager>();
  38. var broady = server.ResolveDependency<IEntitySystemManager>().GetEntitySystem<SharedBroadphaseSystem>();
  39. await server.WaitAssertion(() =>
  40. {
  41. // Nothing blocking it, only entity is the grid
  42. Assert.Multiple(() =>
  43. {
  44. Assert.That(sEntityManager.SpawnIfUnobstructed(null, entityCoordinates, CollisionGroup.Impassable), Is.Not.Null);
  45. Assert.That(sEntityManager.TrySpawnIfUnobstructed(null, entityCoordinates, CollisionGroup.Impassable, out var entity));
  46. Assert.That(entity, Is.Not.Null);
  47. });
  48. // Nothing blocking it, only entity is the grid
  49. Assert.Multiple(() =>
  50. {
  51. Assert.That(sEntityManager.SpawnIfUnobstructed(null, mapCoordinates, CollisionGroup.Impassable), Is.Not.Null);
  52. Assert.That(sEntityManager.TrySpawnIfUnobstructed(null, mapCoordinates, CollisionGroup.Impassable, out var entity));
  53. Assert.That(entity, Is.Not.Null);
  54. });
  55. // Spawn a blocker with an Impassable mask
  56. sEntityManager.SpawnEntity(BlockerDummyId, entityCoordinates);
  57. broady.Update(0.016f);
  58. // Cannot spawn something with an Impassable layer
  59. Assert.Multiple(() =>
  60. {
  61. Assert.That(sEntityManager.SpawnIfUnobstructed(null, entityCoordinates, CollisionGroup.Impassable), Is.Null);
  62. Assert.That(sEntityManager.TrySpawnIfUnobstructed(null, entityCoordinates, CollisionGroup.Impassable, out var entity), Is.False);
  63. Assert.That(entity, Is.Null);
  64. });
  65. Assert.Multiple(() =>
  66. {
  67. Assert.That(sEntityManager.SpawnIfUnobstructed(null, mapCoordinates, CollisionGroup.Impassable), Is.Null);
  68. Assert.That(sEntityManager.TrySpawnIfUnobstructed(null, mapCoordinates, CollisionGroup.Impassable, out var entity), Is.False);
  69. Assert.That(entity, Is.Null);
  70. });
  71. // Other layers are fine
  72. Assert.Multiple(() =>
  73. {
  74. Assert.That(sEntityManager.SpawnIfUnobstructed(null, entityCoordinates, CollisionGroup.MidImpassable), Is.Not.Null);
  75. Assert.That(sEntityManager.TrySpawnIfUnobstructed(null, entityCoordinates, CollisionGroup.MidImpassable, out var entity));
  76. Assert.That(entity, Is.Not.Null);
  77. });
  78. Assert.Multiple(() =>
  79. {
  80. Assert.That(sEntityManager.SpawnIfUnobstructed(null, mapCoordinates, CollisionGroup.MidImpassable), Is.Not.Null);
  81. Assert.That(sEntityManager.TrySpawnIfUnobstructed(null, mapCoordinates, CollisionGroup.MidImpassable, out var entity));
  82. Assert.That(entity, Is.Not.Null);
  83. });
  84. });
  85. await pair.CleanReturnAsync();
  86. }
  87. }
  88. }