private void HandleCollide(EntityUid uid, ServerDoorComponent component, StartCollideEvent args) { if (component.State != SharedDoorComponent.DoorState.Closed) { return; } if (!component.BumpOpen) { return; } // Disabled because it makes it suck hard to walk through double doors. component.TryOpen(args.OtherFixture.Body.Owner); }
public async Task OpenCloseDestroyTest() { var options = new ServerIntegrationOptions { ExtraPrototypes = Prototypes }; var server = StartServerDummyTicker(options); await server.WaitIdleAsync(); var mapManager = server.ResolveDependency <IMapManager>(); var entityManager = server.ResolveDependency <IEntityManager>(); IEntity airlock = null; ServerDoorComponent doorComponent = null; server.Assert(() => { mapManager.CreateNewMapEntity(MapId.Nullspace); airlock = entityManager.SpawnEntity("AirlockDummy", MapCoordinates.Nullspace); Assert.True(airlock.TryGetComponent(out doorComponent)); Assert.That(doorComponent.State, Is.EqualTo(SharedDoorComponent.DoorState.Closed)); }); await server.WaitIdleAsync(); server.Assert(() => { doorComponent.Open(); Assert.That(doorComponent.State, Is.EqualTo(SharedDoorComponent.DoorState.Opening)); }); await server.WaitIdleAsync(); await WaitUntil(server, () => doorComponent.State == SharedDoorComponent.DoorState.Open); Assert.That(doorComponent.State, Is.EqualTo(SharedDoorComponent.DoorState.Open)); server.Assert(() => { doorComponent.Close(); Assert.That(doorComponent.State, Is.EqualTo(SharedDoorComponent.DoorState.Closing)); }); await WaitUntil(server, () => doorComponent.State == SharedDoorComponent.DoorState.Closed); Assert.That(doorComponent.State, Is.EqualTo(SharedDoorComponent.DoorState.Closed)); server.Assert(() => { Assert.DoesNotThrow(() => { airlock.Delete(); }); }); server.RunTicks(5); await server.WaitIdleAsync(); }
public async Task AirlockBlockTest() { var options = new ServerIntegrationOptions { ExtraPrototypes = Prototypes }; var server = StartServer(options); await server.WaitIdleAsync(); var mapManager = server.ResolveDependency <IMapManager>(); var entityManager = server.ResolveDependency <IEntityManager>(); IEntity physicsDummy = null; IEntity airlock = null; TestController controller = null; ServerDoorComponent doorComponent = null; var physicsDummyStartingX = -1; server.Assert(() => { var mapId = new MapId(1); mapManager.CreateNewMapEntity(mapId); var humanCoordinates = new MapCoordinates((physicsDummyStartingX, 0), mapId); physicsDummy = entityManager.SpawnEntity("PhysicsDummy", humanCoordinates); airlock = entityManager.SpawnEntity("AirlockDummy", new MapCoordinates((0, 0), mapId)); Assert.True(physicsDummy.TryGetComponent(out IPhysicsComponent physics)); controller = physics.EnsureController <TestController>(); Assert.True(airlock.TryGetComponent(out doorComponent)); Assert.That(doorComponent.State, Is.EqualTo(SharedDoorComponent.DoorState.Closed)); }); await server.WaitIdleAsync(); // Push the human towards the airlock controller.LinearVelocity = (0.5f, 0); for (var i = 0; i < 240; i += 10) { // Keep the airlock awake so they collide airlock.GetComponent <IPhysicsComponent>().WakeBody(); // Ensure that it is still closed Assert.That(doorComponent.State, Is.EqualTo(SharedDoorComponent.DoorState.Closed)); await server.WaitRunTicks(10); await server.WaitIdleAsync(); } // Sanity check Assert.That(physicsDummy.Transform.MapPosition.X, Is.GreaterThan(physicsDummyStartingX)); // Blocked by the airlock Assert.That(physicsDummy.Transform.MapPosition.X, Is.Negative.Or.Zero); }
public async Task AirlockBlockTest() { var options = new ServerContentIntegrationOption { ExtraPrototypes = Prototypes }; var server = StartServer(options); await server.WaitIdleAsync(); var mapManager = server.ResolveDependency <IMapManager>(); var entityManager = server.ResolveDependency <IEntityManager>(); IPhysBody physBody = null; IEntity physicsDummy = null; IEntity airlock = null; ServerDoorComponent doorComponent = null; var physicsDummyStartingX = -1; server.Assert(() => { var mapId = new MapId(1); mapManager.CreateNewMapEntity(mapId); var humanCoordinates = new MapCoordinates((physicsDummyStartingX, 0), mapId); physicsDummy = entityManager.SpawnEntity("PhysicsDummy", humanCoordinates); airlock = entityManager.SpawnEntity("AirlockDummy", new MapCoordinates((0, 0), mapId)); Assert.True(physicsDummy.TryGetComponent(out physBody)); Assert.True(airlock.TryGetComponent(out doorComponent)); Assert.That(doorComponent.State, Is.EqualTo(SharedDoorComponent.DoorState.Closed)); }); await server.WaitIdleAsync(); // Push the human towards the airlock Assert.That(physBody != null); physBody.LinearVelocity = (0.5f, 0); for (var i = 0; i < 240; i += 10) { // Keep the airlock awake so they collide airlock.GetComponent <IPhysBody>().WakeBody(); await server.WaitRunTicks(10); await server.WaitIdleAsync(); } // Sanity check // Sloth: Okay I'm sorry but I hate having to rewrite tests for every refactor // If you see this yell at me in discord so I can continue to pretend this didn't happen. // Assert.That(physicsDummy.Transform.MapPosition.X, Is.GreaterThan(physicsDummyStartingX)); // Blocked by the airlock Assert.That(Math.Abs(physicsDummy.Transform.MapPosition.X - 1) > 0.01f); }