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;
}
}
}
}