Esempio n. 1
0
        public void IJobProcessEntitiesWorks()
        {
            var entityArrayCache = new ComponentGroupArrayStaticCache(typeof(TestEntity), m_Manager);

            var entities = new NativeArray <Entity>(100, Allocator.Persistent);
            var arch     = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2));

            m_Manager.CreateEntity(arch, entities);
            for (int i = 0; i < entities.Length; i++)
            {
                m_Manager.SetComponentData(entities[i], new EcsTestData(i));
            }

            var job = new TestCopy1To2ProcessEntityJob();

            job.Schedule(new ComponentGroupArray <TestEntity>(entityArrayCache), 1).Complete();

            // not sure why this works. Shouldn't schedule throw an exception because parallelFor restriction
            for (int i = 0; i < entities.Length; i++)
            {
                Assert.AreEqual(i, m_Manager.GetComponentData <EcsTestData2>(entities[i]).value0);
            }
            ;

            entities.Dispose();
            entityArrayCache.Dispose();
        }
Esempio n. 2
0
        unsafe public void ComponentEnumerator()
        {
            var go     = new GameObject("test", typeof(Rigidbody), typeof(Light));
            var entity = GameObjectEntity.AddToEntityManager(m_Manager, go);

            m_Manager.AddComponentData(entity, new EcsTestData(5));
            m_Manager.AddComponentData(entity, new EcsTestData2(6));

            var cache = new ComponentGroupArrayStaticCache(typeof(MyEntity), m_Manager);

            var array      = new ComponentGroupArray <MyEntity>(cache);
            int iterations = 0;

            foreach (var e in array)
            {
                Assert.AreEqual(5, e.testData->value);
                Assert.AreEqual(6, e.testData2->value0);
                Assert.AreEqual(go.GetComponent <Light>(), e.light);
                Assert.AreEqual(go.GetComponent <Rigidbody>(), e.rigidbody);
                iterations++;
            }
            Assert.AreEqual(1, iterations);

            cache.Dispose();
            Object.DestroyImmediate(go);
        }
Esempio n. 3
0
        public void ComponentGroupArraySubtractive()
        {
            var entityArrayCache = new ComponentGroupArrayStaticCache(typeof(TestEntitySub2), m_Manager);

            m_Manager.CreateEntity(typeof(EcsTestData), typeof(EcsTestData2));
            m_Manager.CreateEntity(typeof(EcsTestData));

            var entities = new ComponentGroupArray <TestEntitySub2>(entityArrayCache);

            Assert.AreEqual(1, entities.Length);
        }
Esempio n. 4
0
        public void ComponentGroupArrayJobScheduleReadOnlyParallelIsAllowed()
        {
            var entityArrayCache = new ComponentGroupArrayStaticCache(typeof(TestEntityReadOnly), m_Manager);
            var entity           = m_Manager.CreateEntity(typeof(EcsTestData), typeof(EcsTestData2));

            m_Manager.SetComponentData(entity, new EcsTestData(42));

            var job = new TestReadOnlyJob();

            job.entities = new ComponentGroupArray <TestEntityReadOnly>(entityArrayCache);

            var fence  = job.Schedule();
            var fence2 = job.Schedule();

            JobHandle.CompleteAll(ref fence, ref fence2);
            entityArrayCache.Dispose();
        }
Esempio n. 5
0
        public void ComponentAccessAfterScheduledJobThrowsEntityArray()
        {
            var entityArrayCache = new ComponentGroupArrayStaticCache(typeof(TestEntity), m_Manager);

            m_Manager.CreateComponentGroup(typeof(EcsTestData));
            m_Manager.CreateEntity(typeof(EcsTestData), typeof(EcsTestData2));

            var job = new TestCopy1To2Job();

            job.entities = new ComponentGroupArray <TestEntity>(entityArrayCache);

            var fence = job.Schedule();

            var entityArray = new ComponentGroupArray <TestEntity>(entityArrayCache);

            Assert.Throws <System.InvalidOperationException>(() => { var temp = entityArray[0]; });

            fence.Complete();
        }
Esempio n. 6
0
        public void ComponentGroupArrayJobScheduleDetectsWriteDependency()
        {
            var entityArrayCache = new ComponentGroupArrayStaticCache(typeof(TestEntity), m_Manager);
            var entity           = m_Manager.CreateEntity(typeof(EcsTestData), typeof(EcsTestData2));

            m_Manager.SetComponentData(entity, new EcsTestData(42));

            var job = new TestCopy1To2Job();

            job.entities = new ComponentGroupArray <TestEntity>(entityArrayCache);

            var fence = job.Schedule();

            Assert.Throws <System.InvalidOperationException>(() => { job.Schedule(); });

            fence.Complete();

            entityArrayCache.Dispose();
        }