void ReadTimeline(XmlElement element, SpriterAnimation animation) { SpriterTimeline timeline = new SpriterTimeline(); animation.timelines.Add(timeline); foreach(XmlAttribute attribute in element.Attributes) { // id if (attribute.Name.Equals("id")) timeline.ID = int.Parse(attribute.Value); // name else if (attribute.Name.Equals("name")) timeline.name = attribute.Value; // object_type else if (attribute.Name.Equals("object_type")) { timeline.objectTypeRaw = attribute.Value; timeline.objectType = SpriterDataHelpers.ParseSpriterEnum<ObjectType>(timeline.objectTypeRaw); } // variable_type else if (attribute.Name.Equals("variable_type")) { timeline.variableTypeRaw = attribute.Value; timeline.variableType = SpriterDataHelpers.ParseSpriterEnum<VariableType>(timeline.variableTypeRaw); } // usage else if (attribute.Name.Equals("usage")) { timeline.usageRaw = attribute.Value; timeline.usage = SpriterDataHelpers.ParseSpriterEnum<UsageType>(timeline.usageRaw); } } foreach(XmlElement child in element) { // meta_data if (child.Name.Equals("meta_data")) ReadMetaData(child, timeline.metaData); // key else if (child.Name.Equals("key")) { SpriterTimelineKey key = new SpriterTimelineKey(); timeline.keys.Add(key); Vector2 tangents = Vector2.zero; foreach(XmlAttribute attribute in child.Attributes) { // id if (attribute.Name.Equals("id")) key.ID = int.Parse(attribute.Value); // time else if (attribute.Name.Equals("time")) key.time = int.Parse(attribute.Value); // curve_type else if (attribute.Name.Equals("curve_type")) { key.curveTypeRaw = attribute.Value; key.curveType = SpriterDataHelpers.ParseSpriterEnum<CurveType>(key.curveTypeRaw); } // c1, c2 else if (attribute.Name.Equals("c1")) tangents.x = float.Parse(attribute.Value); else if (attribute.Name.Equals("c2")) tangents.y = float.Parse(attribute.Value); // spin else if (attribute.Name.Equals("spin")) key.spin = int.Parse(attribute.Value); } // Assign vector values key.curveTangents = tangents; foreach(XmlElement child2 in child) { // meta_data if (child2.Name.Equals("meta_data")) ReadMetaData(child2, key.metaData); // bone else if (child2.Name.Equals("bone")) ReadTimelineBone(child2, key); // object else if (child2.Name.Equals("object")) ReadTimelineObject(child2, key, timeline.variableType); } } } }