public void IJobChunkProcessChunkIndex() { var archetype = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2), typeof(SharedData1)); var group = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestData2), typeof(SharedData1)); var entity1 = m_Manager.CreateEntity(archetype); var entity2 = m_Manager.CreateEntity(archetype); m_Manager.SetSharedComponentData <SharedData1>(entity1, new SharedData1 { value = 10 }); m_Manager.SetComponentData <EcsTestData>(entity1, new EcsTestData { value = 10 }); m_Manager.SetSharedComponentData <SharedData1>(entity2, new SharedData1 { value = 20 }); m_Manager.SetComponentData <EcsTestData>(entity2, new EcsTestData { value = 20 }); group.SetSharedComponentFilter(new SharedData1 { value = 10 }); var job = new ProcessChunkIndex { ecsTestType = m_Manager.GetArchetypeChunkComponentType <EcsTestData>(false) }; job.Schedule(group).Complete(); group.SetSharedComponentFilter(new SharedData1 { value = 20 }); job.Schedule(group).Complete(); Assert.AreEqual(0, m_Manager.GetComponentData <EcsTestData>(entity1).value); Assert.AreEqual(0, m_Manager.GetComponentData <EcsTestData>(entity2).value); group.Dispose(); }
public void IJobChunkProcessChunkIndex() { var archetype = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2), typeof(SharedData1)); var group = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestData2), typeof(SharedData1)); var entity1 = m_Manager.CreateEntity(archetype); var entity2 = m_Manager.CreateEntity(archetype); m_Manager.SetSharedComponentData <SharedData1>(entity1, new SharedData1 { value = 10 }); m_Manager.SetComponentData <EcsTestData>(entity1, new EcsTestData { value = 10 }); m_Manager.SetSharedComponentData <SharedData1>(entity2, new SharedData1 { value = 20 }); m_Manager.SetComponentData <EcsTestData>(entity2, new EcsTestData { value = 20 }); var job = new ProcessChunkIndex { EcsTestTypeHandle = m_Manager.GetComponentTypeHandle <EcsTestData>(false) }; // ScheduleSingle forces all chunks to run on a single thread, so the for loop in IJobChunk.ExecuteInternal() has >1 iteration. job.ScheduleSingle(group).Complete(); int[] values = { m_Manager.GetComponentData <EcsTestData>(entity1).value, m_Manager.GetComponentData <EcsTestData>(entity2).value, }; CollectionAssert.AreEquivalent(values, new int[] { 0, 1 }); group.Dispose(); }