コード例 #1
0
ファイル: MyFrameListener.cpp プロジェクト: bjerkins/GEDE2014
	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;
	}