package rajawali.animation; import rajawali.ATransformable3D; import rajawali.math.Number3D; import rajawali.math.Number3D.Axis; import rajawali.math.Quaternion; public class RotateAnimation3D extends Animation3D { protected float mDegreesToRotate; protected float mRotateFrom; protected float mRotationAngle; protected Number3D mRotationAxis; protected Quaternion mQuat; protected Quaternion mQuatFrom; protected boolean mCopyCurrentOrientation; public RotateAnimation3D(Axis axis, float degreesToRotate) { this(axis, 0, degreesToRotate); mCopyCurrentOrientation = true; } public RotateAnimation3D(Axis axis, float rotateFrom, float degreesToRotate ) { this(Number3D.getAxisVector(axis), rotateFrom, degreesToRotate); } public RotateAnimation3D(Number3D axis, float degreesToRotate ) { this(axis, 0, degreesToRotate); mCopyCurrentOrientation = true; } public RotateAnimation3D(Number3D axis, float rotateFrom, float degreesToRotate ) { super(); mQuat = new Quaternion(); mQuatFrom = new Quaternion(); mQuatFrom.fromAngleAxis(rotateFrom, axis); mRotationAxis = axis; mRotateFrom = rotateFrom; mDegreesToRotate = degreesToRotate; } @Override public void start() { if(mCopyCurrentOrientation) mQuatFrom.setAllFrom(mTransformable3D.getOrientation()); super.start(); } @Override public void setTransformable3D(ATransformable3D transformable3D) { super.setTransformable3D(transformable3D); if(mCopyCurrentOrientation) mQuatFrom.setAllFrom(transformable3D.getOrientation()); } @Override protected void applyTransformation(float interpolatedTime) { super.applyTransformation(interpolatedTime); mRotationAngle = mRotateFrom + (interpolatedTime * mDegreesToRotate); mQuat.fromAngleAxis(mRotationAngle, mRotationAxis); mQuat.multiply(mQuatFrom); mTransformable3D.setOrientation(mQuat); } /** * @deprecated use RotateAnimation3D(axis, degreesToRotate) or RotateAnimation(axis, rotateFrom, degreesToRotate) * @param toRotate */ @Deprecated public RotateAnimation3D(Number3D toRotate) { } /** * @deprecated use RotateAnimation3D(axis, degreesToRotate) or RotateAnimation(axis, rotateFrom, degreesToRotate) * @param fromRotate * @param toRotate */ @Deprecated public RotateAnimation3D(Number3D fromRotate, Number3D toRotate) { } }