예제 #1
0
 public PVSEntityPacket(IEntityManager entityManager, EntityUid uid)
 {
     TransformComponent = entityManager.GetComponent <TransformComponent>(uid);
     MetaDataComponent  = entityManager.GetComponent <MetaDataComponent>(uid);
     entityManager.TryGetComponent(uid, out VisibilityComponent);
     entityManager.TryGetComponent(uid, out ContainerManagerComponent);
 }
        public void SubscribeCompEvent()
        {
            // Arrange
            var entUid       = new EntityUid(7);
            var compInstance = new MetaDataComponent();

            var compRegistration = new Mock <IComponentRegistration>();

            var entManMock = new Mock <IEntityManager>();


            var compManMock = new Mock <IComponentManager>();
            var compFacMock = new Mock <IComponentFactory>();

            compRegistration.Setup(m => m.References).Returns(new List <Type> {
                typeof(MetaDataComponent)
            });
            compFacMock.Setup(m => m.GetRegistration(typeof(MetaDataComponent))).Returns(compRegistration.Object);
            compManMock.Setup(m => m.ComponentFactory).Returns(compFacMock.Object);

            IComponent?outIComponent = compInstance;

            compManMock.Setup(m => m.TryGetComponent(entUid, typeof(MetaDataComponent), out outIComponent))
            .Returns(true);

            compManMock.Setup(m => m.GetComponent(entUid, typeof(MetaDataComponent)))
            .Returns(compInstance);


            entManMock.Setup(m => m.ComponentManager).Returns(compManMock.Object);
            var bus = new EntityEventBus(entManMock.Object);

            // Subscribe
            int calledCount = 0;

            bus.SubscribeLocalEvent <MetaDataComponent, TestEvent>(HandleTestEvent);

            // add a component to the system
            entManMock.Raise(m => m.EntityAdded     += null, entManMock.Object, entUid);
            compManMock.Raise(m => m.ComponentAdded += null, new AddedComponentEventArgs(compInstance, entUid));

            // Raise
            var evntArgs = new TestEvent(5);

            bus.RaiseLocalEvent(entUid, evntArgs);

            // Assert
            Assert.That(calledCount, Is.EqualTo(1));
            void HandleTestEvent(EntityUid uid, MetaDataComponent component, TestEvent args)
            {
                calledCount++;
                Assert.That(uid, Is.EqualTo(entUid));
                Assert.That(component, Is.EqualTo(compInstance));
                Assert.That(args.TestNumber, Is.EqualTo(5));
            }
        }
예제 #3
0
        public VerbMenuPopup([CanBeNull] MetaDataComponent entityMetaData)
        {
            RobustXamlLoader.Load(this);

            if (entityMetaData != null && !string.IsNullOrEmpty(entityMetaData.EntityDescription))
            {
                DescLabel.Margin = new Thickness(4, 0, 4, 0);
                DescLabel.Text   = entityMetaData.EntityDescription;
            }
            else
            {
                Desc.Visible = false;
            }
        }
예제 #4
0
    private void OnMetaDataHandle(EntityUid uid, MetaDataComponent component, ref ComponentHandleState args)
    {
        if (args.Current is not MetaDataComponentState state)
        {
            return;
        }

        component._entityName        = state.Name;
        component._entityDescription = state.Description;

        if (state.PrototypeId != null)
        {
            component._entityPrototype = _proto.Index <EntityPrototype>(state.PrototypeId);
        }
    }
        public void SubscribeCompLifeEvent()
        {
            // Arrange
            var entUid       = new EntityUid(7);
            var compInstance = new MetaDataComponent();
            var mockEnt      = new Mock <IEntity>();

            mockEnt.SetupGet(m => m.Uid).Returns(entUid);
            compInstance.Owner = mockEnt.Object;

            var entManMock = new Mock <IEntityManager>();


            var compManMock = new Mock <IComponentManager>();

            IComponent?outIComponent = compInstance;

            compManMock.Setup(m => m.TryGetComponent(entUid, typeof(MetaDataComponent), out outIComponent))
            .Returns(true);

            compManMock.Setup(m => m.GetComponent(entUid, typeof(MetaDataComponent)))
            .Returns(compInstance);

            entManMock.Setup(m => m.ComponentManager).Returns(compManMock.Object);
            var bus = new EntityEventBus(entManMock.Object);

            // Subscribe
            int calledCount = 0;

            bus.SubscribeLocalEvent <MetaDataComponent, ComponentInit>(HandleTestEvent);

            // add a component to the system
            entManMock.Raise(m => m.EntityAdded     += null, entManMock.Object, entUid);
            compManMock.Raise(m => m.ComponentAdded += null, new AddedComponentEventArgs(compInstance, entUid));

            // Raise
            bus.RaiseComponentEvent(compInstance, new ComponentInit());

            // Assert
            Assert.That(calledCount, Is.EqualTo(1));
            void HandleTestEvent(EntityUid uid, MetaDataComponent component, ComponentInit args)
            {
                calledCount++;
                Assert.That(uid, Is.EqualTo(entUid));
                Assert.That(component, Is.EqualTo(compInstance));
            }
        }
        public void UnsubscribeCompEvent()
        {
            // Arrange
            var entUid       = new EntityUid(7);
            var compInstance = new MetaDataComponent();

            var entManMock = new Mock <IEntityManager>();


            var compManMock = new Mock <IComponentManager>();

            IComponent?outIComponent = compInstance;

            compManMock.Setup(m => m.TryGetComponent(entUid, typeof(MetaDataComponent), out outIComponent))
            .Returns(true);

            compManMock.Setup(m => m.GetComponent(entUid, typeof(MetaDataComponent)))
            .Returns(compInstance);

            entManMock.Setup(m => m.ComponentManager).Returns(compManMock.Object);
            var bus = new EntityEventBus(entManMock.Object);

            // Subscribe
            int calledCount = 0;

            bus.SubscribeLocalEvent <MetaDataComponent, TestEvent>(HandleTestEvent);
            bus.UnsubscribeLocalEvent <MetaDataComponent, TestEvent>();

            // add a component to the system
            entManMock.Raise(m => m.EntityAdded     += null, entManMock.Object, entUid);
            compManMock.Raise(m => m.ComponentAdded += null, new AddedComponentEventArgs(compInstance, entUid));

            // Raise
            var evntArgs = new TestEvent(5);

            bus.RaiseLocalEvent(entUid, evntArgs);

            // Assert
            Assert.That(calledCount, Is.EqualTo(0));
            void HandleTestEvent(EntityUid uid, MetaDataComponent component, TestEvent args)
            {
                calledCount++;
            }
        }
