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); }
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); }
public UTinyObject ConvertFrom(UTinyObject @object, Range value) { ValidateType(@object); @object["start"] = value.start; @object["end"] = value.end; return(@object); }
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); }
private Vector2 ConvertTo(UTinyObject @object) { ValidateType(@object); return(new Vector2( @object.GetProperty <float>("x"), @object.GetProperty <float>("y") )); }
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); }
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); }
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); }
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); }
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") )); }
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") )); }
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") )); }
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()); }
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"]; }
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"]); }
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); }