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

📄 scenelayer.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
字号:
//-------------------------------------------------------
// SceneLayer.cpp
//-------------------------------------------------------
#include "SceneLayer.h"
#include "2DMapSceneObj.h"
#include "2DMapPuzzleObj.h"
#include "3DGameMap.h"
//-------------------------------------------------------
CSceneLayer::CSceneLayer()
{
	m_setMapObj.clear();
}
//-------------------------------------------------------
CSceneLayer::~CSceneLayer()
{
	int nAmount = m_setMapObj.size();
	for(int i = 0; i < nAmount; i++)
	{
		CMapObj* pObj = m_setMapObj[i];
		SAFE_DELETE(pObj);
	}
	m_setMapObj.clear();
}
//-------------------------------------------------------------
void CSceneLayer::Show(CMyPos posShow)
{
	LayerShowInfo infoShow;
	//算出自己的视口
	//1.取标准视口中心点
	CMyPos posView;
	g_objGameMap.GetViewPos(posView);
	posView.x += _SCR_WIDTH/2;
	posView.y += _SCR_HEIGHT/2;

	//2.算出中心点
	CMySize sizeMap;
	g_objGameMap.GetMapSize(sizeMap);
	CMyPos posCenter;
	posCenter.x         =sizeMap.iWidth*_CELL_WIDTH/2;
	posCenter.y         =sizeMap.iHeight*_CELL_HEIGHT/2;
	//3.算出标准视口点与中心点之间的偏移
	CMyPos posOffset;
	posOffset.x = posView.x - posCenter.x;
	posOffset.y = posView.y - posCenter.y;
	//4.算出自己视口中心点与中心点之间的偏移
	CMyPos posMyView;
	posMyView.x = posCenter.x + posOffset.x * this->GetMoveRateX()/100;
	posMyView.y = posCenter.y + posOffset.y * this->GetMoveRateY()/100;

	posMyView.x -= _SCR_WIDTH/2;
	posMyView.y -= _SCR_HEIGHT/2;
	infoShow.posViewPoint = posMyView;
	infoShow.nMoveRateX = this->GetMoveRateX();
	infoShow.nMoveRateY = this->GetMoveRateY();

	int nAmount = m_setMapObj.size();
	for(int i = 0; i < nAmount; i++)
	{
		CMapObj* pObj = m_setMapObj[i];
		if(pObj)
			pObj->Show(&infoShow);
	}
}
//-------------------------------------------------------------
void CSceneLayer::Process(void* pInfo)
{
	int nAmount = m_setMapObj.size();
	for(int i = 0; i < nAmount; i++)
	{
		CMapObj* pObj = m_setMapObj[i];
		if(pObj)
			pObj->Process(NULL);
	}
}
//-------------------------------------------------------------
int  CSceneLayer::GetType()
{
	return LAYER_SCENE;
}
//-------------------------------------------------------------
CSceneLayer* CSceneLayer::CreateNew()
{
	CSceneLayer* pLayer = new CSceneLayer;
	return pLayer;
}
//-------------------------------------------------------------
void CSceneLayer::AddObj(CMapObj* pMapObj)
{
	if(!pMapObj)
		return;
	m_setMapObj.push_back(pMapObj);
}
//-------------------------------------------------------------
void CSceneLayer::SaveDataLayer(FILE* fp)
{
	if(!fp)
		return;
	int nAmount = m_setMapObj.size();
	int nRateX, nRateY;
	nRateX = this->GetMoveRateX();
	nRateY = this->GetMoveRateY();
	
	fwrite(&nRateX, sizeof(int), 1, fp);
	fwrite(&nRateY, sizeof(int), 1, fp);
	fwrite(&nAmount, sizeof(int), 1, fp);
	for(int i = 0; i < nAmount; i++)
	{
		CMapObj* pObj = m_setMapObj[i];
		if(pObj)
		{
			switch(pObj->GetObjType())
			{
			case MAP_SCENE:
				{
					int nObjType = MAP_SCENE;
					fwrite(&nObjType, sizeof(int), 1, fp);
					C2DMapSceneObj* pSceneObj = (C2DMapSceneObj*)pObj;
					pSceneObj->SaveDataObj(fp);
				}
				break;
			case MAP_PUZZLE:
				{
					int nObjType = MAP_PUZZLE;
					fwrite(&nObjType, sizeof(int), 1, fp);
					C2DMapPuzzleObj* pPuzzleObj = (C2DMapPuzzleObj*)pObj;
					pPuzzleObj->SaveData(fp);
				}
				break;
			default:
				break;
			}
		}
	}
}
//-------------------------------------------------------------

