亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? inputhandler.cpp

?? 坦克大戰
?? CPP
字號:
#include <Ogre.h>
#include <OIS/OIS.h>
#include <CEGUI/CEGUI.h>
#include <OgreCEGUIRenderer.h>
#include "NxOgre.h"
#include "InputHandler.h"
    
using namespace Ogre;
using namespace NxOgre;

InputHandler::InputHandler(OIS::Keyboard *keyboard, OIS::Mouse *mouse, Application *app)
    : mKeyboard(keyboard),mMouse(mouse),mApp(app)
{
	// key and mouse state tracking
    mMouseDown = false;
    mToggle = 0.0;

    // set the rotation and move speed
    mRotate = 0.10;
    mMove = 200;

	currentCameraHandler = static_cast<CameraHandle> (&InputHandler::freeCameraHandle);
}

bool InputHandler::frameStarted(const FrameEvent& evt)
{
	mMouse->capture();
    mKeyboard->capture();

	// 控制攝像機
	//cameraHandle(evt);
	if(currentCameraHandler)
		(this->*currentCameraHandler)(evt);

	// 控制玩家
	playerHandle(evt);
	// 切換視角
	switchViewHandle(evt);
	// 若是追蹤模式, 調整攝像機
	if(mApp->mViewType == mApp->BACK || mApp->mViewType == mApp->FRONT)
		adjustCamera();


	return !mKeyboard->isKeyDown(OIS::KC_ESCAPE);
}

bool InputHandler::freeCameraHandle(const FrameEvent& evt)
{
	SceneNode* mCamNode = mApp->mCamera->getParentSceneNode();

	Vector3 transVector = Vector3::ZERO;

    if (mKeyboard->isKeyDown(OIS::KC_UP))
        transVector.z -= mMove;
    if (mKeyboard->isKeyDown(OIS::KC_DOWN))
        transVector.z += mMove;

    if (mKeyboard->isKeyDown(OIS::KC_LEFT))
        transVector.x -= mMove;
    if (mKeyboard->isKeyDown(OIS::KC_RIGHT))
        transVector.x += mMove;

    if (mKeyboard->isKeyDown(OIS::KC_PGUP))
        transVector.y += mMove;
    if (mKeyboard->isKeyDown(OIS::KC_PGDOWN))
        transVector.y -= mMove;

    mCamNode->translate(transVector * evt.timeSinceLastFrame, Node::TS_LOCAL);

	if (mMouse->getMouseState().buttonDown(OIS::MB_Right))
    {
        mCamNode->yaw(Degree(-mRotate * mMouse->getMouseState().X.rel), Node::TS_WORLD);
        mCamNode->pitch(Degree(-mRotate * mMouse->getMouseState().Y.rel), Node::TS_LOCAL);
    }

	return true;
}

bool InputHandler::wowCameraHandle(const FrameEvent& evt)
{
	SceneNode* mCamNode = mApp->mCamera->getParentSceneNode();

	Vector3 transVector = Vector3::ZERO;

	if (mMouse->getMouseState().buttonDown(OIS::MB_Right))
    {
		Quaternion q;
		q.FromAngleAxis(Degree(-mRotate * mMouse->getMouseState().X.rel),Vector3::UNIT_Y);
		mCamNode->setPosition(q * mCamNode->getPosition());

		q.FromAngleAxis(Degree(mRotate * mMouse->getMouseState().Y.rel),Vector3::UNIT_Z);
		mCamNode->setPosition(q * mCamNode->getPosition());
    }

	return true;
}

bool InputHandler::playerHandle(const FrameEvent& evt)
{
	Vector3 velocity = mApp->mScene->getActor("player")->getLinearVelocity();
	Real speed = Math::Sqrt(velocity.x * velocity.x + velocity.y * velocity.y + velocity.z * velocity.z);
	if(speed < 1)
		speed = 10;

	Vector3 angular = mApp->mScene->getActor("player")->getAngularVelocity();
	Real angularSpeed = Math::Sqrt(angular.x * angular.x + angular.y * angular.y + angular.z * angular.z);
	if(angularSpeed < 1)
		angularSpeed = 2;

	// 控制角色
	if (mKeyboard->isKeyDown(OIS::KC_W))
		mApp->mScene->getActor("player")->addLocalForce(Vector3(-700000,0,0) * evt.timeSinceLastFrame / speed);
	if (mKeyboard->isKeyDown(OIS::KC_S))
		mApp->mScene->getActor("player")->addLocalForce(Vector3(700000,0,0) * evt.timeSinceLastFrame / speed);
	if (mKeyboard->isKeyDown(OIS::KC_D))
	{
		mApp->mScene->getActor("player")->addLocalTorque(Vector3(0,-300000,0) * evt.timeSinceLastFrame / angularSpeed);
	}
	if (mKeyboard->isKeyDown(OIS::KC_A))
	{
		mApp->mScene->getActor("player")->addLocalTorque(Vector3(0,300000,0) * evt.timeSinceLastFrame / angularSpeed);
	}

	return true;
}

