Skeleton constructor

Skeleton(
  1. ModelData model
)

The skeleton of model.

Implementation

Skeleton(this.model)
  : nodeCount = model.nodes.length,
    _parents = Int32List(model.nodes.length)
      ..fillRange(0, model.nodes.length, -1) {
  final seen = List<bool>.filled(nodeCount, false);
  void walk(int node, int parent) {
    if (node >= nodeCount || seen[node]) return;
    seen[node] = true;
    _parents[node] = parent;
    _order.add(node);
    for (final child in model.nodes[node].children) {
      walk(child, node);
    }
  }

  for (final root in model.roots) {
    walk(root, -1);
  }
  // Nodes outside the shown scene still get matrices (a joint may be
  // left out of it by a careless exporter).
  for (var n = 0; n < nodeCount; n++) {
    if (!seen[n]) walk(n, -1);
  }
  for (var s = 0; s < model.skins.length; s++) {
    _reach.add(_reachOf(model.skins[s]));
  }
}