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 ArmatureInstance(ArmatureTemplate template) { _NodeTemplates = template.Nodes; var ni = new NodeInstance[_NodeTemplates.Count]; for (var i = 0; i < ni.Length; ++i) { var n = _NodeTemplates[i]; var p = n.ParentIndex < 0 ? null : ni[n.ParentIndex]; ni[i] = new NodeInstance(n, p); } _NodeInstances = ni; _AnimationTracks = template.Tracks; }
internal NodeInstance(NodeTemplate template, NodeInstance parent) { _Template = template; _Parent = parent; }