Exemple #1
0
        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);
                    }
                }
            }
        }
Exemple #2
0
        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);
            }
        }