| 820 | //---------------------------------------------------------------------------- |
| 821 | |
| 822 | void Camera::interpolateTick(F32 dt) |
| 823 | { |
| 824 | Parent::interpolateTick(dt); |
| 825 | |
| 826 | if ( isMounted() ) |
| 827 | return; |
| 828 | |
| 829 | Point3F rot = mDelta.rot + mDelta.rotVec * dt; |
| 830 | |
| 831 | if((mMode == OrbitObjectMode || mMode == OrbitPointMode) && !mNewtonMode) |
| 832 | { |
| 833 | if(mMode == OrbitObjectMode && bool(mOrbitObject)) |
| 834 | { |
| 835 | // If this is a shapebase, use its render eye transform |
| 836 | // to avoid jittering. |
| 837 | GameBase *castObj = mOrbitObject; |
| 838 | ShapeBase* shape = dynamic_cast<ShapeBase*>(castObj); |
| 839 | if( shape != NULL ) |
| 840 | { |
| 841 | MatrixF ret; |
| 842 | shape->getRenderEyeTransform( &ret ); |
| 843 | mPosition = ret.getPosition(); |
| 844 | } |
| 845 | else |
| 846 | { |
| 847 | // Hopefully this is a static object that doesn't move, |
| 848 | // because the worldbox doesn't get updated between ticks. |
| 849 | mOrbitObject->getWorldBox().getCenter(&mPosition); |
| 850 | } |
| 851 | } |
| 852 | _setRenderPosition( mPosition + mOffset, rot ); |
| 853 | _validateEyePoint( 1.0f, &mRenderObjToWorld ); |
| 854 | } |
| 855 | else if(mMode == EditOrbitMode && mValidEditOrbitPoint) |
| 856 | { |
| 857 | mPosition = mEditOrbitPoint; |
| 858 | _setRenderPosition(mPosition, rot); |
| 859 | _calcEditOrbitPoint(&mRenderObjToWorld, rot); |
| 860 | } |
| 861 | else if(mMode == TrackObjectMode && bool(mOrbitObject) && !mNewtonRotation) |
| 862 | { |
| 863 | // orient the camera to face the object |
| 864 | Point3F objPos; |
| 865 | // If this is a shapebase, use its render eye transform |
| 866 | // to avoid jittering. |
| 867 | ShapeBase *shape = dynamic_cast<ShapeBase*>((GameBase*)mOrbitObject); |
| 868 | if( shape != NULL ) |
| 869 | { |
| 870 | MatrixF ret; |
| 871 | shape->getRenderEyeTransform( &ret ); |
| 872 | objPos = ret.getPosition(); |
| 873 | } |
| 874 | else |
| 875 | { |
| 876 | mOrbitObject->getWorldBox().getCenter(&objPos); |
| 877 | } |
| 878 | Point3F pos = mDelta.pos + mDelta.posVec * dt; |
| 879 | Point3F vec = objPos - pos; |
nothing calls this directly
no test coverage detected