Пример #1
0
        public void RemoveSharedComponentFromEntity()
        {
            ECSWorld world  = new ECSWorld();
            var      buffer = new EntityCommandBuffer(world);

            SharedComponent1 shared1   = new SharedComponent1();
            EntityArchetype  archetype = EntityArchetype.Empty;

            archetype = archetype.Add <TestComponent1>();
            archetype = archetype.AddShared(shared1);

            Entity target = world.Instantiate(archetype);

            buffer.RemoveSharedComponent <SharedComponent1>(target);
            buffer.Playback();

            ComponentQuery query = new ComponentQuery();

            query.IncludeReadWrite <TestComponent1>();
            query.ExcludeShared <SharedComponent1>();

            Assert.Collection(world.ComponentManager.GetBlocks(query), accessor => {
                Assert.Equal(1, accessor.GetEntityData().Length);
            });
        }
Пример #2
0
        public void CreateEntityFromPrefab()
        {
            ECSWorld world  = new ECSWorld();
            var      buffer = new EntityCommandBuffer(world);

            SharedComponent1 shared1 = new SharedComponent1();
            Prefab           prefab  = new Prefab();

            prefab.AddComponent(new TestComponent1 {
                i = 1, d = 2, f = 3
            });
            prefab.AddSharedComponent(shared1);


            buffer.CreateEntity(prefab);
            buffer.Playback();

            ComponentQuery query = new ComponentQuery();

            query.IncludeReadWrite <TestComponent1>();
            query.IncludeShared <SharedComponent1>();

            Assert.Collection(world.ComponentManager.GetBlocks(query), accessor => {
                Assert.Equal(1, accessor.GetEntityData().Length);
                var cData = accessor.GetComponentData <TestComponent1>();
                Assert.Equal(1, cData[0].i);
                Assert.Equal(2d, cData[0].d, 3);
                Assert.Equal(3f, cData[0].f, 3);

                var shared = accessor.GetSharedComponentData <SharedComponent1>();
                Assert.Same(shared1, shared);
            });
        }
Пример #3
0
        public void DestroyEntity()
        {
            ECSWorld world  = new ECSWorld();
            var      buffer = new EntityCommandBuffer(world);

            SharedComponent1 shared1   = new SharedComponent1();
            EntityArchetype  archetype = EntityArchetype.Empty;

            archetype = archetype.Add <TestComponent1>();
            archetype = archetype.AddShared(shared1);


            buffer.CreateEntity(archetype);
            buffer.Playback();

            ComponentQuery query = new ComponentQuery();

            query.IncludeReadWrite <TestComponent1>();
            query.IncludeShared <SharedComponent1>();

            Entity e = default;

            Assert.Collection(world.ComponentManager.GetBlocks(query), accessor => {
                Assert.Equal(1, accessor.GetEntityData().Length);
                e = accessor.GetEntityData()[0];
            });

            buffer.DestroyEntity(e);
            buffer.Playback();

            Assert.Empty(world.ComponentManager.GetBlocks(query));
        }
Пример #4
0
        public void SetComponentToEntity()
        {
            ECSWorld world  = new ECSWorld();
            var      buffer = new EntityCommandBuffer(world);

            SharedComponent1 shared1   = new SharedComponent1();
            EntityArchetype  archetype = EntityArchetype.Empty;

            archetype = archetype.Add <TestComponent1>();
            archetype = archetype.AddShared(shared1);

            Entity target = world.Instantiate(archetype);

            buffer.SetComponent(target, new TestComponent1 {
                i = 2, d = 3, f = 4
            });
            buffer.Playback();

            ComponentQuery query = new ComponentQuery();

            query.IncludeReadWrite <TestComponent1>();
            query.IncludeShared <SharedComponent1>();

            Assert.Collection(world.ComponentManager.GetBlocks(query), accessor => {
                Assert.Equal(1, accessor.GetEntityData().Length);

                var cData = accessor.GetComponentData <TestComponent1>();
                Assert.Equal(2, cData[0].i);
                Assert.Equal(3d, cData[0].d, 3);
                Assert.Equal(4f, cData[0].f, 3);
            });
        }
        public ComponentQueryTests()
        {
            var shared1 = new SharedComponent1();
            var shared2 = new SharedComponent2();

            archetypeC1       = EntityArchetype.Empty.Add <TestComponent1>();
            archetypeC1C2     = archetypeC1.Add <TestComponent2>();
            archetypeC1S1     = archetypeC1.AddShared(shared1);
            archetypeC1C2S1   = archetypeC1S1.Add <TestComponent2>();
            archetypeC1C2S1S2 = archetypeC1C2S1.AddShared(shared2);

            archetypeC2S1 = EntityArchetype.Empty.Add <TestComponent2>().AddShared(shared1);
        }
