Ejemplo n.º 1
0
        private Gradient ConvertTo(UTinyObject @object)
        {
            ValidateType(@object);
            var gradient = new Gradient();

            gradient.mode = (GradientMode)((UTinyEnum.Reference)@object["mode"]).Value;

            List <GradientColorKey> colors  = new List <GradientColorKey>();
            List <GradientAlphaKey> offsets = new List <GradientAlphaKey>();

            var stops = @object["stops"] as UTinyList;

            for (int i = 0; i < stops.Count; ++i)
            {
                var stop   = stops[i] as UTinyObject;
                var offset = stop.GetProperty <float>("offset");
                var color  = stop.GetProperty <Color>("color");
                colors.Add(new GradientColorKey(color, offset));
                offsets.Add(new GradientAlphaKey(color.a, offset));
            }

            gradient.alphaKeys = offsets.ToArray();
            gradient.colorKeys = colors.ToArray();
            return(gradient);
        }
        public static UTinyObject AssignPropertyFrom <TValue>(this UTinyObject obj, string propertyName, TValue value)
        {
            Assert.IsFalse(string.IsNullOrEmpty(propertyName));
            obj[propertyName] = ObjectConverter <TValue> .ConvertFrom(obj[propertyName], value);

            return(obj);
        }
        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);
        }
Ejemplo n.º 4
0
        public void EnumDefaultValue()
        {
            var registry = new UTinyRegistry();

            var enumType = registry.CreateType(UTinyId.New(), "TestEnum", UTinyTypeCode.Enum);

            enumType.BaseType = (UTinyType.Reference)UTinyType.Int32;
            enumType.CreateField("A", (UTinyType.Reference)UTinyType.Int32);
            enumType.CreateField("B", (UTinyType.Reference)UTinyType.Int32);
            enumType.CreateField("C", (UTinyType.Reference)UTinyType.Int32);
            enumType.DefaultValue = new UTinyObject(registry, (UTinyType.Reference)enumType)
            {
                ["A"] = 1,
                ["B"] = 2,
                ["C"] = 3,
            };

            var structType = registry.CreateType(UTinyId.New(), "TestStruct", UTinyTypeCode.Struct);

            structType.CreateField("EnumField", (UTinyType.Reference)enumType);
            structType.DefaultValue = new UTinyObject(registry, (UTinyType.Reference)structType)
            {
                ["EnumField"] = new UTinyEnum.Reference(enumType, "B")
            };

            var instance = new UTinyObject(registry, (UTinyType.Reference)structType);

            Assert.AreEqual(2, ((UTinyEnum.Reference)instance["EnumField"]).Value);
            Assert.AreEqual("B", ((UTinyEnum.Reference)instance["EnumField"]).Name);
        }
Ejemplo n.º 5
0
 public UTinyObject ConvertFrom(UTinyObject @object, Range value)
 {
     ValidateType(@object);
     @object["start"] = value.start;
     @object["end"]   = value.end;
     return(@object);
 }
Ejemplo n.º 6
0
 public UTinyObject ConvertFrom(UTinyObject @object, Vector2 vec2)
 {
     ValidateType(@object);
     @object["x"] = vec2.x;
     @object["y"] = vec2.y;
     return(@object);
 }
 public static UTinyObject ConvertFrom(UTinyObject obj, TValue value)
 {
     if (null == m_FromConverter)
     {
         throw new NullReferenceException($"{UTinyConstants.ApplicationName}: Cannot convert from {typeof(TValue).Name}, no converter have been registered.");
     }
     return(m_FromConverter.ConvertFrom(obj, value));
 }
 public UTinyObject ConvertFrom(UTinyObject @object, Vector3 vec3)
 {
     ValidateType(@object);
     @object["x"] = vec3.x;
     @object["y"] = vec3.y;
     @object["z"] = vec3.z;
     return(@object);
 }
Ejemplo n.º 9
0
 private Vector2 ConvertTo(UTinyObject @object)
 {
     ValidateType(@object);
     return(new Vector2(
                @object.GetProperty <float>("x"),
                @object.GetProperty <float>("y")
                ));
 }
