コード例 #1
0
        public void IncludeShared()
        {
            ComponentQuery query = new ComponentQuery();

            query.IncludeShared <SharedComponent1>();
            query.IncludeShared <SharedComponent2>();

            Assert.False(query.Matches(archetypeEmpty));
            Assert.False(query.Matches(archetypeC1C2S1));
            Assert.True(query.Matches(archetypeC1C2S1S2));
            Assert.False(query.Matches(archetypeC1));
            Assert.False(query.Matches(archetypeC1C2));
            Assert.False(query.Matches(archetypeC1S1));
            Assert.False(query.Matches(archetypeC2S1));
        }
コード例 #2
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));
        }
コード例 #3
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);
            });
        }
コード例 #4
0
        public void HashCodeSame()
        {
            ComponentQuery query1 = new ComponentQuery();

            query1.IncludeReadWrite <TestComponent1>();
            ComponentQuery query2 = new ComponentQuery();

            query2.IncludeReadWrite <TestComponent1>();

            Assert.Equal(query1.GetHashCode(), query2.GetHashCode());

            query1 = new ComponentQuery();
            query1.Exclude <TestComponent1>();
            query2 = new ComponentQuery();
            query2.Exclude <TestComponent1>();

            Assert.Equal(query1.GetHashCode(), query2.GetHashCode());

            query1 = new ComponentQuery();
            query1.IncludeShared <SharedComponent1>();
            query2 = new ComponentQuery();
            query2.IncludeShared <SharedComponent1>();

            Assert.Equal(query1.GetHashCode(), query2.GetHashCode());

            query1 = new ComponentQuery();
            query1.ExcludeShared <SharedComponent1>();
            query2 = new ComponentQuery();
            query2.ExcludeShared <SharedComponent1>();

            Assert.Equal(query1.GetHashCode(), query2.GetHashCode());
        }
コード例 #5
0
 public override void OnCreateSystem(ECSWorld world)
 {
     cameraQuery = new ComponentQuery();
     cameraQuery.IncludeShared <Camera>();
     cameraQuery.IncludeReadonly <Position>();
     cameraQuery.IncludeReadonly <Rotation>();
 }
コード例 #6
0
        public void RemoveComponentFromEntity()
        {
            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.RemoveComponent <TestComponent1>(target);
            buffer.Playback();

            ComponentQuery query = new ComponentQuery();

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

            Assert.Collection(world.ComponentManager.GetBlocks(query), accessor => {
                Assert.Equal(1, accessor.GetEntityData().Length);
            });
        }
コード例 #7
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);
            });
        }
コード例 #8
0
        public override ComponentQuery GetQuery()
        {
            ComponentQuery query = new ComponentQuery();

            query.IncludeReadonly <BoundingBox>();
            query.IncludeShared <CulledRenderTag>();
            return(query);
        }
コード例 #9
0
        public override ComponentQuery GetQuery()
        {
            ComponentQuery query = new ComponentQuery();

            query.IncludeShared <MeshCollider>();
            query.Exclude <InternalColliderHandle>();
            return(query);
        }
コード例 #10
0
        public override ComponentQuery GetQuery()
        {
            ComponentQuery query = new ComponentQuery();

            query.IncludeReadWrite <BoundingBox>();
            query.IncludeReadonly <ObjectToWorld>();
            query.IncludeShared <MeshRenderer>();
            return(query);
        }
コード例 #11
0
            public override ComponentQuery GetQuery()
            {
                ComponentQuery query = new ComponentQuery();

                query.IncludeShared <FaceCameraComponent>();
                query.IncludeReadWrite <Position>();
                query.IncludeReadWrite <Rotation>();
                return(query);
            }
コード例 #12
0
        public override ComponentQuery GetQuery()
        {
            var query = new ComponentQuery();

            query.IncludeShared <Camera>();
            query.IncludeReadWrite <Position>();
            query.IncludeReadWrite <Rotation>();
            query.IncludeReadonly <CameraFlightComponent>();
            return(query);
        }
コード例 #13
0
        public void OnCreate(ECSWorld world)
        {
            query.IncludeReadonly <ObjectToWorld>();
            query.IncludeShared <MeshRenderer>();
            query.IncludeShared <OpaqueRenderTag>();
            query.ExcludeShared <CulledRenderTag>();

            var fragShader = Asset.Load <ShaderAsset>("mesh_instanced_default.frag");
            var vertShader = Asset.Load <ShaderAsset>("mesh_instanced_default.vert");
            var shader     = new ShaderPipeline(fragShader, vertShader, ShaderType.Instanced);

            defaultShader = shader.ShaderPair;

            defaultMaterial = new Material(GraphicsContext.graphicsDevice,
                                           GraphicsContext.uniform0, defaultShader);

            instanceMatricesBuffers = new List <DeviceBuffer>(1);
            GrowInstanceMatrices();
        }
コード例 #14
0
        public void OnCreateSystem(ECSWorld world)
        {
            //camera = new Camera() {
            //	aspect = (float)Window.window.Width / (float)Window.window.Height,
            //	farPlane = 10000,
            //	fow = 60,
            //	nearPlane = 0.1f
            //};

            //cameraPosition = new Vector3(4 , 10, 20);
            //cameraRotation = MathHelper.LookAt(cameraPosition, Vector3.Zero, Vector3.UnitY);
            cameraQuery = new ComponentQuery();
            cameraQuery.IncludeShared <Camera>();
            cameraQuery.IncludeReadonly <Position>();
            cameraQuery.IncludeReadonly <Rotation>();

            foreach (var assembly in AssemblyHelper.GetAllUserAssemblies())
            {
                foreach (Type type in AssemblyHelper.GetTypesWithAttribute(assembly, typeof(RenderSystemAttribute)))
                {
                    try
                    {
                        if (!type.GetInterfaces().Contains(typeof(IRenderSystem)))
                        {
                            continue;
                        }

                        RenderSystemAttribute attribute =
                            type.GetCustomAttribute(typeof(RenderSystemAttribute)) as RenderSystemAttribute;
                        IRenderSystem instance = Activator.CreateInstance(type) as IRenderSystem;

                        RegisterRenderSystem(instance, type, attribute.renderStage, attribute.renderBefore,
                                             attribute.renderAfter);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"could not create an instance of type {type.Name}. Does it have an empty constructor? \n{ex.StackTrace}");
                    }
                }
            }

            foreach (var renderSystem in systems)
            {
                renderSystem.Value.OnCreate(world);
            }
        }
コード例 #15
0
        public void HashCodeNotZero()
        {
            ComponentQuery query1 = new ComponentQuery();

            query1.IncludeReadWrite <TestComponent1>();
            Assert.NotEqual(0, query1.GetHashCode());

            query1 = new ComponentQuery();
            query1.Exclude <TestComponent1>();
            Assert.NotEqual(0, query1.GetHashCode());

            query1 = new ComponentQuery();
            query1.IncludeShared <SharedComponent1>();
            Assert.NotEqual(0, query1.GetHashCode());

            query1 = new ComponentQuery();
            query1.ExcludeShared <SharedComponent1>();
            Assert.NotEqual(0, query1.GetHashCode());
        }
コード例 #16
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);
            });
        }
コード例 #17
0
 public void OnCreateSystem(ECSWorld world)
 {
     query = new ComponentQuery();
     query.IncludeShared <Camera>();
     query.IncludeShared <CameraAutoScaleAspectComponent>();
 }