ContainerOcclusionTest.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. using System.Numerics;
  2. using Content.Server.Storage.EntitySystems;
  3. using Robust.Client.GameObjects;
  4. using Robust.Shared.GameObjects;
  5. using Robust.Shared.Map;
  6. using Robust.Shared.Maths;
  7. namespace Content.IntegrationTests.Tests
  8. {
  9. public sealed class ContainerOcclusionTest
  10. {
  11. [TestPrototypes]
  12. private const string Prototypes = @"
  13. - type: entity
  14. id: ContainerOcclusionA
  15. components:
  16. - type: EntityStorage
  17. occludesLight: true
  18. - type: entity
  19. id: ContainerOcclusionB
  20. components:
  21. - type: EntityStorage
  22. showContents: true
  23. occludesLight: false
  24. - type: entity
  25. id: ContainerOcclusionDummy
  26. components:
  27. - type: Sprite
  28. - type: PointLight
  29. ";
  30. [Test]
  31. public async Task TestA()
  32. {
  33. await using var pair = await PoolManager.GetServerClient(new PoolSettings { Connected = true });
  34. var server = pair.Server;
  35. var client = pair.Client;
  36. var clientEntManager = client.ResolveDependency<IEntityManager>();
  37. var serverEntManager = server.ResolveDependency<IEntityManager>();
  38. EntityUid dummy = default;
  39. var mapManager = server.ResolveDependency<IMapManager>();
  40. var map = await pair.CreateTestMap();
  41. await server.WaitPost(() =>
  42. {
  43. var pos = new MapCoordinates(Vector2.Zero, map.MapId);
  44. var entStorage = serverEntManager.EntitySysManager.GetEntitySystem<EntityStorageSystem>();
  45. var container = serverEntManager.SpawnEntity("ContainerOcclusionA", pos);
  46. dummy = serverEntManager.SpawnEntity("ContainerOcclusionDummy", pos);
  47. entStorage.Insert(dummy, container);
  48. });
  49. await pair.RunTicksSync(5);
  50. var clientEnt = clientEntManager.GetEntity(serverEntManager.GetNetEntity(dummy));
  51. await client.WaitAssertion(() =>
  52. {
  53. var sprite = clientEntManager.GetComponent<SpriteComponent>(clientEnt);
  54. var light = clientEntManager.GetComponent<PointLightComponent>(clientEnt);
  55. Assert.Multiple(() =>
  56. {
  57. Assert.That(sprite.ContainerOccluded);
  58. Assert.That(light.ContainerOccluded);
  59. });
  60. });
  61. await pair.CleanReturnAsync();
  62. }
  63. [Test]
  64. public async Task TestB()
  65. {
  66. await using var pair = await PoolManager.GetServerClient(new PoolSettings { Connected = true });
  67. var server = pair.Server;
  68. var client = pair.Client;
  69. var clientEntManager = client.ResolveDependency<IEntityManager>();
  70. var serverEntManager = server.ResolveDependency<IEntityManager>();
  71. EntityUid dummy = default;
  72. var mapManager = server.ResolveDependency<IMapManager>();
  73. var map = await pair.CreateTestMap();
  74. await server.WaitPost(() =>
  75. {
  76. var pos = new MapCoordinates(Vector2.Zero, map.MapId);
  77. var entStorage = serverEntManager.EntitySysManager.GetEntitySystem<EntityStorageSystem>();
  78. var container = serverEntManager.SpawnEntity("ContainerOcclusionB", pos);
  79. dummy = serverEntManager.SpawnEntity("ContainerOcclusionDummy", pos);
  80. entStorage.Insert(dummy, container);
  81. });
  82. await pair.RunTicksSync(5);
  83. var clientEnt = clientEntManager.GetEntity(serverEntManager.GetNetEntity(dummy));
  84. await client.WaitAssertion(() =>
  85. {
  86. var sprite = clientEntManager.GetComponent<SpriteComponent>(clientEnt);
  87. var light = clientEntManager.GetComponent<PointLightComponent>(clientEnt);
  88. Assert.Multiple(() =>
  89. {
  90. Assert.That(sprite.ContainerOccluded, Is.False);
  91. Assert.That(light.ContainerOccluded, Is.False);
  92. });
  93. });
  94. await pair.CleanReturnAsync();
  95. }
  96. [Test]
  97. public async Task TestAb()
  98. {
  99. await using var pair = await PoolManager.GetServerClient(new PoolSettings { Connected = true });
  100. var server = pair.Server;
  101. var client = pair.Client;
  102. var clientEntManager = client.ResolveDependency<IEntityManager>();
  103. var serverEntManager = server.ResolveDependency<IEntityManager>();
  104. EntityUid dummy = default;
  105. var mapManager = server.ResolveDependency<IMapManager>();
  106. var map = await pair.CreateTestMap();
  107. await server.WaitPost(() =>
  108. {
  109. var pos = new MapCoordinates(Vector2.Zero, map.MapId);
  110. var entStorage = serverEntManager.EntitySysManager.GetEntitySystem<EntityStorageSystem>();
  111. var containerA = serverEntManager.SpawnEntity("ContainerOcclusionA", pos);
  112. var containerB = serverEntManager.SpawnEntity("ContainerOcclusionB", pos);
  113. dummy = serverEntManager.SpawnEntity("ContainerOcclusionDummy", pos);
  114. entStorage.Insert(containerB, containerA);
  115. entStorage.Insert(dummy, containerB);
  116. });
  117. await pair.RunTicksSync(5);
  118. var clientEnt = clientEntManager.GetEntity(serverEntManager.GetNetEntity(dummy));
  119. await client.WaitAssertion(() =>
  120. {
  121. var sprite = clientEntManager.GetComponent<SpriteComponent>(clientEnt);
  122. var light = clientEntManager.GetComponent<PointLightComponent>(clientEnt);
  123. Assert.Multiple(() =>
  124. {
  125. Assert.That(sprite.ContainerOccluded);
  126. Assert.That(light.ContainerOccluded);
  127. });
  128. });
  129. await pair.CleanReturnAsync();
  130. }
  131. }
  132. }