Ejemplo n.º 10
0
 private Range ConvertTo(UTinyObject @object)
 {
     ValidateType(@object);
     return(new Range(
                @object.GetProperty <float>("start"),
                @object.GetProperty <float>("end")
                ));
 }
 public UTinyObject ConvertFrom(UTinyObject @object, Vector4 v)
 {
     ValidateType(@object);
     @object["x"] = v.x;
     @object["y"] = v.y;
     @object["z"] = v.z;
     @object["w"] = v.w;
     return(@object);
 }
Ejemplo n.º 12
0
 public UTinyObject ConvertFrom(UTinyObject @object, Rect rect)
 {
     ValidateType(@object);
     @object["x"]      = rect.x;
     @object["y"]      = rect.y;
     @object["width"]  = rect.width;
     @object["height"] = rect.height;
     return(@object);
 }
Ejemplo n.º 13
0
 public UTinyObject ConvertFrom(UTinyObject @object, Color color)
 {
     ValidateType(@object);
     @object["r"] = color.r;
     @object["g"] = color.g;
     @object["b"] = color.b;
     @object["a"] = color.a;
     return(@object);
 }
Ejemplo n.º 14
0
 public UTinyObject ConvertFrom(UTinyObject @object, Quaternion q)
 {
     ValidateType(@object);
     @object["x"] = q.x;
     @object["y"] = q.y;
     @object["z"] = q.z;
     @object["w"] = q.w;
     return(@object);
 }
Ejemplo n.º 15
0
 private Quaternion ConvertTo(UTinyObject @object)
 {
     ValidateType(@object);
     return(new Quaternion(
                @object.GetProperty <float>("x"),
                @object.GetProperty <float>("y"),
                @object.GetProperty <float>("z"),
                @object.GetProperty <float>("w")
                ));
 }
Ejemplo n.º 16
0
 private Rect ConvertTo(UTinyObject @object)
 {
     ValidateType(@object);
     return(new Rect(
                @object.GetProperty <float>("x"),
                @object.GetProperty <float>("y"),
                @object.GetProperty <float>("width"),
                @object.GetProperty <float>("height")
                ));
 }
Ejemplo n.º 17
0
 private Color ConvertTo(UTinyObject @object)
 {
     ValidateType(@object);
     return(new Color(
                @object.GetProperty <float>("r"),
                @object.GetProperty <float>("g"),
                @object.GetProperty <float>("b"),
                @object.GetProperty <float>("a")
                ));
 }
Ejemplo n.º 18
0
        public void RestoreTest_UTinyEntity()
        {
            var compType    = registry.CreateType(UTinyId.New(), "TestComponent", UTinyTypeCode.Component);
            var compTypeRef = (UTinyType.Reference)compType;

            var testStructType = registry.CreateType(UTinyId.New(), "TestStruct", UTinyTypeCode.Struct);

            testStructType.CreateField(UTinyId.New(), "IntField", (UTinyType.Reference)UTinyType.Int32);

            compType.CreateField(UTinyId.New(), "TestStructField", (UTinyType.Reference)testStructType);

            var undo = new Dictionary <UTinyId, IMemento>();

            caretaker.OnObjectChanged += (originator, memento) =>
            {
                undo[originator.Id] = memento;
            };

            var entity    = registry.CreateEntity(UTinyId.New(), "TestEntity");
            var entityRef = (UTinyEntity.Reference)entity;

            var testCompInstance = entity.AddComponent(compTypeRef);

            testCompInstance.Refresh();

            var obj = new UTinyObject(registry, (UTinyType.Reference)testStructType)
            {
                ["IntField"] = 0
            };

            testCompInstance["TestStructField"] = obj;
            var item = (UTinyObject)testCompInstance["TestStructField"];

            // Update to get the initial state; flush changes
            caretaker.Update();

            item["IntField"] = 123;
            Assert.AreEqual(123, item["IntField"]);

            // UNDO
            entity.Restore(undo[entity.Id]);

            entity = entityRef.Dereference(context.Registry);
            Assert.NotNull(entity);
            testCompInstance = entity.GetComponent(compTypeRef);
            Assert.NotNull(testCompInstance);
            item = (UTinyObject)testCompInstance["TestStructField"];
            Assert.NotNull(item);

            // make sure IntField was restored
            Assert.AreEqual(0, item["IntField"]);
        }
        public void UTinyObject_Dynamic_PrimitiveValue()
        {
            // Untyped dynamic object
            var @object = new UTinyObject(m_Registry, UTinyType.Reference.None)
            {
                ["Foo"] = "Test",
                ["Bar"] = 10
            };

            Assert.AreEqual("Test", @object["Foo"]);
            Assert.AreEqual(10, @object["Bar"]);

            Debug.Log(@object.ToString());
        }
        protected override void OnUpdateBinding(UTinyEntity entity, UTinyObject component)
        {
            OnAddBinding(entity, component);
            var graphNode = GetComponent <CellGraphNode>(entity);

            var cell = component["cell"] as UTinyObject;

            if (null == cell)
            {
                return;
            }

            cell["x"] = (int)graphNode.Cell.x;
            cell["y"] = (int)graphNode.Cell.y;
        }
        public void UTinyObject_Dynamic_List()
        {
            // Untyped dynamic object
            var @object = new UTinyObject(m_Registry, UTinyType.Reference.None)
            {
                ["Foo"] = new UTinyList(m_Registry, UTinyType.Reference.None)
                {
                    "a", "b", "c"
                },
                ["Bar"] = new UTinyList(m_Registry, UTinyType.Reference.None)
                {
                    3, 6, 9
                }
            };

            Debug.Log(@object.ToString());
        }
