bool frameStarted(const FrameEvent& evt) { Ogre::Vector3 translate(0,0,0); _keyboard->capture(); _mouse -> capture(); if( _joyStick ) _joyStick->capture(); bool walked = false; Ogre::Vector3 SinbadTranslate(0, 0, 0); // If the joystick is not available, use the keyboard as input. if (!_joyStick) { if (_keyboard->isKeyDown(OIS::KC_UP)) { _walkMagnitude = 1; } else if (_keyboard->isKeyDown(OIS::KC_DOWN)) { _walkMagnitude = -1; } else { _walkMagnitude = 0; } if (_keyboard->isKeyDown(OIS::KC_LEFT)) { _turnMagnitude = 1; } else if (_keyboard->isKeyDown(OIS::KC_RIGHT)) { _turnMagnitude = -1; } else { _turnMagnitude = 0; } } // Create the translation vector. SinbadTranslate = _ogreNode->getOrientation().zAxis() * evt.timeSinceLastFrame * _movementspeed * _walkMagnitude; walked = true; // Increment the roation angle. _orientation += evt.timeSinceLastFrame * _turnMagnitude*2; // Now finally apply the rotation and translation. _ogreNode->translate(SinbadTranslate); _ogreNode->setOrientation(Ogre::Quaternion(Ogre::Radian(_orientation), Ogre::Vector3::UNIT_Y)); if (_keyboard->isKeyDown(KC_ESCAPE)) { return false; } if (_keyboard->isKeyDown(KC_W)) translate += Ogre::Vector3(0,0,-1); if (_keyboard->isKeyDown(KC_S)) translate += Ogre::Vector3(0,0,1); if (_keyboard->isKeyDown(KC_A)) translate += Ogre::Vector3(-1,0,0); if (_keyboard->isKeyDown(KC_D)) translate += Ogre::Vector3(1,0,0); _cam->moveRelative(translate*evt.timeSinceLastFrame * _movementspeed); float rotX = _mouse->getMouseState().X.rel * evt.timeSinceLastFrame * -1; float rotY = _mouse->getMouseState().Y.rel * evt.timeSinceLastFrame * -1; _cam->yaw(Radian(rotX)); _cam->pitch(Radian(rotY)); _cylEffect->update(0.1f); _cam->setPosition(_ogreNode->getPosition()+Ogre::Vector3(20.0f*Ogre::Math::Cos(_camAngle), 10.0f, 20.0f*Ogre::Math::Sin(_camAngle))); _cam->lookAt(_ogreNode->getPosition()); return true; }