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(); }
public bool Equals(EcsTestManagedComponent other) { return(value == other.value); }
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); } }