bool InputHandler::switchViewHandle(const FrameEvent& evt)
{
	// F7 -- 自由視角
	if (mKeyboard->isKeyDown(OIS::KC_F7))
    {
		SceneNode* mCamNode = mApp->mCamera->getParentSceneNode();
		mApp->mCamera->getParentSceneNode()->detachObject((unsigned short)0);
		mCamNode = mApp->mSceneMgr->getSceneNode("CameraFree");
		mCamNode->attachObject(mApp->mCamera);
		mApp->mCamera->setAutoTracking(false);
		mApp->mCamera->setOrientation(Quaternion::IDENTITY);

		mApp->mViewType = mApp->FREE;
		currentCameraHandler = static_cast<CameraHandle> (&InputHandler::freeCameraHandle);
    }
	// F8 -- WOW視角
	else if (mKeyboard->isKeyDown(OIS::KC_F8))
    {
		SceneNode* mCamNode = mApp->mCamera->getParentSceneNode();
		mApp->mCamera->getParentSceneNode()->detachObject((unsigned short)0);
		mCamNode = mApp->mSceneMgr->getSceneNode("CameraTrace");
		mCamNode->setPosition(Vector3(30, 15, 0));
		mCamNode->attachObject(mApp->mCamera);

		mApp->mCamera->setAutoTracking(true,mCamNode->getParentSceneNode());

		mApp->mViewType = mApp->WOW;
		currentCameraHandler = static_cast<CameraHandle> (&InputHandler::wowCameraHandle);
    }
	// F9 -- 內部視角
	else if (mKeyboard->isKeyDown(OIS::KC_F9))
    {
		SceneNode* mCamNode = mApp->mCamera->getParentSceneNode();
		mApp->mCamera->getParentSceneNode()->detachObject((unsigned short)0);
		mCamNode = mApp->mSceneMgr->getSceneNode("CameraTrace");
		mCamNode->setPosition(Vector3(0, 5, 4));
		mApp->mCamera->setAutoTracking(false);
		mApp->mCamera->setOrientation(Quaternion::IDENTITY);
		Quaternion q;
		q.FromAngleAxis(Degree(85),Vector3::UNIT_Y);
		mCamNode->setOrientation(q);
		
		mCamNode->attachObject(mApp->mCamera);

		mApp->mViewType = mApp->INTERNAL;
		currentCameraHandler = 0;
    }
	// F10 -- 前置視角
	else if (mKeyboard->isKeyDown(OIS::KC_F10))
    {
		SceneNode* mCamNode = mApp->mCamera->getParentSceneNode();
		mApp->mCamera->getParentSceneNode()->detachObject((unsigned short)0);
		mCamNode = mApp->mSceneMgr->getSceneNode("CameraTrace");
		mCamNode->setPosition(Vector3(-30, 15, 0));
		mCamNode->attachObject(mApp->mCamera);

		mApp->mCamera->setAutoTracking(true,mCamNode->getParentSceneNode());

		mApp->mViewType = mApp->FRONT;
		currentCameraHandler = 0;
    }
	// F11 -- 后置視角
	else if (mKeyboard->isKeyDown(OIS::KC_F11))
    {
		SceneNode* mCamNode = mApp->mCamera->getParentSceneNode();
		mApp->mCamera->getParentSceneNode()->detachObject((unsigned short)0);
		mCamNode = mApp->mSceneMgr->getSceneNode("CameraTrace");
		mCamNode->setPosition(Vector3(30, 15, 0));
		mCamNode->attachObject(mApp->mCamera);

		mApp->mCamera->setAutoTracking(true,mCamNode->getParentSceneNode());

		mApp->mViewType = mApp->BACK;
		currentCameraHandler = 0;
    }
	// F12 -- 飛躍視角
	else if (mKeyboard->isKeyDown(OIS::KC_F12))
    {
		SceneNode* mCamNode = mApp->mCamera->getParentSceneNode();
		SceneNode* playerNode = static_cast<OgreNodeRenderable*>(static_cast<Body*>(mApp->mScene->getActor("player"))->getRenderable())->getNode();
		mApp->mCamera->getParentSceneNode()->detachObject((unsigned short)0);
		mCamNode = mApp->mSceneMgr->getSceneNode("CameraFlyBy");
		mCamNode->setPosition(playerNode->getWorldPosition() 
			+ playerNode->getOrientation() * Quaternion(Degree(30),Vector3::UNIT_Y) * Vector3(-100,20,0));
		mCamNode->attachObject(mApp->mCamera);

		mApp->mCamera->setAutoTracking(true,playerNode);

		mApp->mViewType = mApp->FLY_BY;
		currentCameraHandler = 0;
    }

	return true;
}