Ejemplo n.º 22
0
        private void ValidateType(UTinyObject @object)
        {
            if (null == @object)
            {
                throw new ArgumentNullException("object");
            }

            if (null == @object.Registry)
            {
                throw new ArgumentNullException("registry");
            }

            if ([email protected](@object.Registry.GetRangeType()))
            {
                throw new InvalidOperationException("Cannot convert value to or from Range");
            }
        }
        public void UTinyObject_FieldRename()
        {
            var @object = new UTinyObject(m_Registry, (UTinyType.Reference)m_TestStruct)
            {
                ["Foo"] = "Test",
                ["Bar"] = 10
            };

            m_TestStruct.Fields[0].Name = "Baz";

            // Dynamic values should be promoted to field values
            @object.Refresh();

            Assert.AreEqual("Test", @object["Baz"]);
            Assert.AreEqual(10, @object["Bar"]);

            Debug.Log(@object.ToString());
        }
        private void ReadUTinyObjectProperty(BinaryReader reader, UTinyObject @object)
        {
            var key = ReadPropertyName(reader); // Dynamic property name

            var token = reader.ReadByte();

            switch (token)
            {
            case BinaryToken.Value:
            {
                @object[key] = ReadValue(reader);
                return;
            }

            case BinaryToken.BeginObject:
            {
                reader.ReadUInt32();      // Size
                ReadPropertyName(reader); // "Type"
                ReadTypeReferenceValue(reader);

                // Read Name
                ReadPropertyName(reader);
                ReadPropertyValue(reader);

                ReadPropertyName(reader);     // "Properties"

                token = reader.ReadByte();
                Assert.AreEqual(BinaryToken.BeginObject, token);
                reader.ReadUInt32();     // Size
                var inner = @object[key] as UTinyObject;
                while ((token = reader.ReadByte()) != BinaryToken.EndObject)
                {
                    reader.BaseStream.Position -= 1;
                    ReadUTinyObjectProperty(reader, inner);
                }
                token = reader.ReadByte();
                Assert.AreEqual(BinaryToken.EndObject, token);
                return;
            }

            case BinaryToken.BeginArray:
                throw new NotSupportedException();
            }
        }
        public void UTinyObject_Dynamic_NestedObject()
        {
            // Untyped dynamic object
            var @object = new UTinyObject(m_Registry, UTinyType.Reference.None)
            {
                ["TestStructField"] = new UTinyObject(m_Registry, UTinyType.Reference.None)
                {
                    ["Foo"] = "Test",
                    ["Bar"] = 10
                },
                ["Baz"] = 1.3F
            };

            Assert.AreEqual("Test", (@object["TestStructField"] as UTinyObject)?["Foo"]);
            Assert.AreEqual(10, (@object["TestStructField"] as UTinyObject)?["Bar"]);
            Assert.AreEqual(1.3F, @object["Baz"]);

            Debug.Log(@object.ToString());
        }
        public void UTinyObject_Dynamic_ListPromotion()
        {
            // Untyped dynamic object
            var @object = new UTinyObject(m_Registry, UTinyType.Reference.None)
            {
                ["Foo"] = new UTinyList(m_Registry, UTinyType.Reference.None)
                {
                    "a", "b", "c"
                },
                ["Bar"] = new UTinyList(m_Registry, UTinyType.Reference.None)
                {
                    3, 6, 9
                }
            };

            @object.Type = (UTinyType.Reference)m_TestStructWithList;
            @object.Refresh();

            Debug.Log(@object.ToString());
        }
        public void UTinyObject_Dynamic_PrimitiveValuePromotion()
        {
            // Untyped dynamic object
            var @object = new UTinyObject(m_Registry, UTinyType.Reference.None)
            {
                ["Foo"] = "Test",
                ["Bar"] = 10
            };

            // Assign a type to it
            @object.Type = (UTinyType.Reference)m_TestStruct;

            // Dynamic values should be promoted to field values
            @object.Refresh();

            Assert.AreEqual("Test", @object["Foo"]);
            Assert.AreEqual(10, @object["Bar"]);

            Debug.Log(@object.ToString());
        }
        protected override void OnUpdateBinding(UTinyEntity entity, UTinyObject component)
        {
            OnAddBinding(entity, component);
            var graph = GetComponent <CellGraph>(entity);

            var layout = component["layout"] as UTinyObject;

            var size = layout?["size"] as UTinyObject;

            if (size != null)
            {
                graph.Layout = new CellLayout
                {
                    CellSize = new Vector2((float)size["x"], (float)size["y"])
                };
            }

            graph.Width  = (int)component["width"];
            graph.Height = (int)component["height"];
        }
