/// <summary>
        ///		Same as the Apply method, but applies to a specified Node instead of it's associated node.
        /// </summary>
        /// <param name="node"></param>
        /// <param name="time"></param>
        /// <param name="weight"></param>
        /// <param name="accumulate"></param>
        public void ApplyToNode(Node node, float time, float weight, bool accumulate, float scale)
        {
            TransformKeyFrame kf = new TransformKeyFrame(null, time);
            this.GetInterpolatedKeyFrame(time, kf);

            if(accumulate) {
                // add to existing. Weights are not relative, but treated as absolute multipliers for the animation
                Vector3 translate = kf.Translate * weight * scale;
                node.Translate(translate);

                // interpolate between not rotation and full rotation, to point weight, so 0 = no rotate, and 1 = full rotation
                Quaternion rotate = Quaternion.Slerp(weight, Quaternion.Identity, kf.Rotation);
                node.Rotate(rotate);

                // TODO: not yet sure how to modify scale for cumulative animations
                Vector3 scaleVector = kf.Scale;
                // Not sure how to modify scale for cumulative anims... leave it alone
                //scaleVector = ((Vector3::UNIT_SCALE - kf.getScale()) * weight) + Vector3::UNIT_SCALE;
                if (scale != 1.0f && scaleVector != Vector3.UnitScale)
                    scaleVector = Vector3.UnitScale + (scaleVector - Vector3.UnitScale) * scale;
                node.Scale(scaleVector);
            }
            else {
                // apply using weighted transform method
                node.WeightedTransform(weight, ref kf.translate, ref kf.rotation, ref kf.scale, false);
            }
        }