public void RemoveComponent_WhenArchetypeModifiedInsideForEach_CanModifySafely() { var arch = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2)); using (var ents = new NativeArray <Entity>(10, Allocator.Persistent)) { m_Manager.CreateEntity(arch, ents); for (int i = 0; i < 10; i++) { m_Manager.SetComponentData(ents[i], new EcsTestData(i + 1)); } MutableEntities.ForEach((Entity entity, ref EcsTestData c0, ref EcsTestData2 c1) => { m_Manager.RemoveComponent <EcsTestData>(entity); c1.value0 = -c0.value; }); using (var group = new ExtractTestDataFromEntityManager <EcsTestData>(m_Manager)) { Assert.AreEqual(0, group.Values.Length); } using (var group = new ExtractTestDataFromEntityManager <EcsTestData2>(m_Manager)) { group.Sort(new EcsTestData2Comparer()); Assert.AreEqual(10, group.Values.Length); for (int i = 0; i < 10; i++) { Assert.AreEqual(-10 + i, group.Values[i].value0); } } } }
public void NestedForEach_ArchetypeCreatedInsideForEach_CanExecuteNestedForEach() { Entity e = m_Manager.CreateEntity(); m_Manager.AddComponentData(e, new EcsTestData(5)); m_Manager.AddComponentData(e, new EcsTestData2(12)); MutableEntities.ForEach((Entity e1, ref EcsTestData testData) => { if (m_Manager.HasComponent <EcsTestData2>(e1)) { MutableEntities.ForEach((Entity e2, ref EcsTestData ed, ref EcsTestData2 ed2) => { m_Manager.SetComponentData(m_Manager.Instantiate(e2), new EcsTestData2(-ed.value)); }); } }); using (var group = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestData2))) { using (var arr = group.ToComponentDataArray <EcsTestData>(Allocator.TempJob)) { Assert.AreEqual(2, arr.Length); // (e) Assert.AreEqual(5, arr[0].value); Assert.AreEqual(5, arr[1].value); } } using (var group = new ExtractTestDataFromEntityManager <EcsTestData2>(m_Manager)) { Assert.AreEqual(2, group.Values.Length); group.Sort(new EcsTestData2Comparer()); Assert.AreEqual(-5, group.Values[0].value0); Assert.AreEqual(12, group.Values[1].value0); } }