Ejemplo n.º 29
0
        public void ResetObjectToDefaultValues()
        {
            var registry = new UTinyRegistry();

            // Create a type
            var type = registry.CreateType(
                UTinyId.New(),
                "TestStructType",
                UTinyTypeCode.Struct);

            type.CreateField(
                "TestIntField",
                (UTinyType.Reference)UTinyType.Int32);

            type.CreateField(
                "TestFloatField",
                (UTinyType.Reference)UTinyType.Float32);

            // Default the TestStruct.IntField to 7 and FloatField to 0.5f
            type.DefaultValue = new UTinyObject(registry, (UTinyType.Reference)type)
            {
                ["TestIntField"]   = 7,
                ["TestFloatField"] = 0.5f
            };

            var @object = new UTinyObject(registry, (UTinyType.Reference)type);

            Assert.AreEqual(7, @object["TestIntField"]);
            Assert.AreEqual(0.5f, @object["TestFloatField"]);

            @object["TestIntField"]   = 1;
            @object["TestFloatField"] = 7.9f;

            Assert.AreEqual(1, @object["TestIntField"]);
            Assert.AreEqual(7.9f, @object["TestFloatField"]);

            @object.Reset();

            Assert.AreEqual(7, @object["TestIntField"]);
            Assert.AreEqual(0.5f, @object["TestFloatField"]);
        }
Ejemplo n.º 30
0
        public UTinyObject ConvertFrom(UTinyObject @object, AnimationCurve curve)
        {
            ValidateType(@object);
            // [MP] @TODO: Do a more thorough curve conversion when the value gradient becomes a curve.
            var registry = @object.Registry;
            var stops    = @object["stops"] as UTinyList;

            stops.Clear();
            for (int i = 0; i < curve.keys.Length; ++i)
            {
                var key  = curve.keys[i];
                var stop = new UTinyObject(registry, registry.GetCurveStopType(), @object.VersionStorage)
                {
                    ["value"]  = key.value,
                    ["offset"] = key.time
                };

                stops.Add(stop);
            }
            return(@object);
        }