/// <summary> /// Same as the Apply method, but applies to a specified Node instead of it's associated node. /// </summary> public void ApplyToNode( Node node, float time, float weight, bool accumulate, float scale ) { 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.ScaleBy( scaleVector ); } else { // apply using weighted transform method node.WeightedTransform( weight, kf.Translate, kf.Rotation, kf.Scale ); } }