parseSubNode method

dynamic parseSubNode(
  1. dynamic name,
  2. Map<String, dynamic> node,
  3. 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;
        }

		}

	}

}