예제 #1
0
        public void Init()
        {
            mWorldContext = Substitute.For <IWorldContext>();
            mWorldContext.GetEntitiesWithAll().ReturnsForAnyArgs(new List <EntityId> {
            });

            mSystemManager = new SystemManager(mWorldContext);
        }
예제 #2
0
        public void TestDisposableEntitiesCollectorSystem_ThereAreNoDisposableEntitiesAtInput_DoNothing()
        {
            mSystemManager.RegisterSystem(new PureUpdateSystemAdapter(mWorldContext, BuiltinSystems.DisposableEntitiesCollectorSystem));

            int expectedNumOfDisposableEntities = 5;

            for (int i = 0; i < expectedNumOfDisposableEntities; ++i)
            {
                mWorldContext.CreateDisposableEntity();
            }

            Assert.AreEqual(expectedNumOfDisposableEntities, mWorldContext.GetEntitiesWithAll(typeof(TDisposableComponent)).Count);

            mSystemManager.Init();
            mSystemManager.Update(0.0f);

            Assert.AreEqual(0, mWorldContext.GetEntitiesWithAll(typeof(TDisposableComponent)).Count);
        }
예제 #3
0
        public void TestGetEntitiesWithAll_PassNoArguments_ReturnsAllEntities()
        {
            List <EntityId> expectedEntities = new List <EntityId>();

            for (int i = 0; i < 5; ++i)
            {
                expectedEntities.Add(mWorldContext.CreateEntity());
            }

            Assert.DoesNotThrow(() =>
            {
                var actualEntities = mWorldContext.GetEntitiesWithAll();

                Assert.AreEqual(expectedEntities.Count, actualEntities.Count);

                for (int i = 0; i < expectedEntities.Count; ++i)
                {
                    Assert.AreEqual(expectedEntities[i], actualEntities[i]);
                }
            });
        }
예제 #4
0
        /// <summary>
        /// The system is an update one that destroys all disposable entities at an end of a frame
        /// </summary>
        /// <param name="worldContext"></param>
        /// <param name="dt"></param>

        public static void DisposableEntitiesCollectorSystem(IWorldContext worldContext, float dt)
        {
            var disposableEntities = worldContext.GetEntitiesWithAll(typeof(TDisposableComponent));

            for (int i = 0; i < disposableEntities.Count; ++i)
            {
                IEntity currEntity = worldContext.GetEntityById(disposableEntities[i]);
                if (currEntity.HasComponent <TEntityLifetimeComponent>())
                {
                    TEntityLifetimeComponent lifetimeData = currEntity.GetComponent <TEntityLifetimeComponent>();
                    currEntity.AddComponent(new TEntityLifetimeComponent {
                        mCounter = lifetimeData.mCounter - 1
                    });

                    if (lifetimeData.mCounter > 0)
                    {
                        continue;
                    }
                }

                worldContext.DestroyEntity(disposableEntities[i]);
            }
        }
예제 #5
0
    public void Update(float deltaTime)
    {
        // get all entities with TRotatingCubeComponent component
        List <uint> entities = mWorldContext.GetEntitiesWithAll(typeof(TRotatingCubeComponent));

        IEntity currEntity = null;

        for (int i = 0; i < entities.Count; ++i)
        {
            currEntity = mWorldContext.GetEntityById(entities[i]);

            // now we have two ways: strongly coupled code or use TinyECS approach
            // first version:

            /*
             * uncomment to test this version
             *
             * TViewComponent viewComponent = currEntity.GetComponent<TViewComponent>();
             *
             * TRotatingCubeComponent rotatingCubeComponent = currEntity.GetComponent<TRotatingCubeComponent>();
             *
             * viewComponent.mView.transform.Rotate(Vector3.up, rotatingCubeComponent.mSpeed);
             */

            // second version (TinyECS approach)

            /*
             */
            TRotatingCubeComponent rotatingCubeComponent = currEntity.GetComponent <TRotatingCubeComponent>();

            TRotationComponent rotationComponent = currEntity.GetComponent <TRotationComponent>();

            currEntity.AddComponent(new TRotationComponent {
                mRotation = rotationComponent.mRotation * Quaternion.Euler(0.0f, rotatingCubeComponent.mSpeed, 0.0f)
            });
        }
    }