Пример #1
0
        public void AddComponentKeepsObjectReference()
        {
            var entity = m_Manager.CreateEntity();
            var obj    = new EcsTestManagedComponent();

            m_Manager.AddComponentData(entity, obj);
            m_Manager.AddComponentData(entity, new EcsTestData());
            m_Manager.AddComponentData(entity, new ComplexManagedComponent());
            Assert.AreSame(m_Manager.GetComponentData <EcsTestManagedComponent>(entity), obj);
        }
        public void UpdateChunkComponent_ManagedComponents()
        {
            var         arch0  = m_Manager.CreateArchetype(ComponentType.ChunkComponent <EcsTestManagedComponent>(), typeof(EcsTestData2));
            EntityQuery group0 = m_Manager.CreateEntityQuery(typeof(ChunkHeader), typeof(EcsTestManagedComponent));

            var entity0 = m_Manager.CreateEntity(arch0);
            var chunk0  = m_Manager.GetChunk(entity0);
            EcsTestManagedComponent testData = new EcsTestManagedComponent {
                value = "SomeString"
            };

            Assert.AreEqual(1, group0.CalculateEntityCount());

            m_Manager.SetChunkComponentData(chunk0, testData);

            Assert.AreEqual(1, group0.CalculateEntityCount());

            Assert.AreEqual("SomeString", m_Manager.GetChunkComponentData <EcsTestManagedComponent>(entity0).value);

            m_Manager.SetComponentData(entity0, new EcsTestData2 {
                value0 = 1, value1 = 2
            });

            var entity1 = m_Manager.CreateEntity(arch0);
            var chunk1  = m_Manager.GetChunk(entity1);

            Assert.AreEqual("SomeString", m_Manager.GetChunkComponentData <EcsTestManagedComponent>(entity0).value);
            Assert.AreEqual("SomeString", m_Manager.GetChunkComponentData <EcsTestManagedComponent>(entity1).value);

            Assert.AreEqual(1, group0.CalculateEntityCount());

            m_Manager.SetChunkComponentData(chunk1, testData);

            Assert.AreEqual(1, group0.CalculateEntityCount());

            m_Manager.SetComponentData(entity1, new EcsTestData2 {
                value0 = 2, value1 = 3
            });

            Assert.AreEqual(1, group0.CalculateEntityCount());

            m_Manager.SetChunkComponentData <EcsTestManagedComponent>(chunk0, new EcsTestManagedComponent {
                value = "SomeOtherString"
            });

            Assert.AreEqual("SomeOtherString", m_Manager.GetChunkComponentData <EcsTestManagedComponent>(entity0).value);

            Assert.AreEqual(1, group0.CalculateEntityCount());
        }
        public unsafe void ManagedComponents()
        {
            var archetype = m_Manager.CreateArchetype(typeof(EcsTestManagedComponent));
            var count     = 128;
            var array     = new NativeArray <Entity>(count, Allocator.Temp);

            m_Manager.CreateEntity(archetype, array);

            var hash = new NativeHashMap <Entity, FixedString64>(count, Allocator.Temp);

            var cg = m_Manager.CreateEntityQuery(ComponentType.ReadWrite <EcsTestManagedComponent>());

            using (var chunks = cg.CreateArchetypeChunkArray(Allocator.TempJob))
            {
                var ManagedComponentType = m_Manager.GetComponentTypeHandle <EcsTestManagedComponent>(false);
                var entsType             = m_Manager.GetEntityTypeHandle();

                foreach (var chunk in chunks)
                {
                    var components = chunk.GetManagedComponentAccessor(ManagedComponentType, m_Manager);
                    var entities   = chunk.GetNativeArray(entsType);

                    Assert.AreEqual(chunk.Count, components.Length);

                    for (var i = 0; i < chunk.Count; ++i)
                    {
                        components[i] = new EcsTestManagedComponent {
                            value = entities[i].Index.ToString()
                        };
                        Assert.IsTrue(hash.TryAdd(entities[i], new FixedString64(components[i].value)));
                    }
                }
            }

            for (int i = 0; i < count; i++)
            {
                var data = m_Manager.GetComponentData <EcsTestManagedComponent>(array[i]);
                Assert.AreEqual(array[i].Index.ToString(), data.value);
            }

            array.Dispose();
            hash.Dispose();
        }
Пример #4
0
 public bool Equals(EcsTestManagedComponent other)
 {
     return(value == other.value);
 }
