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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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
                }
            };
        }