| 748 | } |
| 749 | |
| 750 | void afxCamera::processTick(const Move* move) |
| 751 | { |
| 752 | Parent::processTick(move); |
| 753 | Point3F vec,pos; |
| 754 | |
| 755 | // move will be NULL unless camera becomes the control object as in FlyMode |
| 756 | if (move) |
| 757 | { |
| 758 | // UPDATE ORIENTATION // |
| 759 | mDelta.rotVec = mRot; |
| 760 | mObjToWorld.getColumn(3, &mDelta.posVec); |
| 761 | mRot.x = mClampF(mRot.x + move->pitch, -MaxPitch, MaxPitch); |
| 762 | mRot.z += move->yaw; |
| 763 | |
| 764 | // ORBIT MODE // |
| 765 | if (mMode == OrbitObjectMode || mMode == OrbitPointMode) |
| 766 | { |
| 767 | if(mMode == OrbitObjectMode && bool(mOrbitObject)) |
| 768 | { |
| 769 | // If this is a shapebase, use its render eye transform |
| 770 | // to avoid jittering. |
| 771 | GameBase *castObj = mOrbitObject; |
| 772 | ShapeBase* shape = dynamic_cast<ShapeBase*>(castObj); |
| 773 | if( shape != NULL ) { |
| 774 | MatrixF ret; |
| 775 | shape->getRenderEyeTransform( &ret ); |
| 776 | mPosition = ret.getPosition(); |
| 777 | } |
| 778 | else |
| 779 | { |
| 780 | // Hopefully this is a static object that doesn't move, |
| 781 | // because the worldbox doesn't get updated between ticks. |
| 782 | mOrbitObject->getWorldBox().getCenter(&mPosition); |
| 783 | } |
| 784 | } |
| 785 | set_cam_pos(mPosition, mRot); |
| 786 | validateEyePoint(1.0f, &mObjToWorld); |
| 787 | pos = mPosition; |
| 788 | } |
| 789 | |
| 790 | // NON-ORBIT MODE (FLY MODE) // |
| 791 | else // if (mode == FlyMode) |
| 792 | { |
| 793 | // Update pos |
| 794 | bool faster = move->trigger[0] || move->trigger[1]; |
| 795 | F32 scale = Camera::getMovementSpeed() * (faster + 1); |
| 796 | |
| 797 | mObjToWorld.getColumn(3,&pos); |
| 798 | mObjToWorld.getColumn(0,&vec); |
| 799 | pos += vec * move->x * TickSec * scale; |
| 800 | mObjToWorld.getColumn(1,&vec); |
| 801 | pos += vec * move->y * TickSec * scale; |
| 802 | mObjToWorld.getColumn(2,&vec); |
| 803 | pos += vec * move->z * TickSec * scale; |
| 804 | set_cam_pos(pos,mRot); |
| 805 | } |
| 806 | |
| 807 | // If on the client, calc delta for backstepping |
nothing calls this directly
no test coverage detected