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(); }
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); }
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); }
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(); }
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(); }
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(); }