void InputHandler::adjustCamera()
{
	SceneNode* mCamNode = mApp->mCamera->getParentSceneNode();
	SceneNode* playerNode = static_cast<OgreNodeRenderable*>(static_cast<Body*>(mApp->mScene->getActor("player"))->getRenderable())->getNode();

	Vector3 direction = playerNode->getOrientation() * Vector3::UNIT_X;
	Vector3 velocity = mApp->mScene->getActor("player")->getLinearVelocity();
	Vector3 angular = mApp->mScene->getActor("player")->getAngularVelocity();

	Real speed = velocity.dotProduct(direction);
	Real angularSpeed = angular.length();

	if( speed < 0.3 )
		speed = 0;
	if( angularSpeed < 0.5 )
		angularSpeed = 0;

	Real adjustDistance = speed * 2;
	if( adjustDistance < -20 )
		adjustDistance = -20;
	else if( adjustDistance > 50 )
		adjustDistance = 50;

	Real adjustYew = angularSpeed * 0.5;
	if( adjustYew > 1 )
		adjustYew = 1;
	Radian ajust_yew(adjustYew);

	if( mApp->mViewType == mApp->FRONT )
	{
		mCamNode->setPosition(Vector3( 30 - adjustDistance, 15, 0 ));

		Quaternion q;
		q.FromAngleAxis(-ajust_yew,Vector3::UNIT_Y);
		mCamNode->setPosition(q * mCamNode->getPosition());
	}
	if( mApp->mViewType == mApp->BACK )
	{
		mCamNode->setPosition(Vector3( - 30 + adjustDistance, 15, 0 ));

		Quaternion q;
		q.FromAngleAxis(ajust_yew,Vector3::UNIT_Y);
		mCamNode->setPosition(q * mCamNode->getPosition());
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩电影一二三区| 久久久亚洲国产美女国产盗摄| 国产在线精品一区二区夜色 | 在线亚洲+欧美+日本专区| 丁香桃色午夜亚洲一区二区三区| 蜜臀久久99精品久久久画质超高清 | 欧美三级视频在线| 欧美综合天天夜夜久久| 一本久久a久久精品亚洲| 91浏览器打开| 欧美性高清videossexo| 欧美日韩国产在线播放网站| 欧美日韩高清一区二区不卡| 欧美日韩一区二区三区不卡| 91麻豆精品国产91久久久久久 | 欧美极品xxx| 国产精品美女久久久久久2018| 国产精品毛片久久久久久| 成人免费一区二区三区视频 | 91美女片黄在线观看91美女| 欧美在线三级电影| 欧美一区二区三区婷婷月色| 欧美大片一区二区| 久久奇米777| 一区二区在线观看免费视频播放| 亚洲综合在线免费观看| 免费在线观看不卡| 丰满放荡岳乱妇91ww| 欧美伊人精品成人久久综合97| 6080日韩午夜伦伦午夜伦| 久久久精品天堂| 亚洲特级片在线| 免费黄网站欧美| 成人精品国产一区二区4080| 色天使久久综合网天天| 日韩精品自拍偷拍| 一区二区三区四区在线| 久久99久久久久| 色婷婷激情综合| 2023国产精品自拍| 亚洲国产精品麻豆| 国产福利一区二区三区在线视频| 色哟哟欧美精品| 国产日产欧美一区| 日本亚洲三级在线| 91极品美女在线| 久久久久久久久久久黄色| 亚洲一区国产视频| 粉嫩一区二区三区在线看| 日韩网站在线看片你懂的| 亚洲欧美区自拍先锋| 国产乱码精品一区二区三区五月婷| 91久久线看在观草草青青| 国产区在线观看成人精品| 麻豆久久一区二区| 欧美性猛片aaaaaaa做受| 中文字幕在线观看一区二区| 精品一二三四区| 7777精品伊人久久久大香线蕉经典版下载 | 日本伊人精品一区二区三区观看方式| 成人av第一页| 久久久国产精华| 美女尤物国产一区| 欧美日韩精品一区二区三区四区| 亚洲欧美综合色| www.日韩精品| 国产精品免费视频一区| 国产综合色在线| 精品国产伦一区二区三区观看体验 | 中文字幕乱码一区二区免费| 激情另类小说区图片区视频区| 欧美日韩一区二区欧美激情| 亚洲一级二级在线| 91福利在线免费观看| 亚洲女同女同女同女同女同69| 成人动漫av在线| 国产精品卡一卡二| 成人性视频免费网站| 日本一区二区动态图| 国产成人8x视频一区二区| 国产亲近乱来精品视频| 国产**成人网毛片九色| 国产精品美女久久久久久久网站| 国产不卡一区视频| 亚洲欧洲av色图| 色综合久久综合中文综合网| 亚洲美女区一区| 欧美日高清视频| 蜜桃在线一区二区三区| 久久久一区二区| 成人高清免费在线播放| 一区二区三区资源| 7777精品伊人久久久大香线蕉完整版 | 欧美午夜精品免费| 日日夜夜精品视频免费| 精品福利在线导航| 国产乱码精品1区2区3区| 国产精品久久久久影院老司| 在线亚洲人成电影网站色www| 日韩二区三区在线观看| 久久久美女毛片| 日本高清不卡一区| 精品中文av资源站在线观看| 中文字幕一区二区三区在线观看| 日本韩国欧美一区| 国产一区二区三区免费观看| 国产精品初高中害羞小美女文| 欧美日韩国产美女| 国产精品18久久久久久久网站| 中文字幕一区二区日韩精品绯色| 欧美精三区欧美精三区| 国产精品99久久不卡二区| 亚洲一区免费在线观看| 久久久国产精品不卡| 欧美三级电影网| 粉嫩高潮美女一区二区三区 | 精品精品欲导航| 色欧美日韩亚洲| 国产一区二区0| 一区二区三区欧美亚洲| 久久久影视传媒| 欧美日韩高清一区| 国产不卡在线播放| 日韩电影一区二区三区| 亚洲色图在线播放| 久久九九国产精品| 欧美一区二区日韩一区二区| 北条麻妃一区二区三区| 激情五月婷婷综合| 日本v片在线高清不卡在线观看| 国产精品国产精品国产专区不片| 日韩欧美中文字幕精品| 欧美系列亚洲系列| 99热这里都是精品| 国产成人av自拍| 免费国产亚洲视频| 日本美女一区二区三区| 亚洲综合色噜噜狠狠| 亚洲国产高清在线| 国产午夜精品福利| 日韩精品一区二区三区视频在线观看| 欧美视频一区二区在线观看| 99国产精品视频免费观看| 国产麻豆成人传媒免费观看| 麻豆国产精品777777在线| 亚洲成人一二三| 图片区小说区国产精品视频| 一区二区三区在线影院| 一区二区三区欧美日韩| 亚洲综合在线第一页| 亚洲免费视频中文字幕| 亚洲欧美经典视频| 亚洲男人天堂一区| 亚洲综合在线视频| 午夜精品久久久久久久99水蜜桃 | 国产日产欧美一区二区三区| 久久亚洲二区三区| 国产片一区二区| 亚洲日本乱码在线观看| 一区二区三区四区国产精品| 亚洲综合色视频| 青青草伊人久久| 韩国成人精品a∨在线观看| 国产一区在线观看视频| 国产精品资源在线观看| av资源网一区| 91精彩视频在线| 日韩一区二区三区在线| 国产视频视频一区| 国产精品久久久久影院| 一区二区三区在线高清| 视频在线在亚洲| 韩国理伦片一区二区三区在线播放| 狠狠色伊人亚洲综合成人| 成人一区二区三区在线观看| 色呦呦国产精品| 91精品国产黑色紧身裤美女| www国产成人免费观看视频 深夜成人网 | 午夜精品一区二区三区电影天堂| 日本va欧美va精品发布| 国产精一区二区三区| 一本高清dvd不卡在线观看| 欧美日韩国产综合久久| 国产日韩高清在线| 亚洲综合另类小说| 国产一区二区三区四| 91丨九色丨黑人外教| 日韩免费看的电影| 亚洲男人天堂av网| 国产精品自在在线| 欧美日韩国产美| 成人欧美一区二区三区黑人麻豆| 天天综合色天天综合| 成人涩涩免费视频| 日韩美女主播在线视频一区二区三区| 亚洲欧洲成人精品av97| 久久www免费人成看片高清| 在线一区二区三区做爰视频网站| 日韩精品最新网址| 丝袜诱惑制服诱惑色一区在线观看|