void CSceneLayer::LoadDataLayer(FILE* fp)
{
	if(!fp)
		return;
    int nRateX, nRateY;
    fread(&nRateX, sizeof(int), 1, fp);
    fread(&nRateY, sizeof(int), 1, fp);
    this->SetMoveRateX(nRateX);
    this->SetMoveRateY(nRateY);
	int nAmount = 0;
	fread(&nAmount, sizeof(int), 1, fp);
	
	for(int i = 0; i < nAmount; i++)
	{
		// get obj type
		int nMapObjType;
		fread(&nMapObjType, sizeof(int), 1, fp);
		
		switch(nMapObjType)
		{
		case MAP_SCENE:
			{
				C2DMapSceneObj* pSceneObj = new C2DMapSceneObj;
				if(pSceneObj)
				{
					pSceneObj->LoadDataObj(fp);
					this->AddObj(pSceneObj);
				}
			}
			break;
		case MAP_PUZZLE:
			{
				C2DMapPuzzleObj* pPuzzleObj = new C2DMapPuzzleObj;
				if(pPuzzleObj)
				{
					pPuzzleObj->LoadData(fp);
					this->AddObj(pPuzzleObj);
				}
			}
			break;
		default:
			break;
		}
	}
	
	
}
//-------------------------------------------------------------
void CSceneLayer::DelObj(CMapObj* pObj)
{
	if(!pObj)
		return;
	int nAmount = m_setMapObj.size();
	for(int i = 0; i < nAmount; i++)
	{
		if(pObj == m_setMapObj[i])
		{
			SAFE_DELETE(pObj);
		}
		m_setMapObj.erase(m_setMapObj.begin()+i);
	}
}
//-------------------------------------------------------------
CMapObj* CSceneLayer::GetFocusObj()
{
	int nAmount = m_setMapObj.size();
	for(int i = 0; i < nAmount; i++)
	{
		CMapObj* pObj = m_setMapObj[i];
		if(!pObj)
			continue;
		switch(pObj->GetObjType())
		{
		case CMapLayer::LAYER_SCENE:
			{
				C2DMapSceneObj* pSceneObj = (C2DMapSceneObj*)pObj;
				if(pSceneObj->IsFocus())
					return  pSceneObj;
			}
			break;
		default:
			break;
		}
	}
	return NULL;
}
//-------------------------------------------------------------
void CSceneLayer::SaveTextLayer(FILE* fp)
{
        if(!fp)
                return;

        int nAmount = m_setMapObj.size();
        fprintf(fp, "========SceneLayer ObjAmount=%d========\n", nAmount);
        fprintf(fp, "MoveRate[%d,%d]\n", this->GetMoveRateX(), this->GetMoveRateY());

        for(int i = 0; i < nAmount; i++)
        {
                CMapObj* pObj = m_setMapObj[i];
                if(pObj)
                {
                        switch(pObj->GetObjType())
                        {
                                case MAP_SCENE:
                                {
                                        fprintf(fp, "========ObjType=%d========\n", MAP_SCENE);
                                        C2DMapSceneObj* pSceneObj = (C2DMapSceneObj*)pObj;
                                        pSceneObj->SaveTextObj(fp);
                                }
                                break;
                                case MAP_PUZZLE:
                                {
                                        fprintf(fp, "========ObjType=%d========\n", MAP_PUZZLE);
                                        C2DMapPuzzleObj* pPuzzleObj = (C2DMapPuzzleObj*)pObj;
                                        pPuzzleObj->SaveText(fp);

                                }
                                break;
                                default:
                                break;
                        }
                }
        }
}
//-------------------------------------------------------------
void CSceneLayer::LoadTextLayer(FILE* fp)
{
        if(!fp)
                return;
        int nAmount;
        fscanf(fp, "========SceneLayer ObjAmount=%d========\n", &nAmount);
        int nRateX, nRateY;
        fscanf(fp, "MoveRate[%d,%d]\n", &nRateX, &nRateY);
        this->SetMoveRateX(nRateX);
        this->SetMoveRateY(nRateY);
        for(int i = 0; i < nAmount; i++)
        {
                int nObjType;
                fscanf(fp, "========ObjType=%d========\n", &nObjType);
                switch(nObjType)
                {
                        case MAP_SCENE:
                        {
                                C2DMapSceneObj* pSceneObj = new C2DMapSceneObj;
                                if(pSceneObj)
                                {
                                        pSceneObj->LoadTextObj(fp);
                                        this->AddObj(pSceneObj);
                                }
                        }
                        break;
                        case MAP_PUZZLE:
                        {
                                C2DMapPuzzleObj* pPuzzleObj = new C2DMapPuzzleObj;
                                if(pPuzzleObj)
                                {
                                        pPuzzleObj->LoadText(fp);
                                        this->AddObj(pPuzzleObj);
                                }
                        }
                        break;
                        default:
                        break;
                }
        }
}
//-------------------------------------------------------------

⌨️ 快捷键说明

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