clone static method

dynamic clone(
  1. Object3D source
)

Implementation

static clone(Object3D source) {
  final sourceLookup = {};
  final cloneLookup = {};

  final clone = source.clone();

  parallelTraverse(source, clone, (sourceNode, clonedNode) {
    sourceLookup[clonedNode] = sourceNode;
    cloneLookup[sourceNode] = clonedNode;
  });

  clone.traverse((node) {
    if (!node.runtimeType.toString().contains("SkinnedMesh")) return;

    final clonedMesh = node;
    final Object3D sourceMesh = sourceLookup[node];
    final sourceBones = sourceMesh.skeleton?.bones;

    clonedMesh.skeleton = sourceMesh.skeleton?.clone();
    clonedMesh.bindMatrix?.setFrom(sourceMesh.bindMatrix!);

    clonedMesh.skeleton?.bones = List<Bone>.from(sourceBones!.map((bone) {
      return cloneLookup[bone];
    }).toList());

    if(clonedMesh is SkinnedMesh){
      clonedMesh.bind(clonedMesh.skeleton!, clonedMesh.bindMatrix);
    }
  });

  return clone;
}