⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listener.cpp

📁 本人刚学游戏编程时开发的一个游戏项目《魔幻森林》中的地图编辑器源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				{
					std::pair<bool ,Real> pairAB = SelectRay.intersects(m_sceneMgr->getSceneNode(m_vecCamera[i].name)->_getWorldAABB());
					if(pairAB.first)
					{
						m_snCurrentObject=m_sceneMgr->getSceneNode(m_vecCamera[i].name);
						m_snCurrentObject->showBoundingBox(true);
						bSelect=true;
						break;
					}
				}
			}
		}
	}
	if(convertOgreButtonToCegui(e->getButtonID())==1 && m_iObjectType!=0)
	{
		m_iObjectType=0;
		m_snCurrentObject->setVisible(false);
		m_snCurrentObject=NULL;
	}
}
void CListener::mouseReleased (MouseEvent *e)
{
    CEGUI::System::getSingleton().injectMouseButtonUp(convertOgreButtonToCegui(e->getButtonID()));
	e->consume();
}
void CListener::mouseClicked(MouseEvent* e){}
void CListener::mouseEntered(MouseEvent* e){}
void CListener::mouseExited(MouseEvent* e){}
void CListener::keyFocusIn(KeyEvent* e){}
void CListener::keyPressed(KeyEvent* e)
{
	if(e->getKey()==KC_ESCAPE)
	{
		exit();
	}
	if(e->getKey()==KC_1 && m_iObjectType==0)
	{
		selectTree();
	}
	if(e->getKey()==KC_2 && m_iObjectType==0)
	{
		selectRock();
	}
	if(e->getKey()==KC_3 && m_iObjectType==0)
	{
		selectGrass();
	}
	if(e->getKey()==KC_4 && m_iObjectType==0)
	{
		selectFlower();
	}
	if(e->getKey()==KC_5 && m_iObjectType==0)
	{
		selectHouse();
	}
	if(e->getKey()==KC_6 && m_iObjectType==0)
	{
		selectCamera();
	}
	if(e->getKey()==KC_RETURN)
	{
        saveMap();
	}
	if(e->getKey()==KC_L)
	{
		loadMap();
	}
	if(e->getKey()==KC_UP)
	{
        m_bNegativeScale=false;
	}
	if(e->getKey()==KC_DOWN)
	{
		m_bNegativeScale=true;
	}
	if(e->getKey()==KC_LEFT && m_snCurrentObject!=NULL && m_iObjectType==0)
	{
		m_snCurrentObject->yaw((Radian)-0.1f);
		//树
		for(int i=0 ; i<m_vecTree.size() ; i++)
		{
			if(m_vecTree[i].name==m_snCurrentObject->getName())
			{
				m_vecTree[i].angleY-=0.1f;
				break;
			}
		}
		//石头
		for(int i=0 ; i<m_vecRock.size() ; i++)
		{
			if(m_vecRock[i].name==m_snCurrentObject->getName())
			{
				m_vecRock[i].angleY-=0.1f;
				break;
			}
		}
		//草
		for(int i=0 ; i<m_vecGrass.size() ; i++)
		{
			if(m_vecGrass[i].name==m_snCurrentObject->getName())
			{
				m_vecGrass[i].angleY-=0.1f;
				break;
			}
		}
		//花
		for(int i=0 ; i<m_vecFlower.size() ; i++)
		{
			if(m_vecFlower[i].name==m_snCurrentObject->getName())
			{
				m_vecFlower[i].angleY-=0.1f;
				break;
			}
		}
		//房子
		for(int i=0 ; i<m_vecHouse.size() ; i++)
		{
			if(m_vecHouse[i].name==m_snCurrentObject->getName())
			{
				m_vecHouse[i].angleY-=0.1f;
				break;
			}
		}
		//摄像机
		for(int i=0 ; i<m_vecCamera.size() ; i++)
		{
			if(m_vecCamera[i].name==m_snCurrentObject->getName())
			{
				m_vecCamera[i].angleY-=0.1f;
				break;
			}
		}
	}
	if(e->getKey()==KC_RIGHT && m_snCurrentObject!=NULL && m_iObjectType==0)
	{
		m_snCurrentObject->yaw((Radian)0.1f);
		//树
		for(int i=0 ; i<m_vecTree.size() ; i++)
		{
			if(m_vecTree[i].name==m_snCurrentObject->getName())
			{
				m_vecTree[i].angleY+=0.1f;
				break;
			}
		}
		//石头
		for(int i=0 ; i<m_vecRock.size() ; i++)
		{
			if(m_vecRock[i].name==m_snCurrentObject->getName())
			{
				m_vecRock[i].angleY+=0.1f;
				break;
			}
		}
		//草
		for(int i=0 ; i<m_vecGrass.size() ; i++)
		{
			if(m_vecGrass[i].name==m_snCurrentObject->getName())
			{
				m_vecGrass[i].angleY+=0.1f;
				break;
			}
		}
		//花
		for(int i=0 ; i<m_vecFlower.size() ; i++)
		{
			if(m_vecFlower[i].name==m_snCurrentObject->getName())
			{
				m_vecFlower[i].angleY+=0.1f;
				break;
			}
		}
		//房子
		for(int i=0 ; i<m_vecHouse.size() ; i++)
		{
			if(m_vecHouse[i].name==m_snCurrentObject->getName())
			{
				m_vecHouse[i].angleY+=0.1f;
				break;
			}
		}
		//摄像机
		for(int i=0 ; i<m_vecCamera.size() ; i++)
		{
			if(m_vecCamera[i].name==m_snCurrentObject->getName())
			{
				m_vecCamera[i].angleY+=0.1f;
				break;
			}
		}
	}

	if((e->getKey()==KC_X || e->getKey()==KC_Y || e->getKey()==KC_Z) && m_snCurrentObject!=NULL && m_iObjectType==0)
	{
		float unitScale=0,scaleX=0,scaleY=0,scaleZ=0;
		if(m_bNegativeScale)
		{
			unitScale=0.9f;
		}
		else
		{
            unitScale=1.1f;
		}
		if(e->getKey()==KC_X)
		{
            scaleX=unitScale;
			scaleY=1;
			scaleZ=1;
		}
		if(e->getKey()==KC_Y)
		{
			scaleX=1;
			scaleY=unitScale;
			scaleZ=1;
		}
		if(e->getKey()==KC_Z)
		{
			scaleX=1;
			scaleY=1;
			scaleZ=unitScale;
		}
		m_snCurrentObject->scale(scaleX,scaleY,scaleZ);
	


		//树
		for(int i=0 ; i<m_vecTree.size() ; i++)
		{
			if(m_vecTree[i].name==m_snCurrentObject->getName())
			{
				m_vecTree[i].scale=m_snCurrentObject->getScale();
				break;
			}
		}
		//石头
		for(int i=0 ; i<m_vecRock.size() ; i++)
		{
			if(m_vecRock[i].name==m_snCurrentObject->getName())
			{
				m_vecRock[i].scale=m_snCurrentObject->getScale();
				break;
			}
		}
		//草
		for(int i=0 ; i<m_vecGrass.size() ; i++)
		{
			if(m_vecGrass[i].name==m_snCurrentObject->getName())
			{
				m_vecGrass[i].scale=m_snCurrentObject->getScale();
				break;
			}
		}
		//花
		for(int i=0 ; i<m_vecFlower.size() ; i++)
		{
			if(m_vecFlower[i].name==m_snCurrentObject->getName())
			{
				m_vecFlower[i].scale=m_snCurrentObject->getScale();
				break;
			}
		}
		//房子
		for(int i=0 ; i<m_vecHouse.size() ; i++)
		{
			if(m_vecHouse[i].name==m_snCurrentObject->getName())
			{
				m_vecHouse[i].scale=m_snCurrentObject->getScale();
				break;
			}
		}
		//摄像机
		for(int i=0 ; i<m_vecCamera.size() ; i++)
		{
			if(m_vecCamera[i].name==m_snCurrentObject->getName())
			{
				m_vecCamera[i].scale=m_snCurrentObject->getScale();
				break;
			}
		}
	}
	if(e->getKey()==KC_DELETE && m_snCurrentObject!=NULL && m_iObjectType==0)
	{
        m_snCurrentObject->showBoundingBox(false);
		bool bDelete=false;
		//树
		for(int i=0 ; i<m_vecTree.size() ; i++)
		{
			if(m_vecTree[i].name==m_snCurrentObject->getName())
			{
					
				m_sceneMgr->destroyEntity(m_vecTree[i].name);
				m_sceneMgr->destroySceneNode(m_vecTree[i].name);
				m_snCurrentObject=NULL;
				m_iTreeCount--;
				m_vecTree.erase(&m_vecTree[i]);
				bDelete=true;
				break;
			}
		}
		if(bDelete!=true)
		{
			//石头
			for(int i=0 ; i<m_vecRock.size() ; i++)
			{
				if(m_vecRock[i].name==m_snCurrentObject->getName())
				{

					m_sceneMgr->destroyEntity(m_vecRock[i].name);
					m_sceneMgr->destroySceneNode(m_vecRock[i].name);
					m_snCurrentObject=NULL;
					m_iRockCount--;
					m_vecRock.erase(&m_vecRock[i]);
					bDelete=true;
					break;
				}
			}
		}
		//草
		if(bDelete!=true)
		{
			
			for(int i=0 ; i<m_vecGrass.size() ; i++)
			{
				if(m_vecGrass[i].name==m_snCurrentObject->getName())
				{

					m_sceneMgr->destroyEntity(m_vecGrass[i].name);
					m_sceneMgr->destroySceneNode(m_vecGrass[i].name);
					m_snCurrentObject=NULL;
					m_iGrassCount--;
					m_vecGrass.erase(&m_vecGrass[i]);
					bDelete=true;
					break;
				}
			}
		}
		//花
		if(bDelete!=true)
		{	
			for(int i=0 ; i<m_vecFlower.size() ; i++)
			{
				if(m_vecFlower[i].name==m_snCurrentObject->getName())
				{

					m_sceneMgr->destroyEntity(m_vecFlower[i].name);
					m_sceneMgr->destroySceneNode(m_vecFlower[i].name);
					m_snCurrentObject=NULL;
					m_iFlowerCount--;
					m_vecFlower.erase(&m_vecFlower[i]);
					bDelete=true;
					break;
				}
			}
		}
		//房子
		if(bDelete!=true)
		{
			for(int i=0 ; i<m_vecHouse.size() ; i++)
			{
				if(m_vecHouse[i].name==m_snCurrentObject->getName())
				{

					m_sceneMgr->destroyEntity(m_vecHouse[i].name);
					m_sceneMgr->destroySceneNode(m_vecHouse[i].name);
					m_snCurrentObject=NULL;
					m_iHouseCount--;
					m_vecHouse.erase(&m_vecHouse[i]);
					bDelete=true;
					break;
				}
			}
		}
		//摄像机
		if(bDelete!=true)
		{
			for(int i=0 ; i<m_vecCamera.size() ; i++)
			{
				if(m_vecCamera[i].name==m_snCurrentObject->getName())
				{

					m_sceneMgr->destroyEntity(m_vecCamera[i].name);
					m_sceneMgr->destroySceneNode(m_vecCamera[i].name);
					m_snCurrentObject=NULL;
					m_iCameraCount--;
					m_vecCamera.erase(&m_vecCamera[i]);
					bDelete=true;
					break;
				}
			}
		}
	}
}
void CListener::keyReleased(KeyEvent* e){}
void CListener::keyClicked(KeyEvent* e){}
CEGUI::MouseButton CListener::convertOgreButtonToCegui(int buttonID)
{
	switch (buttonID)
	{
	case MouseEvent::BUTTON0_MASK:
		return CEGUI::LeftButton;
	case MouseEvent::BUTTON1_MASK:
		return CEGUI::RightButton;
	case MouseEvent::BUTTON2_MASK:
		return CEGUI::MiddleButton;
	case MouseEvent::BUTTON3_MASK:
		return CEGUI::X1Button;
	default:
		return CEGUI::LeftButton;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -