internal SceneInstance(NodeTemplate[] nodeTemplates, DrawableReference[] drawables, Collections.NamedList <float> tracks) { _AnimationTracks = tracks; _NodeTemplates = nodeTemplates; _NodeInstances = new NodeInstance[_NodeTemplates.Length]; for (var i = 0; i < _NodeInstances.Length; ++i) { var n = _NodeTemplates[i]; var pidx = _NodeTemplates[i].ParentIndex; if (pidx >= i) { throw new ArgumentException("invalid parent index", nameof(nodeTemplates)); } var p = pidx < 0 ? null : _NodeInstances[pidx]; _NodeInstances[i] = new NodeInstance(n, p); } _DrawableReferences = drawables; _DrawableTransforms = new IGeometryTransform[_DrawableReferences.Length]; for (int i = 0; i < _DrawableTransforms.Length; ++i) { _DrawableTransforms[i] = _DrawableReferences[i].CreateGeometryTransform(); } }
internal SceneInstance(ArmatureTemplate armature, DrawableTemplate[] drawables) { Guard.NotNull(armature, nameof(armature)); Guard.NotNull(drawables, nameof(drawables)); _Armature = new ArmatureInstance(armature); _DrawableReferences = drawables; _DrawableTransforms = new IGeometryTransform[_DrawableReferences.Length]; for (int i = 0; i < _DrawableTransforms.Length; ++i) { _DrawableTransforms[i] = _DrawableReferences[i].CreateGeometryTransform(); } }