public void ListFieldPrimitiveAssignment() { var registry = new UTinyRegistry(); var type = registry.CreateType(UTinyId.New(), "TestType", UTinyTypeCode.Struct); type.CreateField("TestField", (UTinyType.Reference)UTinyType.Int32, true); var instance = new UTinyObject(registry, (UTinyType.Reference)type) { ["TestField"] = new UTinyList(registry, (UTinyType.Reference)UTinyType.Int32) { 1, 2, 3 } }; instance["TestField"] = new UTinyList(registry, (UTinyType.Reference)UTinyType.Int32) { 3, 6, 7 }; Debug.Log(instance); }
public void ObjectListVersionChange() { var registry = new UTinyRegistry(); var type = registry.CreateType(UTinyId.New(), "TestType", UTinyTypeCode.Struct); type.CreateField("TestField", (UTinyType.Reference)UTinyType.Int32); var list = new UTinyList(registry, (UTinyType.Reference)type) { new UTinyObject(registry, (UTinyType.Reference)type) { ["TestField"] = 1 }, new UTinyObject(registry, (UTinyType.Reference)type) { ["TestField"] = 2 }, new UTinyObject(registry, (UTinyType.Reference)type) { ["TestField"] = 3 } }; var version = list.Version; (list[0] as UTinyObject)["TestField"] = 7; Assert.AreNotEqual(version, list.Version); Debug.Log(list); }
public void PrimitiveList() { var registry = new UTinyRegistry(); var list = new UTinyList(registry, (UTinyType.Reference)UTinyType.Int32) { 1, 2, 3 }; Assert.AreEqual(3, list.Count); Debug.Log(list); }
private static void ParseUTinyList(IRegistry registry, UTinyList uTinyList, IDictionary <string, object> dictionary) { var typeReference = ParseTypeReference(GetValue(dictionary, "Type"), false); IList <object> itemsList; if (TryGetValue(dictionary, "Items", out itemsList)) { foreach (var obj in itemsList) { var valueDictionary = obj as IDictionary <string, object>; if (valueDictionary != null) { if (valueDictionary.ContainsKey("$TypeId")) { uTinyList.Add(ParseCustomObjectType(registry, valueDictionary)); } // @HACK We assume an object `Properties` OR `Type` keys is a `UTinyObject` else if (valueDictionary.ContainsKey("Properties") || valueDictionary.ContainsKey("Type")) { var @object = new UTinyObject(registry, typeReference, null, false); @object.Refresh(null, true); ParseUTinyObject(registry, @object, valueDictionary); uTinyList.Add(@object); } else { throw new NotImplementedException("CommandStream.FrontEnd Failed to deserialize UTinyList item"); } } else { uTinyList.Add(obj); } } } uTinyList.Type = UTinyUpdater.UpdateReference(uTinyList.Type); }
private static void ParseUTinyObject(IRegistry registry, UTinyObject uTinyObject, IDictionary <string, object> dictionary) { IDictionary <string, object> propertiesDictionary; if (!TryGetValue(dictionary, "Properties", out propertiesDictionary)) { UTinyUpdater.UpdateObject(uTinyObject); return; } var type = uTinyObject.Type.Dereference(registry); foreach (var kvp in propertiesDictionary) { var valueDictionary = kvp.Value as IDictionary <string, object>; if (valueDictionary != null) { if (valueDictionary.ContainsKey("Properties")) { if (uTinyObject.HasProperty(kvp.Key)) { ParseUTinyObject(registry, uTinyObject[kvp.Key] as UTinyObject, valueDictionary); } else { var typeReference = ParseTypeReference(GetValue(valueDictionary, "Type"), false); var obj = new UTinyObject(registry, typeReference, null, false); obj.Refresh(null, true); ParseUTinyObject(registry, obj, valueDictionary); obj.Refresh(null, true); uTinyObject[kvp.Key] = obj; } } else if (valueDictionary.ContainsKey("Items")) { if (uTinyObject.HasProperty(kvp.Key)) { ParseUTinyList(registry, uTinyObject[kvp.Key] as UTinyList, valueDictionary); } else { var obj = new UTinyList(registry, ParseTypeReference(GetValue(valueDictionary, "Type"), false)); ParseUTinyList(registry, obj, valueDictionary); uTinyObject[kvp.Key] = obj; } } else if (valueDictionary.ContainsKey("$TypeId")) { var value = ParseCustomObjectType(registry, valueDictionary); var field = type?.FindFieldByName(kvp.Key); if (field != null) { value = UTinyUpdater.UpdateField(field.Id, value); } uTinyObject[kvp.Key] = value; } } else { var value = kvp.Value; var field = type?.FindFieldByName(kvp.Key); if (field != null) { value = UTinyUpdater.UpdateField(field.Id, value); } uTinyObject[kvp.Key] = value; } } UTinyUpdater.UpdateObject(uTinyObject); }
public void SetUp() { m_Registry = new UTinyRegistry(); // Create a component with an int array field m_IntArrayComponentType = m_Registry.CreateType( UTinyId.New(), "TestComponent", UTinyTypeCode.Component); m_IntArrayComponentType.CreateField( "TestIntArrayField", (UTinyType.Reference)UTinyType.Int32, true); m_IntArrayEntity = m_Registry.CreateEntity(UTinyId.New(), "TestEntity"); var component = m_IntArrayEntity.AddComponent((UTinyType.Reference)m_IntArrayComponentType); component.Refresh(); component["TestIntArrayField"] = new UTinyList(m_Registry, (UTinyType.Reference)UTinyType.Int32) { 3, 6, 9 }; m_StructType = m_Registry.CreateType( UTinyId.New(), "TestStruct", UTinyTypeCode.Struct); m_StructType.CreateField( "TestIntField", (UTinyType.Reference)UTinyType.Int32); m_StructArrayComponentType = m_Registry.CreateType( UTinyId.New(), "TestComponent2", UTinyTypeCode.Component); m_StructArrayComponentType.CreateField( "TestStructArrayField", (UTinyType.Reference)m_StructType, true); m_StructArrayEntity = m_Registry.CreateEntity(UTinyId.New(), "TestEntity2"); var component2 = m_StructArrayEntity.AddComponent((UTinyType.Reference)m_StructArrayComponentType); component2.Refresh(); component2["TestStructArrayField"] = new UTinyList(m_Registry, (UTinyType.Reference)m_StructType) { new UTinyObject(m_Registry, (UTinyType.Reference)m_StructType) { ["TestIntField"] = 3 }, new UTinyObject(m_Registry, (UTinyType.Reference)m_StructType) { ["TestIntField"] = 6 }, new UTinyObject(m_Registry, (UTinyType.Reference)m_StructType) { ["TestIntField"] = 9 } }; }