예제 #7
0
        public async Task PuddlePauseTest()
        {
            var server = StartServer();

            await server.WaitIdleAsync();

            var sMapManager            = server.ResolveDependency <IMapManager>();
            var sTileDefinitionManager = server.ResolveDependency <ITileDefinitionManager>();
            var sGameTiming            = server.ResolveDependency <IGameTiming>();
            var entityManager          = server.ResolveDependency <IEntityManager>();

            MapId             sMapId = default;
            IMapGrid          sGrid;
            GridId            sGridId      = default;
            EntityUid         sGridEntity  = default;
            EntityCoordinates sCoordinates = default;

            // Spawn a paused map with one tile to spawn puddles on
            await server.WaitPost(() =>
            {
                sMapId = sMapManager.CreateMap();
                sMapManager.SetMapPaused(sMapId, true);
                sGrid       = sMapManager.CreateGrid(sMapId);
                sGridId     = sGrid.Index;
                sGridEntity = sGrid.GridEntityId;
                entityManager.GetComponent <MetaDataComponent>(sGridEntity).EntityPaused = true; // See https://github.com/space-wizards/RobustToolbox/issues/1444

                var tileDefinition = sTileDefinitionManager["underplating"];
                var tile           = new Tile(tileDefinition.TileId);
                sCoordinates       = sGrid.ToCoordinates();

                sGrid.SetTile(sCoordinates, tile);
            });

            // Check that the map and grid are paused
            await server.WaitAssertion(() =>
            {
                Assert.True(sMapManager.IsGridPaused(sGridId));
                Assert.True(sMapManager.IsMapPaused(sMapId));
            });

            float                evaporateTime = default;
            PuddleComponent      puddle        = null;
            MetaDataComponent    meta          = null;
            EvaporationComponent evaporation;

            var amount = 2;

            var entitySystemManager = server.ResolveDependency <IEntitySystemManager>();
            var spillSystem         = entitySystemManager.GetEntitySystem <SpillableSystem>();

            // Spawn a puddle
            await server.WaitAssertion(() =>
            {
                var solution = new Solution("Water", FixedPoint2.New(amount));
                puddle       = spillSystem.SpillAt(solution, sCoordinates, "PuddleSmear");
                meta         = entityManager.GetComponent <MetaDataComponent>(puddle.Owner);

                // Check that the puddle was created
                Assert.NotNull(puddle);

                evaporation = entityManager.GetComponent <EvaporationComponent>(puddle.Owner);

                meta.EntityPaused = true; // See https://github.com/space-wizards/RobustToolbox/issues/1445

                Assert.True(meta.EntityPaused);

                // Check that the puddle is going to evaporate
                Assert.Positive(evaporation.EvaporateTime);

                // Should have a timer component added to it for evaporation
                Assert.That(evaporation.Accumulator, Is.EqualTo(0f));

                evaporateTime = evaporation.EvaporateTime;
            });

            // Wait enough time for it to evaporate if it was unpaused
            var sTimeToWait = (5 + (int)Math.Ceiling(amount * evaporateTime * sGameTiming.TickRate));
            await server.WaitRunTicks(sTimeToWait);

            // No evaporation due to being paused
            await server.WaitAssertion(() =>
            {
                Assert.True(meta.EntityPaused);

                // Check that the puddle still exists
                Assert.False(meta.EntityDeleted);
            });

            // Unpause the map
            await server.WaitPost(() => { sMapManager.SetMapPaused(sMapId, false); });

            // Check that the map, grid and puddle are unpaused
            await server.WaitAssertion(() =>
            {
                Assert.False(sMapManager.IsMapPaused(sMapId));
                Assert.False(sMapManager.IsGridPaused(sGridId));
                Assert.False(meta.EntityPaused);

                // Check that the puddle still exists
                Assert.False(meta.EntityDeleted);
            });

            // Wait enough time for it to evaporate
            await server.WaitRunTicks(sTimeToWait);

            // Puddle evaporation should have ticked
            await server.WaitAssertion(() =>
            {
                // Check that puddle has been deleted
                Assert.True(puddle.Deleted);
            });
        }
예제 #8
0
 private void OnMetaDataGetState(EntityUid uid, MetaDataComponent component, ref ComponentGetState args)
 {
     args.State = new MetaDataComponentState(component._entityName, component._entityDescription, component._entityPrototype?.ID);
 }