void ReadMetaData(XmlElement element, List<SpriterMetaData> metaDataList)
{
foreach(XmlElement child in element)
{
// tag
if (child.Name.Equals("tag"))
{
SpriterTagMetaData metaData = new SpriterTagMetaData();
metaDataList.Add(metaData);
foreach(XmlAttribute attribute in child.Attributes)
{
// name
if (attribute.Name.Equals("name"))
metaData.name = attribute.Value;
}
}
// variable
else if (child.Name.Equals("variable"))
{
bool isTweenedVariable = child.Attributes.GetNamedItem("curve_type") != null;
// tweened variable
if (isTweenedVariable)
{
SpriterTweenedVariableMetaData metaData = new SpriterTweenedVariableMetaData();
metaDataList.Add(metaData);
Vector2 curveTangents = Vector2.zero;
foreach(XmlAttribute attribute in child.Attributes)
{
// name
if (attribute.Name.Equals("name"))
metaData.name = attribute.Value;
// type
else if (attribute.Name.Equals("type"))
{
metaData.variableTypeRaw = attribute.Value;
metaData.variableType = SpriterDataHelpers.ParseSpriterEnum<VariableType>(metaData.variableTypeRaw);
}
// value
else if (attribute.Name.Equals("value"))
metaData.value = ReadVariable(metaData.variableType, attribute.Value);
// curve_type
else if (attribute.Name.Equals("curve_type"))
{
metaData.curveTypeRaw = attribute.Value;
metaData.curveType = SpriterDataHelpers.ParseSpriterEnum<CurveType>(metaData.curveTypeRaw);
}
// c1, c2
else if (attribute.Name.Equals("c1"))
curveTangents.x = float.Parse(attribute.Value);
else if (attribute.Name.Equals("c2"))
curveTangents.y = float.Parse(attribute.Value);
}
// Assign vector values
metaData.curveTangents = curveTangents;
}
// normal variable
else
{
SpriterVariableMetaData metaData = new SpriterVariableMetaData();
metaDataList.Add(metaData);
foreach(XmlAttribute attribute in child.Attributes)
{
// name
if (attribute.Name.Equals("name"))
metaData.name = attribute.Value;
// type
else if (attribute.Name.Equals("type"))
{
metaData.variableTypeRaw = attribute.Value;
metaData.variableType = SpriterDataHelpers.ParseSpriterEnum<VariableType>(metaData.variableTypeRaw);
}
// value
else if (attribute.Name.Equals("value"))
metaData.value = ReadVariable(metaData.variableType, attribute.Value);
}
}
}
}
}