Пример #6
0
        public void CreateEntitySetComponent()
        {
            ECSWorld world  = new ECSWorld();
            var      buffer = new EntityCommandBuffer(world);

            SharedComponent1 shared1 = new SharedComponent1();
            Prefab           prefab  = new Prefab();

            prefab.AddComponent(new TestComponentVector3()
            {
                value = Vector3.UnitY
            });
            prefab.AddSharedComponent(shared1);


            buffer.CreateEntity(prefab);
            buffer.CreateEntity(prefab);
            buffer.SetComponent(new TestComponentVector3 {
                value = Vector3.UnitX
            });
            buffer.CreateEntity(prefab.Archetype);
            buffer.SetComponent(new TestComponentVector3 {
                value = Vector3.UnitZ
            });
            buffer.Playback();

            ComponentQuery query = new ComponentQuery();

            query.IncludeReadWrite <TestComponentVector3>();
            query.IncludeShared <SharedComponent1>();

            Assert.Collection(world.ComponentManager.GetBlocks(query), accessor => {
                Assert.Equal(3, accessor.GetEntityData().Length);
                var cData = accessor.GetComponentData <TestComponentVector3>();
                Assert.Equal(Vector3.UnitY, cData[0].value);
                Assert.Equal(Vector3.UnitX, cData[1].value);
                Assert.Equal(Vector3.UnitZ, cData[2].value);

                var shared = accessor.GetSharedComponentData <SharedComponent1>();
                Assert.Same(shared1, shared);
            });
        }
Пример #7
0
        public void ThrowIfNoTarget()
        {
            ECSWorld world  = new ECSWorld();
            var      buffer = new EntityCommandBuffer(world);

            SharedComponent1 shared1 = new SharedComponent1();
            Prefab           prefab  = new Prefab();

            prefab.AddComponent(new TestComponentVector3()
            {
                value = Vector3.UnitY
            });
            prefab.AddSharedComponent(shared1);

            Assert.Throws <InvalidOperationException>(() => buffer.AddComponent(new TestComponent1()));
            buffer.CreateEntity(prefab);
            buffer.AddComponent(new TestComponent1());
            buffer.Playback();
            Assert.Throws <InvalidOperationException>(() => buffer.AddComponent(new TestComponent1()));
        }
Пример #8
0
        public PrefabTests()
        {
            prefab1 = new Prefab();
            shared  = new SharedComponent1()
            {
                array = new[] { 1, 2, 3 }
            };

            prefab1.AddComponent(new TestComponent1 {
                i = 1, d = 2, f = 3
            });
            prefab1.AddComponent(new TestComponent2 {
                i = 3, d = 4, f = 5
            });
            prefab1.AddSharedComponent(shared);

            prefab2 = new Prefab();
            prefab2.AddComponent(new TestComponentVector3()
            {
                value = Vector3.One
            });
        }
Пример #9
0
        public void Empty()
        {
            ECSWorld world  = new ECSWorld();
            var      buffer = new EntityCommandBuffer(world);

            SharedComponent1 shared1 = new SharedComponent1();
            Prefab           prefab  = new Prefab();

            prefab.AddComponent(new TestComponentVector3()
            {
                value = Vector3.UnitY
            });
            prefab.AddSharedComponent(shared1);

            Assert.True(buffer.IsEmpty());

            buffer.CreateEntity(prefab);

            Assert.False(buffer.IsEmpty());

            buffer.Playback();

            Assert.True(buffer.IsEmpty());
        }