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

📄 listener.cpp

📁 本人刚学游戏编程时开发的一个游戏项目《魔幻森林》中的地图编辑器源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#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 + -