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

📄 terrainlayer.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
字号:
//----------------------------------------------------//
// InterActiveLayer.cpp
//----------------------------------------------------//
#include "TerrainLayer.h"
#include "3DGameMap.h"
#include "Hero.h"
//----------------------------------------------------//
CTerrainLayer::CTerrainLayer()
{
	m_setPassage.clear();
	m_setRegion.clear();
}
//----------------------------------------------------//
CTerrainLayer::~CTerrainLayer()
{
	this->ClearPassage();
	this->ClearRegion();
}
//----------------------------------------------------//
CTerrainLayer* CTerrainLayer::CreateNew()
{
	CTerrainLayer* pLayer = new CTerrainLayer;
	return  pLayer;
}
//----------------------------------------------------//
void CTerrainLayer::Show(CMyPos posShow)
{
	// 取Hero的屏幕坐标坐标
//	posShow.x = posShow.x * m_bmpPuzzle.GetGrideSize() / CPuzzleBmp::GetNormalGrideSize();
//	posShow.y = posShow.y * m_bmpPuzzle.GetGrideSize() / CPuzzleBmp::GetNormalGrideSize();
	m_bmpPuzzle.SetColor(g_objGameMap.GetARGB());
	m_bmpPuzzle.Show(-posShow.x, -posShow.y);
}
//----------------------------------------------------//
void CTerrainLayer::Process(void* pInfo)
{
}
//----------------------------------------------------//
int  CTerrainLayer::GetType()
{
	return LAYER_TERRAIN;
}
//----------------------------------------------------//
void CTerrainLayer::LoadPuzzle(char* pszFile)
{
	if(!pszFile)
		return;
	strcpy(m_szPuzzleFile, pszFile);
	m_bmpPuzzle.Load(pszFile);
}
//----------------------------------------------------//
void CTerrainLayer::ClearPassage()
{
	int nAmount =  m_setPassage.size();
	for(int i = 0; i < nAmount; i++)
	{
		PassageInfo* pInfo = m_setPassage[i];
		SAFE_DELETE(pInfo);
	}
	m_setPassage.clear();
}
//----------------------------------------------------//
void CTerrainLayer::AddPassage(CMyPos posMap, int nIndex)
{
	int nAmount =  m_setPassage.size();
	for(int i = 0; i < nAmount; i++)
	{
		PassageInfo* pInfo = m_setPassage[i];
		if(pInfo)
		{
			if((pInfo->nPosX == posMap.x) && (pInfo->nPosY == posMap.y))
			{
				pInfo->nIndex = nIndex;
				return;
			}
		}
	}
	PassageInfo* pInfo = new PassageInfo;
	if(pInfo)
	{
		pInfo->nPosX = posMap.x;
		pInfo->nPosY = posMap.y;
		pInfo->nIndex = nIndex;
		m_setPassage.push_back(pInfo);
	}
}
//----------------------------------------------------//
void CTerrainLayer::DelPassage(CMyPos posMap)
{
	int nAmount =  m_setPassage.size();
	for(int i = 0; i < nAmount; i++)
	{
		PassageInfo* pInfo = m_setPassage[i];
		if(pInfo)
		{
			if((pInfo->nPosX == posMap.x) && (pInfo->nPosY == posMap.y))
			{
				SAFE_DELETE(pInfo);
				m_setPassage.erase(m_setPassage.begin()+i);
				return;
			}
		}
	}
}
//----------------------------------------------------//
int  CTerrainLayer::GetExitIndex(CMyPos posCell)
{
	int nAmount =  m_setPassage.size();
	for(int i = 0; i < nAmount; i++)
	{
		PassageInfo* pInfo = m_setPassage[i];
		if(pInfo)
		{
			if((pInfo->nPosX == posCell.x) && (pInfo->nPosY == posCell.y))
			{
				return pInfo->nIndex;
			}
		}
	}
	return -1;
}
//----------------------------------------------------//
void CTerrainLayer::LoadDataPassage(FILE* fp)
{
	if(!fp)
		return;
	int nAmount;
	fread(&nAmount, sizeof(int), 1, fp);
	for(int i = 0; i < nAmount; i++)
	{
		PassageInfo infoPassage;
		fread(&infoPassage, sizeof(PassageInfo), 1, fp);
		CMyPos posCell;
		posCell.x = infoPassage.nPosX;
		posCell.y = infoPassage.nPosY;
		this->AddPassage(posCell, infoPassage.nIndex);

		CMyPos posWorld;
		g_objGameMap.Cell2World(posCell.x, posCell.y, posWorld.x, posWorld.y);
		g_objGameMap.Add3DMapEffect(posWorld, "Exit");
	}
}
//----------------------------------------------------//
void CTerrainLayer::LoadTextPassage(FILE* fp)
{
    if(!fp)
        return;
	int nAmount;
	fscanf(fp, "PassageAmount=%d\n", &nAmount);
	for(int i = 0; i < nAmount; i++)
	{
		CMyPos posPassage;
		int nPassageIndex;
		int nIndex;
		fscanf(fp, "Passage%d=[%d,%d,%d]\n", &nIndex, &posPassage.x,
			&posPassage.y, &nPassageIndex);
		this->AddPassage(posPassage, nPassageIndex);
	}
}
//----------------------------------------------------//
void CTerrainLayer::SaveTextPassage(FILE* fp)
{
	if(!fp)
		return;
	// amount ...
	int nAmount = m_setPassage.size();
	fprintf(fp, "PassageAmount=%d\n", nAmount);
	for(int i = 0; i < nAmount; i++)
	{
		PassageInfo* pInfo = m_setPassage[i];
		if(pInfo)
		{
			fprintf(fp, "Passage%d=[%d,%d,%d]\n", i, pInfo->nPosX, pInfo->nPosY, pInfo->nIndex);
		}
	}
}
//----------------------------------------------------//
void CTerrainLayer::GetPuzzleSize(CMySize& infoSize)
{
	m_bmpPuzzle.GetSize(infoSize);
}
//----------------------------------------------------//
void CTerrainLayer::SaveDataPassage(FILE* fp)
{
	if(!fp)
		return;
	// amount ...
	int nAmount = m_setPassage.size();
	fwrite(&nAmount, sizeof(int), 1, fp);
	for(int i = 0; i < nAmount; i++)
	{
		
		PassageInfo* pInfo = m_setPassage[i];
		if(pInfo)
		{
			fwrite(pInfo, sizeof(PassageInfo), 1, fp);
		}
	}
}
//----------------------------------------------------//
int CTerrainLayer::GetPuzzleGrideSize()
{
	return m_bmpPuzzle.GetGrideSize();
}
//----------------------------------------------------//
void CTerrainLayer::ClearRegion()
{
	int nAmount = m_setRegion.size();
	for(int i = 0; i < nAmount; i ++)
	{
		C2DMapRegion* pRegion = m_setRegion[i];
		SAFE_DELETE(pRegion);
	}
	m_setRegion.clear();
}
//----------------------------------------------------//
C2DMapRegion* CTerrainLayer::GetRegion(CMyPos posRegion, int nType)
{
	int nAmount = m_setRegion.size();
	for(int i = 0; i < nAmount; i ++)
	{
		C2DMapRegion* pRegion = m_setRegion[i];
		if(pRegion)
		{
			RegionInfo* pInfo = pRegion->GetInfo();
			if(pInfo->m_posCell.x == posRegion.x && pInfo->m_posCell.y == posRegion.y && pInfo->m_dwType == nType)
			{
				return 	pRegion;			
			}
		}
	}
	return NULL;
}
//----------------------------------------------------//
void CTerrainLayer::DelRegion(CMyPos posRegion, int nType)
{
	int nAmount = m_setRegion.size();
	for(int i = 0; i < nAmount; i ++)
	{
		C2DMapRegion* pRegion = m_setRegion[i];
		if(pRegion)
		{
			RegionInfo* pInfo = pRegion->GetInfo();
			if(pInfo->m_posCell.x == posRegion.x && pInfo->m_posCell.y == posRegion.y && pInfo->m_dwType == nType)
			{
				SAFE_DELETE(pRegion);
				m_setRegion.erase(m_setRegion.begin()+i);
				return;
			}
		}

	}
}
//----------------------------------------------------//
void CTerrainLayer::AddRegion(C2DMapRegion* pRegion)
{
	m_setRegion.push_back(pRegion);
}
//----------------------------------------------------//
void CTerrainLayer::ShowRegion(int nType)
{
	int nAmount = m_setRegion.size();
	for(int i = 0; i < nAmount; i ++)
	{
		C2DMapRegion* pRegion = m_setRegion[i];
		RegionInfo* pInfo = pRegion->GetInfo();
		if(pRegion && pInfo && pInfo->m_dwType == nType)
		{
			pRegion->Show(NULL);
		}
	}
}
//----------------------------------------------------//
void CTerrainLayer::LoadDataRegion(FILE* fp)
{
/*
	MYASSERT(fp);
	// load amount
	DWORD dwAmount = 0;
	fread(&dwAmount, sizeof(DWORD), 1, fp);
	// load region Info
	for(int i = 0; i < dwAmount; i ++)
	{
		RegionInfo infoRegion;
		fread(&infoRegion, sizeof(RegionInfo), 1, fp);
		C2DMapRegion* pRegion = C2DMapRegion::CreateNew(&infoRegion);
		this->AddRegion(pRegion);
	}*/

}
//----------------------------------------------------//
void CTerrainLayer::LoadTextRegion(FILE* fp)
{
/*
	MYASSERT(fp);
	int nAmount;
	if( 1 != fscanf(fp, "RegionAmount=%d\n", &nAmount))
		return;
	for(int i = 0; i < nAmount; i++)
	{
		RegionInfo infoRegion;
		fprintf(fp, "Region%d=[%u,%u,%u,%u,%u,%u,%u,%u,%u,%s]\n", i,
			&infoRegion.m_posCell.x, &infoRegion.m_posCell.y, 
			&infoRegion.m_dwCx, &infoRegion.m_dwCy, &infoRegion.m_dwType, &infoRegion.m_dwData[0], 
			&infoRegion.m_dwData[1], &infoRegion.m_dwData[2], &infoRegion.m_dwData[3], infoRegion.m_szString);
		C2DMapRegion* pRegion = C2DMapRegion::CreateNew(&infoRegion);
		this->AddRegion(pRegion);

	}*/

}
//----------------------------------------------------//
void CTerrainLayer::SaveDataRegion(FILE* fp)
{
/*
	MYASSERT(fp);
	// save amount
	DWORD dwAmount = m_setRegion.size();
	fwrite(&dwAmount, sizeof(DWORD), 1, fp);
	//save region info
	for(int i = 0; i < dwAmount; i ++)
	{
		C2DMapRegion* pRegion = m_setRegion[i];
		if(pRegion)
		{
			RegionInfo* pInfo = pRegion->GetInfo();
			fwrite(pInfo, sizeof(RegionInfo), 1, fp);
		}
	}*/

}
//----------------------------------------------------//
void CTerrainLayer::SaveTextRegion(FILE* fp)
{
/*
	MYASSERT(fp);
	// save amount
	int nAmount = m_setRegion.size();
	fprintf(fp, "RegionAmount=%d\n", nAmount);
	for(int i = 0; i < nAmount; i++)
	{
		PassageInfo* pInfo = m_setPassage[i];
		C2DMapRegion* pRegion = m_setRegion[i];
		if(pRegion)
		{
			RegionInfo* pInfo = pRegion->GetInfo();
			fprintf(fp, "Region%d=[%u,%u,%u,%u,%u,%u,%u,%u,%u,%s]\n", i,
				pInfo->m_posCell.x, pInfo->m_posCell.y, 
					pInfo->m_dwCx, pInfo->m_dwCy, pInfo->m_dwType, pInfo->m_dwData[0], 
						pInfo->m_dwData[1], pInfo->m_dwData[2], pInfo->m_dwData[3], pInfo->m_szString);
		}
	}*/

}
//----------------------------------------------------//
int  CTerrainLayer::GetRegionAmount()
{
	return m_setRegion.size();
}
//----------------------------------------------------//
C2DMapRegion* CTerrainLayer::GetRegionByINdex(int nIndex)
{
	int nAmount = m_setRegion.size();
	if(nIndex < 0 || nIndex >= nAmount)
		return NULL;
	else
		return m_setRegion[nIndex];
}
//----------------------------------------------------//

⌨️ 快捷键说明

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