InRangeUnobstructed.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. using System.Numerics;
  2. using Content.Shared.Interaction;
  3. using Robust.Server.GameObjects;
  4. using Robust.Shared.Containers;
  5. using Robust.Shared.GameObjects;
  6. using Robust.Shared.Map;
  7. using Robust.Shared.Maths;
  8. namespace Content.IntegrationTests.Tests.Interaction
  9. {
  10. [TestFixture]
  11. [TestOf(typeof(SharedInteractionSystem))]
  12. public sealed class InRangeUnobstructed
  13. {
  14. private const string HumanId = "MobHuman";
  15. private const float InteractionRange = SharedInteractionSystem.InteractionRange;
  16. private const float InteractionRangeDivided15 = InteractionRange / 1.5f;
  17. private static readonly Vector2 InteractionRangeDivided15X = new(InteractionRangeDivided15, 0f);
  18. private const float InteractionRangeDivided15Times3 = InteractionRangeDivided15 * 3;
  19. private const float HumanRadius = 0.35f;
  20. [Test]
  21. public async Task EntityEntityTest()
  22. {
  23. await using var pair = await PoolManager.GetServerClient();
  24. var server = pair.Server;
  25. var sEntities = server.ResolveDependency<IEntityManager>();
  26. var mapManager = server.ResolveDependency<IMapManager>();
  27. var conSystem = sEntities.EntitySysManager.GetEntitySystem<SharedContainerSystem>();
  28. var tSystem = sEntities.EntitySysManager.GetEntitySystem<TransformSystem>();
  29. EntityUid origin = default;
  30. EntityUid other = default;
  31. MapCoordinates mapCoordinates = default;
  32. var map = await pair.CreateTestMap();
  33. await server.WaitAssertion(() =>
  34. {
  35. var coordinates = map.MapCoords;
  36. origin = sEntities.SpawnEntity(HumanId, coordinates);
  37. other = sEntities.SpawnEntity(HumanId, coordinates);
  38. conSystem.EnsureContainer<Container>(other, "InRangeUnobstructedTestOtherContainer");
  39. mapCoordinates = tSystem.GetMapCoordinates(other);
  40. });
  41. await server.WaitIdleAsync();
  42. var interactionSys = sEntities.System<SharedInteractionSystem>();
  43. var xformSys = sEntities.System<SharedTransformSystem>();
  44. var xform = sEntities.GetComponent<TransformComponent>(origin);
  45. await server.WaitAssertion(() =>
  46. {
  47. Assert.Multiple(() =>
  48. {
  49. // Entity <-> Entity
  50. Assert.That(interactionSys.InRangeUnobstructed(origin, other));
  51. Assert.That(interactionSys.InRangeUnobstructed(other, origin));
  52. // Entity <-> MapCoordinates
  53. Assert.That(interactionSys.InRangeUnobstructed(origin, mapCoordinates));
  54. Assert.That(interactionSys.InRangeUnobstructed(mapCoordinates, origin));
  55. });
  56. // Move them slightly apart
  57. xformSys.SetLocalPosition(origin, xform.LocalPosition + InteractionRangeDivided15X, xform);
  58. Assert.Multiple(() =>
  59. {
  60. // Entity <-> Entity
  61. // Entity <-> Entity
  62. Assert.That(interactionSys.InRangeUnobstructed(origin, other));
  63. Assert.That(interactionSys.InRangeUnobstructed(other, origin));
  64. // Entity <-> MapCoordinates
  65. Assert.That(interactionSys.InRangeUnobstructed(origin, mapCoordinates));
  66. Assert.That(interactionSys.InRangeUnobstructed(mapCoordinates, origin));
  67. });
  68. // Move them out of range
  69. xformSys.SetLocalPosition(origin, xform.LocalPosition + new Vector2(InteractionRangeDivided15 + HumanRadius * 2f, 0f), xform);
  70. Assert.Multiple(() =>
  71. {
  72. // Entity <-> Entity
  73. Assert.That(interactionSys.InRangeUnobstructed(origin, other), Is.False);
  74. Assert.That(interactionSys.InRangeUnobstructed(other, origin), Is.False);
  75. // Entity <-> MapCoordinates
  76. Assert.That(interactionSys.InRangeUnobstructed(origin, mapCoordinates), Is.False);
  77. Assert.That(interactionSys.InRangeUnobstructed(mapCoordinates, origin), Is.False);
  78. // Checks with increased range
  79. // Entity <-> Entity
  80. Assert.That(interactionSys.InRangeUnobstructed(origin, other, InteractionRangeDivided15Times3));
  81. Assert.That(interactionSys.InRangeUnobstructed(other, origin, InteractionRangeDivided15Times3));
  82. // Entity <-> MapCoordinates
  83. Assert.That(interactionSys.InRangeUnobstructed(origin, mapCoordinates, InteractionRangeDivided15Times3));
  84. Assert.That(interactionSys.InRangeUnobstructed(mapCoordinates, origin, InteractionRangeDivided15Times3));
  85. });
  86. });
  87. await pair.CleanReturnAsync();
  88. }
  89. }
  90. }