using System.Numerics; using Content.Server.Storage.EntitySystems; using Robust.Client.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Map; using Robust.Shared.Maths; namespace Content.IntegrationTests.Tests { public sealed class ContainerOcclusionTest { [TestPrototypes] private const string Prototypes = @" - type: entity id: ContainerOcclusionA components: - type: EntityStorage occludesLight: true - type: entity id: ContainerOcclusionB components: - type: EntityStorage showContents: true occludesLight: false - type: entity id: ContainerOcclusionDummy components: - type: Sprite - type: PointLight "; [Test] public async Task TestA() { await using var pairTracker = await PoolManager.GetServerClient(); var s = pairTracker.Pair.Server; var c = pairTracker.Pair.Client; var cEntities = c.ResolveDependency(); var ent = s.ResolveDependency(); EntityUid dummy = default; var mapManager = s.ResolveDependency(); var mapId = mapManager.CreateMap(); await s.WaitPost(() => { var pos = new MapCoordinates(Vector2.Zero, mapId); var entStorage = ent.EntitySysManager.GetEntitySystem(); var container = ent.SpawnEntity("ContainerOcclusionA", pos); dummy = ent.SpawnEntity("ContainerOcclusionDummy", pos); entStorage.Insert(dummy, container); }); await PoolManager.RunTicksSync(pairTracker.Pair, 5); await c.WaitAssertion(() => { var sprite = cEntities.GetComponent(dummy); var light = cEntities.GetComponent(dummy); Assert.Multiple(() => { Assert.That(sprite.ContainerOccluded); Assert.That(light.ContainerOccluded); }); }); await pairTracker.CleanReturnAsync(); } [Test] public async Task TestB() { await using var pairTracker = await PoolManager.GetServerClient(); var s = pairTracker.Pair.Server; var c = pairTracker.Pair.Client; var cEntities = c.ResolveDependency(); var ent = s.ResolveDependency(); EntityUid dummy = default; var mapManager = s.ResolveDependency(); var mapId = mapManager.CreateMap(); await s.WaitPost(() => { var pos = new MapCoordinates(Vector2.Zero, mapId); var entStorage = ent.EntitySysManager.GetEntitySystem(); var container = ent.SpawnEntity("ContainerOcclusionB", pos); dummy = ent.SpawnEntity("ContainerOcclusionDummy", pos); entStorage.Insert(dummy, container); }); await PoolManager.RunTicksSync(pairTracker.Pair, 5); await c.WaitAssertion(() => { var sprite = cEntities.GetComponent(dummy); var light = cEntities.GetComponent(dummy); Assert.Multiple(() => { Assert.That(sprite.ContainerOccluded, Is.False); Assert.That(light.ContainerOccluded, Is.False); }); }); await pairTracker.CleanReturnAsync(); } [Test] public async Task TestAb() { await using var pairTracker = await PoolManager.GetServerClient(); var s = pairTracker.Pair.Server; var c = pairTracker.Pair.Client; var cEntities = c.ResolveDependency(); var ent = s.ResolveDependency(); EntityUid dummy = default; var mapManager = s.ResolveDependency(); var mapId = mapManager.CreateMap(); await s.WaitPost(() => { var pos = new MapCoordinates(Vector2.Zero, mapId); var entStorage = ent.EntitySysManager.GetEntitySystem(); var containerA = ent.SpawnEntity("ContainerOcclusionA", pos); var containerB = ent.SpawnEntity("ContainerOcclusionB", pos); dummy = ent.SpawnEntity("ContainerOcclusionDummy", pos); entStorage.Insert(containerB, containerA); entStorage.Insert(dummy, containerB); }); await PoolManager.RunTicksSync(pairTracker.Pair, 5); await c.WaitAssertion(() => { var sprite = cEntities.GetComponent(dummy); var light = cEntities.GetComponent(dummy); Assert.Multiple(() => { Assert.That(sprite.ContainerOccluded); Assert.That(light.ContainerOccluded); }); }); await pairTracker.CleanReturnAsync(); } } }