📄 listener.cpp
字号:
#include ".\listener.h"
CListener::CListener(SceneManager* sm,RenderWindow* win , Camera* cam , CEGUI::OgreCEGUIRenderer* mGUIRenderer):ExampleFrameListener(win,cam,true,true)
{
m_sceneMgr=sm;
m_bShutDown=false;
m_bNegativeScale=false;
mMoveScale = 100;
m_pRaySceneQuery=m_sceneMgr->createRayQuery(Ray(Vector3(500,500,500), Vector3::NEGATIVE_UNIT_Y));
m_iTreeCount=0;
m_iRockCount=0;
m_iGrassCount=0;
m_iFlowerCount=0;
m_iHouseCount=0;
m_iCameraCount=0;
m_iObjectType=0; //0:空 1:树 2:石头 3:草 4:花 5:房子 6:摄像机
m_pSnTreeRoot=m_sceneMgr->getRootSceneNode()->createChildSceneNode("treeRoot"); //树根结点
m_GUIRenderer=mGUIRenderer;
m_snCurrentObject=NULL;
//树
m_snTree=m_sceneMgr->getRootSceneNode()->createChildSceneNode("tree");
m_snTree->attachObject(m_sceneMgr->createEntity("tree", "tree.mesh"));
m_snTree->translate(0,0,0);
m_snTree->setVisible(false);
//石头
m_snRock=m_sceneMgr->getRootSceneNode()->createChildSceneNode("rock");
m_snRock->attachObject(m_sceneMgr->createEntity("rock", "st.mesh"));
m_snRock->translate(0,0,0);
m_snRock->setVisible(false);
//草
m_snGrass=m_sceneMgr->getRootSceneNode()->createChildSceneNode("grass");
m_snGrass->attachObject(m_sceneMgr->createEntity("grass", "grass.mesh"));
m_snGrass->scale(2,2,2);
m_snGrass->translate(0,0,0);
m_snGrass->setVisible(false);
//花
m_snFlower=m_sceneMgr->getRootSceneNode()->createChildSceneNode("flower");
m_snFlower->attachObject(m_sceneMgr->createEntity("flower", "grass.mesh"));
m_snFlower->scale(2,2,2);
m_snFlower->translate(0,0,0);
m_snFlower->setVisible(false);
//房子
m_snHouse=m_sceneMgr->getRootSceneNode()->createChildSceneNode("House");
m_snHouse->attachObject(m_sceneMgr->createEntity("House", "grass.mesh"));
m_snHouse->scale(2,2,2);
m_snHouse->translate(0,0,0);
m_snHouse->setVisible(false);
//摄像机
m_snCamera=m_sceneMgr->getRootSceneNode()->createChildSceneNode("camera");
m_snCamera->attachObject(m_sceneMgr->createEntity("camera", "grass.mesh"));
m_snCamera->scale(2,2,2);
m_snCamera->translate(0,0,0);
m_snCamera->setVisible(false);
mEventProcessor->addMouseMotionListener(this);
mEventProcessor->addMouseListener(this);
mEventProcessor->addKeyListener(this);
}
CListener::~CListener(void)
{
}
void CListener::exit()
{
m_bShutDown=true;
}
void CListener::saveMap()
{
//删除旧文件
std::ofstream fileout1(".\\MagicForest.map");
fileout1.clear();
fileout1.close();
//保存物体总数
char cCount[20];
//树
sprintf(cCount, "%d", m_iTreeCount);
WritePrivateProfileString("treeCount" , "num" ,cCount , ".\\MagicForest.map");
//石头
sprintf(cCount, "%d", m_iRockCount);
WritePrivateProfileString("rockCount" , "num" ,cCount , ".\\MagicForest.map");
//草
sprintf(cCount, "%d", m_iGrassCount);
WritePrivateProfileString("grassCount" , "num" ,cCount , ".\\MagicForest.map");
//花
sprintf(cCount, "%d", m_iFlowerCount);
WritePrivateProfileString("flowerCount" , "num" ,cCount , ".\\MagicForest.map");
//房子
sprintf(cCount, "%d", m_iHouseCount);
WritePrivateProfileString("houseCount" , "num" ,cCount , ".\\MagicForest.map");
//摄像机
sprintf(cCount, "%d", m_iCameraCount);
WritePrivateProfileString("cameraCount" , "num" ,cCount , ".\\MagicForest.map");
//保存物体信息
//树
for(int i=0 ; i<m_vecTree.size() ; 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, "tree%d", i+1);
sprintf(cPosX, "%f", m_vecTree[i].pos.x);
sprintf(cPosY, "%f", m_vecTree[i].pos.y);
sprintf(cPosZ, "%f", m_vecTree[i].pos.z);
sprintf(cScaleX, "%f", m_vecTree[i].scale.x);
sprintf(cScaleY, "%f", m_vecTree[i].scale.y);
sprintf(cScaleZ, "%f", m_vecTree[i].scale.z);
sprintf(cAngleY, "%f", m_vecTree[i].angleY);
WritePrivateProfileString(tmp , "posX" ,cPosX , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "posY" ,cPosY , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "posZ" ,cPosZ , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "scaleX" ,cScaleX , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "scaleY" ,cScaleY , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "scaleZ" ,cScaleZ , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "angleY" ,cAngleY , ".\\MagicForest.map");
}
//石头
for(int i=0 ; i<m_vecRock.size() ; 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, "rock%d", i+1);
sprintf(cPosX, "%f", m_vecRock[i].pos.x);
sprintf(cPosY, "%f", m_vecRock[i].pos.y);
sprintf(cPosZ, "%f", m_vecRock[i].pos.z);
sprintf(cScaleX, "%f", m_vecRock[i].scale.x);
sprintf(cScaleY, "%f", m_vecRock[i].scale.y);
sprintf(cScaleZ, "%f", m_vecRock[i].scale.z);
sprintf(cAngleY, "%f", m_vecRock[i].angleY);
WritePrivateProfileString(tmp , "posX" ,cPosX , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "posY" ,cPosY , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "posZ" ,cPosZ , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "scaleX" ,cScaleX , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "scaleY" ,cScaleY , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "scaleZ" ,cScaleZ , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "angleY" ,cAngleY , ".\\MagicForest.map");
}
//草
for(int i=0 ; i<m_vecGrass.size() ; 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, "grass%d", i+1);
sprintf(cPosX, "%f", m_vecGrass[i].pos.x);
sprintf(cPosY, "%f", m_vecGrass[i].pos.y);
sprintf(cPosZ, "%f", m_vecGrass[i].pos.z);
sprintf(cScaleX, "%f", m_vecGrass[i].scale.x);
sprintf(cScaleY, "%f", m_vecGrass[i].scale.y);
sprintf(cScaleZ, "%f", m_vecGrass[i].scale.z);
sprintf(cAngleY, "%f", m_vecGrass[i].angleY);
WritePrivateProfileString(tmp , "posX" ,cPosX , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "posY" ,cPosY , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "posZ" ,cPosZ , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "scaleX" ,cScaleX , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "scaleY" ,cScaleY , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "scaleZ" ,cScaleZ , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "angleY" ,cAngleY , ".\\MagicForest.map");
}
//花
for(int i=0 ; i<m_vecFlower.size() ; 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);
sprintf(cPosX, "%f", m_vecFlower[i].pos.x);
sprintf(cPosY, "%f", m_vecFlower[i].pos.y);
sprintf(cPosZ, "%f", m_vecFlower[i].pos.z);
sprintf(cScaleX, "%f", m_vecFlower[i].scale.x);
sprintf(cScaleY, "%f", m_vecFlower[i].scale.y);
sprintf(cScaleZ, "%f", m_vecFlower[i].scale.z);
sprintf(cAngleY, "%f", m_vecFlower[i].angleY);
WritePrivateProfileString(tmp , "posX" ,cPosX , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "posY" ,cPosY , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "posZ" ,cPosZ , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "scaleX" ,cScaleX , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "scaleY" ,cScaleY , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "scaleZ" ,cScaleZ , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "angleY" ,cAngleY , ".\\MagicForest.map");
}
//房子
for(int i=0 ; i<m_vecHouse.size() ; 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);
sprintf(cPosX, "%f", m_vecHouse[i].pos.x);
sprintf(cPosY, "%f", m_vecHouse[i].pos.y);
sprintf(cPosZ, "%f", m_vecHouse[i].pos.z);
sprintf(cScaleX, "%f", m_vecHouse[i].scale.x);
sprintf(cScaleY, "%f", m_vecHouse[i].scale.y);
sprintf(cScaleZ, "%f", m_vecHouse[i].scale.z);
sprintf(cAngleY, "%f", m_vecHouse[i].angleY);
WritePrivateProfileString(tmp , "posX" ,cPosX , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "posY" ,cPosY , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "posZ" ,cPosZ , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "scaleX" ,cScaleX , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "scaleY" ,cScaleY , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "scaleZ" ,cScaleZ , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "angleY" ,cAngleY , ".\\MagicForest.map");
}
//摄像机
for(int i=0 ; i<m_vecCamera.size() ; 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);
sprintf(cPosX, "%f", m_vecCamera[i].pos.x);
sprintf(cPosY, "%f", m_vecCamera[i].pos.y);
sprintf(cPosZ, "%f", m_vecCamera[i].pos.z);
sprintf(cScaleX, "%f", m_vecCamera[i].scale.x);
sprintf(cScaleY, "%f", m_vecCamera[i].scale.y);
sprintf(cScaleZ, "%f", m_vecCamera[i].scale.z);
sprintf(cAngleY, "%f", m_vecCamera[i].angleY);
WritePrivateProfileString(tmp , "posX" ,cPosX , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "posY" ,cPosY , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "posZ" ,cPosZ , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "scaleX" ,cScaleX , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "scaleY" ,cScaleY , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "scaleZ" ,cScaleZ , ".\\MagicForest.map");
WritePrivateProfileString(tmp , "angleY" ,cAngleY , ".\\MagicForest.map");
}
//显示保存成功
MessageBox(NULL,"地图已成功保存在MagicForest.map里!","保存地图",0);
}
void CListener::loadMap()
{
//删除当前数据
m_snCurrentObject=NULL;
//树
for(int i=0 ; i<m_vecTree.size() ; i++)
{
m_sceneMgr->destroySceneNode(m_vecTree[i].name);
m_sceneMgr->destroyEntity(m_vecTree[i].name);
}
m_vecTree.clear();
m_iTreeCount=0;
//石头
for(int i=0 ; i<m_vecRock.size() ; i++)
{
m_sceneMgr->destroySceneNode(m_vecRock[i].name);
m_sceneMgr->destroyEntity(m_vecRock[i].name);
}
m_vecRock.clear();
m_iRockCount=0;
//草
for(int i=0 ; i<m_vecGrass.size() ; i++)
{
m_sceneMgr->destroySceneNode(m_vecGrass[i].name);
m_sceneMgr->destroyEntity(m_vecGrass[i].name);
}
m_vecGrass.clear();
m_iGrassCount=0;
//花
for(int i=0 ; i<m_vecFlower.size() ; i++)
{
m_sceneMgr->destroySceneNode(m_vecFlower[i].name);
m_sceneMgr->destroyEntity(m_vecFlower[i].name);
}
m_vecFlower.clear();
m_iFlowerCount=0;
//房子
for(int i=0 ; i<m_vecHouse.size() ; i++)
{
m_sceneMgr->destroySceneNode(m_vecHouse[i].name);
m_sceneMgr->destroyEntity(m_vecHouse[i].name);
}
m_vecHouse.clear();
m_iHouseCount=0;
//摄像机
for(int i=0 ; i<m_vecCamera.size() ; i++)
{
m_sceneMgr->destroySceneNode(m_vecCamera[i].name);
m_sceneMgr->destroyEntity(m_vecCamera[i].name);
}
m_vecCamera.clear();
m_iCameraCount=0;
//读取物体总数
char cCount[20];
//树
GetPrivateProfileString("treeCount" , "num" , "\0" , cCount , 20 , ".\\MagicForest.map");
m_iTreeCount=(int)atof(cCount);
//石头
GetPrivateProfileString("rockCount" , "num" , "\0" , cCount , 20 , ".\\MagicForest.map");
m_iRockCount=(int)atof(cCount);
//草
GetPrivateProfileString("grassCount" , "num" , "\0" , cCount , 20 , ".\\MagicForest.map");
m_iGrassCount=(int)atof(cCount);
//花
GetPrivateProfileString("flowerCount" , "num" , "\0" , cCount , 20 , ".\\MagicForest.map");
m_iFlowerCount=(int)atof(cCount);
//房子
GetPrivateProfileString("houseCount" , "num" , "\0" , cCount , 20 , ".\\MagicForest.map");
m_iHouseCount=(int)atof(cCount);
//摄像机
GetPrivateProfileString("cameraCount" , "num" , "\0" , cCount , 20 , ".\\MagicForest.map");
m_iCameraCount=(int)atof(cCount);
//创建场景
//树
for(int i=0 ; i<m_iTreeCount ; 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, "tree%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* snTree=NULL;
snTree=m_sceneMgr->getRootSceneNode()->createChildSceneNode(tmp);
snTree->attachObject(m_sceneMgr->createEntity(tmp, "tree.mesh"));
snTree->scale((float)atof(cScaleX),(float)atof(cScaleY),(float)atof(cScaleZ));
snTree->yaw((Radian)atof(cAngleY));
snTree->translate((float)atof(cPosX) ,(float)atof(cPosY) , (float)atof(cPosZ));
MAPOBJECT tmpTree;
tmpTree.name=tmp;
tmpTree.pos=snTree->getPosition();
tmpTree.scale=snTree->getScale();
tmpTree.angleY=(float)atof(cAngleY);
m_vecTree.push_back(tmpTree);
}
//石头
for(int i=0 ; i<m_iRockCount ; 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, "rock%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* snRock=NULL;
snRock=m_sceneMgr->getRootSceneNode()->createChildSceneNode(tmp);
snRock->attachObject(m_sceneMgr->createEntity(tmp, "st.mesh"));
snRock->scale((float)atof(cScaleX),(float)atof(cScaleY),(float)atof(cScaleZ));
snRock->yaw((Radian)atof(cAngleY));
snRock->translate((float)atof(cPosX) ,(float)atof(cPosY) , (float)atof(cPosZ));
MAPOBJECT tmpRock;
tmpRock.name=tmp;
tmpRock.pos=snRock->getPosition();
tmpRock.scale=snRock->getScale();
tmpRock.angleY=(float)atof(cAngleY);
m_vecRock.push_back(tmpRock);
}
//草
for(int i=0 ; i<m_iGrassCount ; i++)
{
char cPosX[20];
char cPosY[20];
char cPosZ[20];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -