📄 listener.cpp
字号:
{
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 + -