Ejemplo n.º 1
0
	bool InputWrapper::IsMouseButtonReleased(eMouseButtons aButton) const
	{
		if ((MOUSEBUTTONDOWN(aButton, myPreviousMouseState)) && (MOUSEBUTTONUP(aButton, myMouseState)))
		{
			return true;
		}
		return false;
	}
Ejemplo n.º 2
0
	bool InputWrapper::IsMouseButtonDown(eMouseButtons aButton) const
	{
		if (MOUSEBUTTONDOWN(aButton, myMouseState))
		{
			return true;
		}
		else
		{
			return false;
		}
	}
Ejemplo n.º 3
0
void MoonScene::GetMouseInput(DIMOUSESTATE* MouseState, float fElapsedTime)
{
	// if the rightbutton of mouse is down
	if(MOUSEBUTTONDOWN(MouseState->rgbButtons[MOUSEBUTTON_RIGHT]))
	{
		MoonShowCursor(false);

		int tempx = MouseState->lX%2000;
		int tempy = MouseState->lY%2000;
		D3DXVECTOR3 pos, up, look;

		_Camera->yaw(tempx/200.0f);

		// 将上下旋转的范围控制在一定程度,当摄像机从头顶上往下看时,此时再接收正向输入(即tempy>0),摄像机就会从头顶上这一边
		// 滑到另一边。而当摄像机从脚底往上看时,再接收负向输入,摄像机就会从脚底这一边滑到另一边,因此这两情况都要阻止发生。此外
		// 还不能让摄像机没入地形下。
		_Camera->getPosition(&pos);
		_Camera->getUp(&up);
		_Camera->getLook(&look);
		if(((pos.y-2.0f) <= _theTerrain->getHeight(pos.x, pos.z))
			&& (tempy <= 0))
			;//在摄像机快要没入地形下时不再接收tempy的负向输入
		else if((up.y <= 0.02f) && (look.y > 0.0f) && (tempy <= 0))
			;//在摄像机快要完全朝上时不再接收tempy的负向输入
		else if((up.y <= 0.02f) && (look.y < 0.0f) && (tempy >= 0))
			;//在摄像机快要完全朝下时不再接收tempy的正向输入
		else
			_Camera->pitch(tempy/200.0f);
	}
	else
	{
		MoonShowCursor(true);
	}
	if(_Camera->getType() == MoonCamera::RPG && MouseState->lZ != 0)
	{
		// 要将视距的远近控制在一定范围内
		float distance = _Camera->getDistance();
		if(distance >= 6.0f && distance <= 80.0f)
			_Camera->adjustDistance(MouseState->lZ/30.0f);

		distance = _Camera->getDistance();
		if(distance > 80.0f)
			_Camera->setDistance(80.0f);
		else if(distance < 6.0f)
			_Camera->setDistance(6.0f);
	}
}
Ejemplo n.º 4
0
HRESULT MoonChildApp::FrameMove(void)
{
	POINT pos;
	GetCursorPos(&pos);
	bool bTemp;
	if(MOUSEBUTTONDOWN(m_MouseState.rgbButtons[0]))
		bTemp = true;
	else
		bTemp = false;
	if(m_bWindowed)
	{
		int ntemp = (m_rcWindowBounds.right-m_rcWindowClient.right-m_rcWindowBounds.left)/2;
		pos.x-=(ntemp+m_rcWindowBounds.left);
		pos.y+=(m_rcWindowClient.bottom-m_rcWindowBounds.bottom+ntemp);
	}

	if(_AppState == MAINMENU && _StartPanel)
	{
		DWORD value = _StartPanel->Test(pos.x,pos.y,bTemp);
		if(value == ID_EXIT)
		{
			SendMessage( m_hWnd, WM_CLOSE, 0, 0 );
		}
		else if(value == ID_OK)
		{
			_AppState=LOADING;
			/*g_data.theapp=this;
			g_data.state = INSCENE;
			CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)LoadScene,
				NULL, 0, NULL);*/
		}
		else if(value == ID_ABOUT)
		{
			_AppState=ABOUT;
		}
	}
	else if(_AppState == INSCENE)
	{
		if(theScene)
		{
			if(theScene->GetKeyboardInput(m_KeyboardState, m_fElapsedTime)==ID_EXIT)
			{
				theScene->InvalidateDeviceObjects();
				theScene->DeleteDeviceObjects();
				theScene->Cleanup();
				_AppState=GAMETOMENU;
				return S_OK;
			}
			theScene->GetMouseInput(&m_MouseState, m_fElapsedTime);
			theScene->FrameMove(m_fElapsedTime, m_fTime);
		}
	}
	else if(_AppState == LOADING)
	{
		_StartPanel->Destroy();
		theScene->Initialize(&m_d3dCaps, _scnname.c_str());
		theScene->InitDeviceObjects(m_pDevice);
		theScene->RestoreDeviceObjects();
		_AppState = INSCENE;
	}
	else if(_AppState == GAMETOMENU)
	{
		if(m_bWindowed)
		{
			_StartPanel->Create(m_pDevice,"start.pnl",m_rcWindowClient.right,m_rcWindowClient.bottom,_Font);
		}
		else
		{
			_StartPanel->Create(m_pDevice,"start.pnl",m_cMoonSetting.m_nWidth,m_cMoonSetting.m_nHeight,_Font);
		}
		_AppState = MAINMENU;
	}
	else if(_AppState == ABOUT)
	{
		if(_AboutPanel->Test(pos.x,pos.y,bTemp)==ID_EXIT)
			_AppState = MAINMENU;
	}

	return S_OK;
}