📄 listener.cpp
字号:
char cScaleX[20];
char cScaleY[20];
char cScaleZ[20];
char cAngleY[20];
char tmp[20];
sprintf(tmp, "grass%d", i+1);
GetPrivateProfileString(tmp , "posX" , "\0" , cPosX , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "posY" , "\0" , cPosY , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "posZ" , "\0" , cPosZ , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "scaleX" , "\0" , cScaleX , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "scaleY" , "\0" , cScaleY , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "scaleZ" , "\0" , cScaleZ , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "angleY" , "\0" , cAngleY , 20 ,".\\MagicForest.map");
SceneNode* snGrass=NULL;
snGrass=m_sceneMgr->getRootSceneNode()->createChildSceneNode(tmp);
snGrass->attachObject(m_sceneMgr->createEntity(tmp, "grass.mesh"));
snGrass->scale((float)atof(cScaleX),(float)atof(cScaleY),(float)atof(cScaleZ));
snGrass->yaw((Radian)atof(cAngleY));
snGrass->translate((float)atof(cPosX) ,(float)atof(cPosY) , (float)atof(cPosZ));
MAPOBJECT tmpGrass;
tmpGrass.name=tmp;
tmpGrass.pos=snGrass->getPosition();
tmpGrass.scale=snGrass->getScale();
tmpGrass.angleY=(float)atof(cAngleY);
m_vecGrass.push_back(tmpGrass);
}
//花
for(int i=0 ; i<m_iFlowerCount ; i++)
{
char cPosX[20];
char cPosY[20];
char cPosZ[20];
char cScaleX[20];
char cScaleY[20];
char cScaleZ[20];
char cAngleY[20];
char tmp[20];
sprintf(tmp, "flower%d", i+1);
GetPrivateProfileString(tmp , "posX" , "\0" , cPosX , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "posY" , "\0" , cPosY , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "posZ" , "\0" , cPosZ , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "scaleX" , "\0" , cScaleX , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "scaleY" , "\0" , cScaleY , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "scaleZ" , "\0" , cScaleZ , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "angleY" , "\0" , cAngleY , 20 ,".\\MagicForest.map");
SceneNode* snFlower=NULL;
snFlower=m_sceneMgr->getRootSceneNode()->createChildSceneNode(tmp);
snFlower->attachObject(m_sceneMgr->createEntity(tmp, "grass.mesh"));
snFlower->scale((float)atof(cScaleX),(float)atof(cScaleY),(float)atof(cScaleZ));
snFlower->yaw((Radian)atof(cAngleY));
snFlower->translate((float)atof(cPosX) ,(float)atof(cPosY) , (float)atof(cPosZ));
MAPOBJECT tmpFlower;
tmpFlower.name=tmp;
tmpFlower.pos=snFlower->getPosition();
tmpFlower.scale=snFlower->getScale();
tmpFlower.angleY=(float)atof(cAngleY);
m_vecFlower.push_back(tmpFlower);
}
//房子
for(int i=0 ; i<m_iHouseCount ; i++)
{
char cPosX[20];
char cPosY[20];
char cPosZ[20];
char cScaleX[20];
char cScaleY[20];
char cScaleZ[20];
char cAngleY[20];
char tmp[20];
sprintf(tmp, "house%d", i+1);
GetPrivateProfileString(tmp , "posX" , "\0" , cPosX , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "posY" , "\0" , cPosY , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "posZ" , "\0" , cPosZ , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "scaleX" , "\0" , cScaleX , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "scaleY" , "\0" , cScaleY , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "scaleZ" , "\0" , cScaleZ , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "angleY" , "\0" , cAngleY , 20 ,".\\MagicForest.map");
SceneNode* snHouse=NULL;
snHouse=m_sceneMgr->getRootSceneNode()->createChildSceneNode(tmp);
snHouse->attachObject(m_sceneMgr->createEntity(tmp, "grass.mesh"));
snHouse->scale((float)atof(cScaleX),(float)atof(cScaleY),(float)atof(cScaleZ));
snHouse->yaw((Radian)atof(cAngleY));
snHouse->translate((float)atof(cPosX) ,(float)atof(cPosY) , (float)atof(cPosZ));
MAPOBJECT tmpHouse;
tmpHouse.name=tmp;
tmpHouse.pos=snHouse->getPosition();
tmpHouse.scale=snHouse->getScale();
tmpHouse.angleY=(float)atof(cAngleY);
m_vecHouse.push_back(tmpHouse);
}
//摄像机
for(int i=0 ; i<m_iCameraCount ; i++)
{
char cPosX[20];
char cPosY[20];
char cPosZ[20];
char cScaleX[20];
char cScaleY[20];
char cScaleZ[20];
char cAngleY[20];
char tmp[20];
sprintf(tmp, "camera%d", i+1);
GetPrivateProfileString(tmp , "posX" , "\0" , cPosX , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "posY" , "\0" , cPosY , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "posZ" , "\0" , cPosZ , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "scaleX" , "\0" , cScaleX , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "scaleY" , "\0" , cScaleY , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "scaleZ" , "\0" , cScaleZ , 20 ,".\\MagicForest.map");
GetPrivateProfileString(tmp , "angleY" , "\0" , cAngleY , 20 ,".\\MagicForest.map");
SceneNode* snCamera=NULL;
snCamera=m_sceneMgr->getRootSceneNode()->createChildSceneNode(tmp);
snCamera->attachObject(m_sceneMgr->createEntity(tmp, "grass.mesh"));
snCamera->scale((float)atof(cScaleX),(float)atof(cScaleY),(float)atof(cScaleZ));
snCamera->yaw((Radian)atof(cAngleY));
snCamera->translate((float)atof(cPosX) ,(float)atof(cPosY) , (float)atof(cPosZ));
MAPOBJECT tmpCamera;
tmpCamera.name=tmp;
tmpCamera.pos=snCamera->getPosition();
tmpCamera.scale=snCamera->getScale();
tmpCamera.angleY=(float)atof(cAngleY);
m_vecCamera.push_back(tmpCamera);
}
MessageBox(NULL,"MagicForest.map载入成功!","地图载入",0);
}
void CListener::selectTree()
{
m_iObjectType=1;
m_snTree->setVisible(true);
m_snCurrentObject=m_snTree;
}
void CListener::selectRock()
{
m_iObjectType=2;
m_snRock->setVisible(true);
m_snCurrentObject=m_snRock;
}
void CListener::selectGrass()
{
m_iObjectType=3;
m_snGrass->setVisible(true);
m_snCurrentObject=m_snGrass;
}
void CListener::selectFlower()
{
m_iObjectType=4;
m_snFlower->setVisible(true);
m_snCurrentObject=m_snFlower;
}
void CListener::selectHouse()
{
m_iObjectType=5;
m_snHouse->setVisible(true);
m_snCurrentObject=m_snHouse;
}
void CListener::selectCamera()
{
m_iObjectType=6;
m_snCamera->setVisible(true);
m_snCurrentObject=m_snCamera;
}
bool CListener::frameStarted(const FrameEvent& evt)
{
ExampleFrameListener::frameStarted(evt);
if (mInputDevice->isKeyDown(KC_W))
{
moveCamera(0,0,Vector3(0,0,-10));
}
if (mInputDevice->isKeyDown(KC_S))
{
moveCamera(0,0,Vector3(0,0,10));
}
if (mInputDevice->isKeyDown(KC_A))
{
moveCamera(0,0,Vector3(-10,0,0));
}
if (mInputDevice->isKeyDown(KC_D))
{
moveCamera(0,0,Vector3(10,0,0));
}
if(m_bShutDown)
{
return false;
}
if(mWindow->isClosed())
{
return false;
}
return true;
}
bool CListener::frameEnded(const FrameEvent& evt)
{
updateStats();
return true;
}
void CListener::mouseDragged(MouseEvent* e)
{
CEGUI::System::getSingleton().injectMouseMove(
e->getRelX() * m_GUIRenderer->getWidth(),
e->getRelY() * m_GUIRenderer->getHeight());
e->consume();
moveCamera(e->getRelX()*2,e->getRelY()*2);
}
void CListener::mouseMoved(MouseEvent* e)
{
CEGUI::System::getSingleton().injectMouseMove(e->getRelX() * m_GUIRenderer->getWidth(), e->getRelY() * m_GUIRenderer->getHeight());
e->consume();
if(m_iObjectType!=0)
{
Ray mouseRay = mCamera->getCameraToViewportRay(e->getX(),e->getY());
m_pRaySceneQuery->setRay(mouseRay);
RaySceneQueryResult &result = m_pRaySceneQuery->execute();
RaySceneQueryResult::iterator itr = result.begin();
if (itr != result.end() && itr->worldFragment)
{
m_snCurrentObject->setPosition(itr->worldFragment->singleIntersection);
}
}
}
void CListener::mousePressed (MouseEvent *e)
{
CEGUI::System::getSingleton().injectMouseButtonDown(convertOgreButtonToCegui(e->getButtonID()));
e->consume();
if(convertOgreButtonToCegui(e->getButtonID())==0)
{
//树
if(m_iObjectType==1)
{
char tmp[20];
sprintf(tmp, "tree%d", ++m_iTreeCount); //命名不重复
SceneNode* snTree=m_sceneMgr->getRootSceneNode()->createChildSceneNode(tmp);
snTree->attachObject(m_sceneMgr->createEntity(tmp, "tree.mesh"));
snTree->scale(float(rand()%30+71)/100.0f,float(rand()%60+41)/100.0f,float(rand()%30+71)/100.0f);
snTree->translate(m_snTree->getPosition());
MAPOBJECT tmpTree;
tmpTree.name=tmp;
tmpTree.pos=snTree->getPosition();
tmpTree.scale=snTree->getScale();
tmpTree.angleY=0;
m_vecTree.push_back(tmpTree);
}
//石头
if(m_iObjectType==2)
{
char tmp[20];
sprintf(tmp, "rock%d", ++m_iRockCount); //命名不重复
SceneNode* snRock=m_sceneMgr->getRootSceneNode()->createChildSceneNode(tmp);
snRock->attachObject(m_sceneMgr->createEntity(tmp, "st.mesh"));
snRock->scale(1,1,1);
snRock->translate(m_snRock->getPosition());
MAPOBJECT tmpRock;
tmpRock.name=tmp;
tmpRock.pos=snRock->getPosition();
tmpRock.scale=snRock->getScale();
tmpRock.angleY=0;
m_vecRock.push_back(tmpRock);
}
//草
if(m_iObjectType==3)
{
char tmp[20];
sprintf(tmp, "grass%d", ++m_iGrassCount); //命名不重复
SceneNode* snGrass=m_sceneMgr->getRootSceneNode()->createChildSceneNode(tmp);
snGrass->attachObject(m_sceneMgr->createEntity(tmp, "grass.mesh"));
snGrass->scale(2,2,2);
snGrass->translate(m_snGrass->getPosition());
MAPOBJECT tmpGrass;
tmpGrass.name=tmp;
tmpGrass.pos=snGrass->getPosition();
tmpGrass.scale=snGrass->getScale();
tmpGrass.angleY=0;
m_vecGrass.push_back(tmpGrass);
}
//花
if(m_iObjectType==4)
{
char tmp[20];
sprintf(tmp, "flower%d", ++m_iFlowerCount); //命名不重复
SceneNode* snFlower=m_sceneMgr->getRootSceneNode()->createChildSceneNode(tmp);
snFlower->attachObject(m_sceneMgr->createEntity(tmp, "grass.mesh"));
snFlower->scale(2,2,2);
snFlower->translate(m_snFlower->getPosition());
MAPOBJECT tmpFlower;
tmpFlower.name=tmp;
tmpFlower.pos=snFlower->getPosition();
tmpFlower.scale=snFlower->getScale();
tmpFlower.angleY=0;
m_vecFlower.push_back(tmpFlower);
}
//房子
if(m_iObjectType==5)
{
char tmp[20];
sprintf(tmp, "house%d", ++m_iHouseCount); //命名不重复
SceneNode* snHouse=m_sceneMgr->getRootSceneNode()->createChildSceneNode(tmp);
snHouse->attachObject(m_sceneMgr->createEntity(tmp, "grass.mesh"));
snHouse->scale(2,2,2);
snHouse->translate(m_snHouse->getPosition());
MAPOBJECT tmpHouse;
tmpHouse.name=tmp;
tmpHouse.pos=snHouse->getPosition();
tmpHouse.scale=snHouse->getScale();
tmpHouse.angleY=0;
m_vecHouse.push_back(tmpHouse);
}
//摄像机
if(m_iObjectType==6)
{
char tmp[20];
sprintf(tmp, "camera%d", ++m_iCameraCount); //命名不重复
SceneNode* snCamera=m_sceneMgr->getRootSceneNode()->createChildSceneNode(tmp);
snCamera->attachObject(m_sceneMgr->createEntity(tmp, "grass.mesh"));
snCamera->scale(2,2,2);
snCamera->translate(m_snCamera->getPosition());
MAPOBJECT tmpCamera;
tmpCamera.name=tmp;
tmpCamera.pos=snCamera->getPosition();
tmpCamera.scale=snCamera->getScale();
tmpCamera.angleY=0;
m_vecCamera.push_back(tmpCamera);
}
if(m_iObjectType==0)
{
if(m_snCurrentObject!=NULL)
{
m_snCurrentObject->showBoundingBox(false);
}
//得到一条从摄像机发出的射线
Ray SelectRay = mCamera->getCameraToViewportRay(e->getX(),e->getY());
bool bSelect=false;
//树
for(int i=0 ; i<m_vecTree.size() ; i++)
{
std::pair<bool ,Real> pairAB = SelectRay.intersects(m_sceneMgr->getSceneNode(m_vecTree[i].name)->_getWorldAABB());
if(pairAB.first)
{
m_snCurrentObject=m_sceneMgr->getSceneNode(m_vecTree[i].name);
m_snCurrentObject->showBoundingBox(true);
bSelect=true;
break;
}
}
//石头
if(bSelect!=true)
{
for(int i=0 ; i<m_vecRock.size() ; i++)
{
std::pair<bool ,Real> pairAB = SelectRay.intersects(m_sceneMgr->getSceneNode(m_vecRock[i].name)->_getWorldAABB());
if(pairAB.first)
{
m_snCurrentObject=m_sceneMgr->getSceneNode(m_vecRock[i].name);
m_snCurrentObject->showBoundingBox(true);
bSelect=true;
break;
}
}
}
//草
if(bSelect!=true)
{
for(int i=0 ; i<m_vecGrass.size() ; i++)
{
std::pair<bool ,Real> pairAB = SelectRay.intersects(m_sceneMgr->getSceneNode(m_vecGrass[i].name)->_getWorldAABB());
if(pairAB.first)
{
m_snCurrentObject=m_sceneMgr->getSceneNode(m_vecGrass[i].name);
m_snCurrentObject->showBoundingBox(true);
bSelect=true;
break;
}
}
}
//花
if(bSelect!=true)
{
for(int i=0 ; i<m_vecFlower.size() ; i++)
{
std::pair<bool ,Real> pairAB = SelectRay.intersects(m_sceneMgr->getSceneNode(m_vecFlower[i].name)->_getWorldAABB());
if(pairAB.first)
{
m_snCurrentObject=m_sceneMgr->getSceneNode(m_vecFlower[i].name);
m_snCurrentObject->showBoundingBox(true);
bSelect=true;
break;
}
}
}
//房子
if(bSelect!=true)
{
for(int i=0 ; i<m_vecHouse.size() ; i++)
{
std::pair<bool ,Real> pairAB = SelectRay.intersects(m_sceneMgr->getSceneNode(m_vecHouse[i].name)->_getWorldAABB());
if(pairAB.first)
{
m_snCurrentObject=m_sceneMgr->getSceneNode(m_vecHouse[i].name);
m_snCurrentObject->showBoundingBox(true);
bSelect=true;
break;
}
}
}
//摄像机
if(bSelect!=true)
{
for(int i=0 ; i<m_vecCamera.size() ; i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -