Ejemplo n.º 1
0
        public void AddingRemovingPerformance()
        {
            using var world = new GameWorld();

            var component1 = world.RegisterComponent("Component1", new SingleComponentBoard(sizeof(int), 0));

            for (var i = 0; i != 4; i++)
            {
                var entities = new GameEntityHandle[1000];
                world.CreateEntityBulk(entities);

                var sw = new Stopwatch();
                sw.Start();
                foreach (var ent in entities)
                {
                    world.AddComponent(ent, component1);
                }
                sw.Stop();
                if (i != 0)
                {
                    Console.WriteLine($"Add -> {sw.Elapsed.TotalMilliseconds}ms");
                }

                sw.Restart();
                foreach (var ent in entities)
                {
                    world.RemoveComponent(ent, component1);
                }
                sw.Stop();
                if (i != 0)
                {
                    Console.WriteLine($"Remove -> {sw.Elapsed.TotalMilliseconds}ms");
                }
            }
        }
Ejemplo n.º 2
0
        public void TestBulk()
        {
            var lowest = TimeSpan.MaxValue;

            var entities = new GameEntityHandle[entityCount];

            for (var iteration = 0; iteration != 100; iteration++)
            {
                var world = new GameWorld();
                var sw    = new Stopwatch();

                var componentType = world.AsComponentType <Component>();

                sw.Start();

                world.CreateEntityBulk(entities);
                for (var i = 0; i != entityCount; i++)
                {
                    var ent = entities[i];
                    world.AddComponent(ent, componentType);
                    world.RemoveEntity(ent);
                }
                sw.Stop();

                if (lowest > sw.Elapsed)
                {
                    lowest = sw.Elapsed;
                }
            }

            Console.WriteLine($"{lowest.TotalMilliseconds}ms");
        }
Ejemplo n.º 3
0
        public void TestMillionEntitySystem()
        {
            const int size = 100_000;

            var gameWorld = new GameWorld();
            var entities  = new GameEntityHandle[size];
            gameWorld.CreateEntityBulk(entities);

            var componentType = gameWorld.AsComponentType<IntComponent>();
            for (var i = 0; i < size; i++)
            {
                gameWorld.AddComponent(entities[i], componentType);
            }

            var sw     = new Stopwatch();
            var lowest = TimeSpan.MaxValue;

            using var runner = new ThreadBatchRunner(1f);
            runner.StartPerformanceCriticalSection();

            var query = new EntityQuery(gameWorld, new[] {componentType});
            var system = new ArchetypeSystem<int>((in ReadOnlySpan<GameEntityHandle> entities, in SystemState<int> state) =>
            {
                var accessor = new ComponentDataAccessor<IntComponent>(state.World);
                foreach (ref readonly var entity in entities)
                    accessor[entity].Value++;
            }, query);
Ejemplo n.º 4
0
        public void Test()
        {
            var world      = new GameWorld();
            var timeEntity = world.CreateEntity();

            world.AddComponent(timeEntity, new Time {
                Delta = 0.25f
            });

            var gravityEntity    = world.CreateEntity();
            var gravityComponent = world.AddComponent(gravityEntity, new Gravity {
                Value = { Y = -9.6f }
            });

            var astronautOnEarth = world.CreateEntity();

            world.AssignComponent(astronautOnEarth, gravityComponent);
            world.AddComponent(astronautOnEarth, new Velocity {
                Value = new Vector3(10, 0, 0)
            });
            world.AddComponent <Position>(astronautOnEarth);

            var astronautOnMoon = world.CreateEntity();

            world.AddComponent(astronautOnMoon, new Gravity {
                Value = { Y = -4 }
            });
            world.AddComponent(astronautOnMoon, new Velocity {
                Value = new Vector3(10, 0, 0)
            });
            world.AddComponent <Position>(astronautOnMoon);
Ejemplo n.º 5
0
        public void Test1()
        {
            using var world = new GameWorld();

            var component1 = world.RegisterComponent("Component1", new SingleComponentBoard(sizeof(int), 0));
            var component2 = world.RegisterComponent("Component2", new SingleComponentBoard(sizeof(int), 0));

            GameEntityHandle ent1, ent2, ent3;

            ent1 = world.CreateEntity();
            world.AddComponent(ent1, component1);

            ent2 = world.CreateEntity();
            world.AddComponent(ent2, component1);
            world.AddComponent(ent2, component2);

            ent3 = world.CreateEntity();
            world.AddComponent(ent3, component1);

            Assert.AreEqual(world.GetArchetype(ent1), world.GetArchetype(ent3));
            Assert.AreNotEqual(world.GetArchetype(ent1), world.GetArchetype(ent2));
        }