parseAnimationChannel method

Map<String, dynamic> parseAnimationChannel(
  1. XmlElement xml
)

Implementation

Map<String,dynamic> parseAnimationChannel(XmlElement xml ) {
  final Map<String,dynamic> data = {};
  final String target = xml.getAttribute( 'target' )!;
  List<String> parts = target.split( '/' );

  final id = parts.removeAt(0);
  String sid = parts.removeAt(0);

  // check selection syntax

  final arraySyntax = sid.contains( '(' );
  final memberSyntax = sid.contains( '.' );

  if ( memberSyntax ) {
    parts = sid.split( '.' );
    sid = parts.removeAt(0);
    data['member'] = parts.removeAt(0);
  } else if ( arraySyntax ) {
    // array-access syntax. can be used to express fields in one-dimensional vectors or two-dimensional matrices.

    final indiceStrings = sid.split( '(' );
    final indices = [];
    sid = indiceStrings.removeAt(0);

    for (int i = 0; i < indices.length; i ++ ) {
      indices[ i ] = int.parse( indiceStrings[ i ].replaceAll(')', '' ));
    }

    data['indices'] = indices;
  }

  data['id'] = id;
  data['sid'] = sid;

  data['arraySyntax'] = arraySyntax;
  data['memberSyntax'] = memberSyntax;

  data['sampler'] = parseId( xml.getAttribute( 'source' )! );

  return data;
}