package rajawali.animation; import android.view.animation.Interpolator; import rajawali.BaseObject3D; import rajawali.math.Number3D; public class RotationAnimation3D extends Animation3D { private float mXRotate; private float mYRotate; private float mZRotate; private float mXAnglePrev; private float mYAnglePrev; private float mZAnglePrev; public RotationAnimation3D(float xRotate, float yRotate, float zRotate) { super(); mXRotate = xRotate; mYRotate = yRotate; mZRotate = zRotate; mXAnglePrev = 0; mYAnglePrev = 0; mZAnglePrev = 0; } public RotationAnimation3D(Number3D rotate) { super(); mXRotate = rotate.x; mYRotate = rotate.y; mZRotate = rotate.z; mXAnglePrev = 0; mYAnglePrev = 0; mZAnglePrev = 0; } public RotationAnimation3D(BaseObject3D object, Number3D rotate, long duration, long start, long length, int repeatCount, int repeatMode, Interpolator interpolator) { this(rotate); setTransformable3D(object); setDuration(duration); setStart(start); setLength(length); setRepeatCount(repeatCount); setRepeatMode(repeatMode); setInterpolator(interpolator); } public RotationAnimation3D(BaseObject3D object, float xRotate, float yRotate, float zRotate, long duration, long start, long length, int repeatCount, int repeatMode, Interpolator interpolator) { this(xRotate, yRotate, zRotate); setTransformable3D(object); setDuration(duration); setStart(start); setLength(length); setRepeatCount(repeatCount); setRepeatMode(repeatMode); setInterpolator(interpolator); } @Override protected void applyTransformation(float interpolatedTime) { super.applyTransformation(interpolatedTime); Number3D rotation = mTransformable3D.getRotation(); float xAngleCurrent = (interpolatedTime * mXRotate); float xAngleDelta = rotation.x - mXAnglePrev + xAngleCurrent; mXAnglePrev = xAngleCurrent; float yAngleCurrent = (interpolatedTime * mYRotate); float yAngleDelta = rotation.y - mYAnglePrev + yAngleCurrent; mYAnglePrev = yAngleCurrent; float zAngleCurrent = (interpolatedTime * mZRotate); float zAngleDelta = rotation.z - mZAnglePrev + zAngleCurrent; mZAnglePrev = zAngleCurrent; rotation.x = xAngleDelta; rotation.y = yAngleDelta; rotation.z = zAngleDelta; mTransformable3D.setRotation(rotation); } }