parseSubNode method
dynamic
parseSubNode(
- dynamic name,
- Map<String, dynamic> node,
- Map<String, dynamic> subNode
)
Implementation
parseSubNode(name, Map<String, dynamic> node, Map<String, dynamic> subNode) {
// special case: child node is single property
if (subNode["singleProperty"] == true) {
var value = subNode["propertyList"][0];
if (value is List) {
node[subNode["name"]] = subNode;
subNode["a"] = value;
} else {
node[subNode["name"]] = value;
}
} else if (name == 'Connections' && subNode["name"] == 'C') {
var array = [];
subNode["propertyList"].asMap().forEach((i, property) {
// first Connection is FBX type (OO, OP, etc.). We'll discard these
if (i != 0) array.add(property);
});
if (node["connections"] == null) {
node["connections"] = [];
}
node["connections"].add(array);
} else if (subNode["name"] == 'Properties70') {
var keys = subNode.keys;
keys.forEach((key) {
node[key] = subNode[key];
});
} else if (name == 'Properties70' && subNode["name"] == 'P') {
String innerPropName = subNode["propertyList"][0];
var innerPropType1 = subNode["propertyList"][1];
var innerPropType2 = subNode["propertyList"][2];
var innerPropFlag = subNode["propertyList"][3];
var innerPropValue;
if (innerPropName.indexOf('Lcl ') == 0)
innerPropName = innerPropName.replaceFirst('Lcl ', 'Lcl_');
if (innerPropType1.indexOf('Lcl ') == 0)
innerPropType1 = innerPropType1.replaceFirst('Lcl ', 'Lcl_');
if (innerPropType1 == 'Color' ||
innerPropType1 == 'ColorRGB' ||
innerPropType1 == 'Vector' ||
innerPropType1 == 'Vector3D' ||
innerPropType1.indexOf('Lcl_') == 0) {
innerPropValue = [
subNode["propertyList"][4],
subNode["propertyList"][5],
subNode["propertyList"][6]
];
} else {
if (subNode["propertyList"].length > 4) {
innerPropValue = subNode["propertyList"][4];
}
}
// this will be copied to parent, see above
node[innerPropName] = {
'type': innerPropType1,
'type2': innerPropType2,
'flag': innerPropFlag,
'value': innerPropValue
};
} else if (node[subNode["name"]] == null) {
if (subNode["id"] is num) {
node[subNode["name"]] = {};
node[subNode["name"]][subNode["id"]] = subNode;
} else {
node[subNode["name"]] = subNode;
}
} else {
if (subNode["name"] == 'PoseNode') {
if (!(node[subNode["name"]] is List)) {
node[subNode["name"]] = [node[subNode["name"]]];
}
node[subNode["name"]].add(subNode);
} else if (node[subNode["name"]][subNode["id"]] == null) {
if (subNode["id"] != null) {
node[subNode["name"]][subNode["id"]] = subNode;
}
}
}
}