Beispiel #1
0
        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);
        }
Beispiel #4
0
        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);
        }