Пример #5
0
        public void ManagedComponentGetHashCode()
        {
            {
                var typeInfo = FastEquality.CreateTypeInfo(typeof(EcsTestManagedComponent));
                var obj1     = new EcsTestManagedComponent()
                {
                    value = "SomeString"
                };
                var obj12 = new EcsTestManagedComponent()
                {
                    value = "SomeString"
                };
                var obj2 = new EcsTestManagedComponent()
                {
                    value = "SomeOtherString"
                };
                Assert.AreEqual(FastEquality.ManagedGetHashCode(obj1, typeInfo), FastEquality.ManagedGetHashCode(obj1, typeInfo));
                Assert.AreEqual(FastEquality.ManagedGetHashCode(obj1, typeInfo), FastEquality.ManagedGetHashCode(obj12, typeInfo));
                Assert.AreNotEqual(FastEquality.ManagedGetHashCode(obj1, typeInfo), FastEquality.ManagedGetHashCode(obj2, typeInfo));
            }

            {
                var typeInfo    = FastEquality.CreateTypeInfo(typeof(ComponentWithUnityObjectArray));
                var tex1        = new UnityEngine.Texture2D(512, 512);
                var tex2        = new UnityEngine.Texture2D(512, 512);
                var tex3        = new UnityEngine.Texture2D(512, 512);
                var stringList1 = new List <string>()
                {
                    "yo", "hi", "hej", "hello"
                };
                var stringList12 = new List <string>()
                {
                    "yo", "hi", "hej", "hello"
                };
                var stringList2 = new List <string>()
                {
                    "yo", "hi", "hey", "hello"
                };

                var obj1 = new ComponentWithUnityObjectArray()
                {
                    Strings = stringList1, Texture = tex1, Objects = new[] { tex2, tex3 }
                };
                var obj12 = new ComponentWithUnityObjectArray()
                {
                    Strings = stringList1, Texture = tex1, Objects = new[] { tex2, tex3 }
                };
                var obj13 = new ComponentWithUnityObjectArray()
                {
                    Strings = stringList12, Texture = tex1, Objects = new[] { tex2, tex3 }
                };
                var obj2 = new ComponentWithUnityObjectArray()
                {
                    Strings = stringList1, Texture = tex1, Objects = new[] { tex2, tex2 }
                };
                var obj3 = new ComponentWithUnityObjectArray()
                {
                    Strings = stringList1, Texture = tex1, Objects = new[] { tex1, null }
                };
                var obj4 = new ComponentWithUnityObjectArray()
                {
                    Strings = stringList1, Texture = tex1, Objects = new[] { tex1 }
                };
                var obj5 = new ComponentWithUnityObjectArray()
                {
                    Strings = stringList2, Texture = tex1, Objects = new[] { tex2, tex3 }
                };
                var obj6 = new ComponentWithUnityObjectArray()
                {
                    Strings = stringList2, Texture = tex2, Objects = new[] { tex3, tex1 }
                };
                Assert.AreEqual(FastEquality.ManagedGetHashCode(obj1, typeInfo), FastEquality.ManagedGetHashCode(obj1, typeInfo));
                Assert.AreEqual(FastEquality.ManagedGetHashCode(obj1, typeInfo), FastEquality.ManagedGetHashCode(obj12, typeInfo));
                Assert.AreEqual(FastEquality.ManagedGetHashCode(obj1, typeInfo), FastEquality.ManagedGetHashCode(obj13, typeInfo));
                Assert.AreNotEqual(FastEquality.ManagedGetHashCode(obj1, typeInfo), FastEquality.ManagedGetHashCode(obj2, typeInfo));
                Assert.AreNotEqual(FastEquality.ManagedGetHashCode(obj1, typeInfo), FastEquality.ManagedGetHashCode(obj3, typeInfo));
                Assert.AreNotEqual(FastEquality.ManagedGetHashCode(obj1, typeInfo), FastEquality.ManagedGetHashCode(obj4, typeInfo));
                Assert.AreNotEqual(FastEquality.ManagedGetHashCode(obj1, typeInfo), FastEquality.ManagedGetHashCode(obj5, typeInfo));
                Assert.AreNotEqual(FastEquality.ManagedGetHashCode(obj1, typeInfo), FastEquality.ManagedGetHashCode(obj6, typeInfo));
            }

            {
                var typeInfo = FastEquality.CreateTypeInfo(typeof(ComponentOverridesGetHashCode));
                var obj      = new ComponentOverridesGetHashCode();
                Assert.AreEqual(FastEquality.ManagedGetHashCode(obj, typeInfo), FastEquality.ManagedGetHashCode(obj, typeInfo));
                Assert.IsTrue(obj.GetHashCodeWasCalled);
            }
        }