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

📄 interactivelayer.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//-------------------------------------------------------------
// InteractiveLayer.cpp
//-------------------------------------------------------------

#pragma warning(disable:4786)
#include "InteractiveLayer.h"
#include "2DMapCoverObj.h"
#include "2DMapTerrainObj.h"
#include "Hero.h"
#include "3DMapEffect.h"
#include "3DMapEffectNew.h"
#include "3DGameMap.h"
#include "3DMapSimpleObj.h"
#include "MapSound.h"
#include "3DMapItem.h"
//-------------------------------------------------------------
CInteractiveLayer::CInteractiveLayer()
{
	m_setMapObj.clear();
}
//-------------------------------------------------------------
CInteractiveLayer::~CInteractiveLayer()
{
	this->ClearMapObj();
}
//-------------------------------------------------------------
void CInteractiveLayer::Show(CMyPos posShow)
{
	BOOL bShowHero = false;

	int nAmount = m_setMapObjShow.size();
	for(int i = 0; i < nAmount; i++)
	{
		try {
		CMapObj* pObj = m_setMapObjShow[i];
		if(pObj)
		{
/*			if(pObj->GetObjType() == MAP_HERO)
				bShowHero = true;
			if(pObj->GetObjType() == MAP_3DEFFECT)
			{
				if(bShowHero)
				{
//					CMyBitmap::ShowString(100, 100,  0x0000ff00, "人物先显示");
				}
				else
				{
//					CMyBitmap::ShowString(100, 100,  0x0000ff00, "特效先显示");
				}
			}
*/
			if(pObj->GetObjType() != MAP_ROLE &&
				pObj->GetObjType() != MAP_HERO &&
				pObj->GetObjType() != MAP_PLAYER &&
				pObj->GetObjType() != MAP_PUZZLE &&
				pObj->GetObjType() != MAP_3DEFFECT &&
				pObj->GetObjType() != MAP_3DEFFECTNEW)
					pObj->SetARGB(g_objGameMap.GetARGB());
			else
				pObj->SetARGB(0xffffffff);
			pObj->Show(NULL);
		}
		}catch(...)
		{
			return;
		}
	}
}
//-------------------------------------------------------------
void CInteractiveLayer::Process(void* pInfo)
{
	m_setMapObjShow.clear();
	int nAmount = m_setMapObj.size();
	int i;
	for(i = 0; i < nAmount; i++)
	{
		CMapObj* pObj = m_setMapObj[i];
		if(pObj->GetObjType() == MAP_TERRAIN)
		{
			C2DMapTerrainObj* pTerrainObj =  (C2DMapTerrainObj*)pObj;
			if(pTerrainObj)
				pTerrainObj->Process(pInfo);
		}	 
	}
	
	for(i = nAmount-1; i >= 0; i--)
	{		
		CMapObj* pObj = m_setMapObj[i];
		if(pObj->GetObjType() == MAP_TERRAIN)
			continue;
		switch(pObj->GetObjType())
		{
		case MAP_COVER:
			{
				CMyPos pos;
				g_objHero.GetWorldPos(pos);
				C2DMapCoverObj* pCoverObj =  (C2DMapCoverObj*)pObj;
				if(pCoverObj)
					pCoverObj->Process(&pos);
			}
			break;
		case MAP_TERRAIN:
			break;

		case MAP_HERO:
			{
				CHero* pHero =  (CHero*)pObj;
				if(pHero)
					pHero->Process(pInfo);
			}
			break;
			
		case MAP_PLAYER:
			{
			 
				CPlayer* pPlayer =  (CPlayer*)pObj;
				if(pPlayer)
					pPlayer->Process(pInfo);
			}			
			break;

		case MAP_3DSIMPLE:
			{
				C3DMapSimpleObj* p3DMapSimpleObj = (C3DMapSimpleObj*) pObj;
				pObj->Process(NULL);
				if(p3DMapSimpleObj->IsDie())
				{
					this->DelObj(p3DMapSimpleObj);
				}
			}
			break;
			
		case MAP_3DEFFECT:
		case MAP_3DEFFECTNEW:
			{
				BOOL bOver;
				pObj->Process(&bOver);
				if(bOver)
					this->DelObj(pObj);
			}
			break;
		case MAP_3DMAGICMAPITEM:
			{
				BOOL bOver;
				pObj->Process(&bOver);
				if(bOver)
					this->DelObj(pObj);
			}
			break;
		case MAP_3DNPC:
			{
				pObj->Process(NULL);
			}
			break;
		case MAP_SOUND:
			{
				pObj->Process(NULL);
			}
			break;
		default:
			pObj->Process(NULL);
			break;
		}		
	}
}
//-------------------------------------------------------------
int  CInteractiveLayer::GetType()
{
	return LAYER_INTERACTIVE;
}
//-------------------------------------------------------------
CInteractiveLayer* CInteractiveLayer::CreateNew()
{
	CInteractiveLayer* pLayer = new CInteractiveLayer;
	return pLayer;
}
//-------------------------------------------------------------
void CInteractiveLayer::ClearMapObj()
{
	int nAmount = m_setMapObj.size();
	for(int i = 0; i < nAmount; i ++)
	{
		CMapObj* pObj = m_setMapObj[i];
		if(!pObj)
			continue;
		
		BOOL bDel = true;
		if((pObj->GetObjType() == MAP_HERO) ||
			(pObj->GetObjType() == MAP_PLAYER))
			bDel = false;
		
		if(bDel)
			SAFE_DELETE(pObj);
	}
	m_setMapObj.clear();
}
//-------------------------------------------------------------
void CInteractiveLayer::AddMapObj(CMapObj* pObj)
{
	if(!pObj)
		return;
	
	m_setMapObj.push_back(pObj);
	if(pObj->GetObjType() == MAP_TERRAIN)
	{
		C2DMapTerrainObj* pTerrainObj = (C2DMapTerrainObj*)pObj;
		this->PlaceTerrainObj(pTerrainObj);
	}
}
//-------------------------------------------------------------
void CInteractiveLayer::DelObj(CMapObj* pObj)
{
	if(!pObj)
		return;
	int nAmount = m_setMapObj.size();
	for(int i = nAmount-1; i >= 0; i--)
	{
		CMapObj* pMyObj = m_setMapObj[i];
		if(pMyObj == pObj)
		{
			m_setMapObj.erase(m_setMapObj.begin()+i);
			if(pObj->GetObjType() == MAP_TERRAIN)
			{
				// todo ...
				C2DMapTerrainObj* pTerrainObj = (C2DMapTerrainObj*)pObj;
				this->DisplaceTerrainObj(pTerrainObj);
			}
			BOOL bDel = true;
			if((pObj->GetObjType() == MAP_HERO) ||
				(pObj->GetObjType() == MAP_PLAYER))
				bDel = false;
		
			if(bDel)
				SAFE_DELETE(pObj);
			return;
		}
	}
}
//-------------------------------------------------------------
void CInteractiveLayer::SaveDataLayer(FILE* fp)
{
	if(!fp)
		return;
	int nAmount = m_setMapObj.size();
	int i;
	int nSaveAmount = 0;

	for(i = 0; i < nAmount; i++)
	{
		CMapObj* pObj = m_setMapObj[i];
		if(pObj)
		{
			switch(pObj->GetObjType())
			{
			case MAP_COVER:
			case MAP_TERRAIN:
			case MAP_SOUND:
				nSaveAmount ++;
				break;
			case MAP_3DEFFECT:
			case MAP_3DEFFECTNEW:
				{
					C3DMapEffect* pEffect = (C3DMapEffect*)pObj;
					if(pEffect->NeedSave())
					{
						nSaveAmount ++;
					}
				}
				break;
			default:
				break;
			}
		}
	}

	fwrite(&nSaveAmount, sizeof(int), 1, fp);
	
	for(i = 0; i < nAmount; i++)
	{
		CMapObj* pObj = m_setMapObj[i];
		if(pObj)
		{
			switch(pObj->GetObjType())
			{
			case MAP_COVER:
				{
					int nObjType = MAP_COVER;
					fwrite(&nObjType, sizeof(int), 1, fp);
					C2DMapCoverObj* pCoverObj = (C2DMapCoverObj*)pObj;
					pCoverObj->SaveDataObj(fp);
				}
				break;
			case MAP_TERRAIN:
				{
					int nObjType = MAP_TERRAIN;
					fwrite(&nObjType, sizeof(int), 1, fp);
					C2DMapTerrainObj* pTerrainObj = (C2DMapTerrainObj*)pObj;
					pTerrainObj->SaveData(fp);
				}
				break;
			case MAP_SOUND:
				{
					int nObjType = MAP_SOUND;
					fwrite(&nObjType, sizeof(int), 1, fp);
					CMapSound* pSoundObj = (CMapSound*)pObj;
					pSoundObj->SaveDataObj(fp);
				}
				break;
			case MAP_3DEFFECT:
				{
					C3DMapEffect* pEffect = (C3DMapEffect*)pObj;
					if(pEffect->NeedSave())
					{
						int nObjType = MAP_3DEFFECT;
						fwrite(&nObjType, sizeof(int), 1, fp);
						pEffect->SaveDataObj(fp);
					}
				}
				break;
			case MAP_3DEFFECTNEW:
				{
					C3DMapEffectNew* pEffect = (C3DMapEffectNew*)pObj;
					if(pEffect->NeedSave())
					{
						int nObjType = MAP_3DEFFECTNEW;
						fwrite(&nObjType, sizeof(int), 1, fp);
						pEffect->SaveDataObj(fp);
					}
				}
				break;
			default:
				break;
			}
		}
	}
}
//-------------------------------------------------------------
void CInteractiveLayer::SaveTextLayer(FILE* fp)
{
	if(!fp)
		return;
	
	int nAmount = m_setMapObj.size();
	int i;
	int nSaveAmount = 0;

	for(i = 0; i < nAmount; i++)
	{
		CMapObj* pObj = m_setMapObj[i];
		if(pObj)
		{
			switch(pObj->GetObjType())
			{
			case MAP_COVER:
			case MAP_TERRAIN:
			case MAP_SOUND:
				nSaveAmount ++;
				break;
			case MAP_3DEFFECT:
			case MAP_3DEFFECTNEW:
				{
					C3DMapEffect* pEffect = (C3DMapEffect*)pObj;
					if(pEffect->NeedSave())
					{
						nSaveAmount ++;
					}
				}
				break;
			default:
				break;
			}
		}
	}

	fprintf(fp, "========InteractiveLayer ObjAmount=%d========\n", nSaveAmount);
	for(i = 0; i < nAmount; i++)
	{
		CMapObj* pObj = m_setMapObj[i];
		if(pObj)
		{
			switch(pObj->GetObjType())
			{
			case MAP_COVER:
				{
					fprintf(fp, "========ObjType=%d========\n", MAP_COVER);
					C2DMapCoverObj* pCoverObj = (C2DMapCoverObj*)pObj;
					pCoverObj->SaveTextObj(fp);
				}
				break;
			case MAP_TERRAIN:
				{
					fprintf(fp, "========ObjType=%d========\n", MAP_TERRAIN);
					C2DMapTerrainObj* pTerrainObj = (C2DMapTerrainObj*)pObj;
					pTerrainObj->SaveText(fp);
				}
				break;
			case MAP_SOUND:
				{
					fprintf(fp, "========ObjType=%d========\n", MAP_SOUND);
					CMapSound* pSound = (CMapSound*)pObj;
					pSound->SaveTextObj(fp);
				}
				break;
			case MAP_3DEFFECT:
				{
					C3DMapEffect* pEffect = (C3DMapEffect*)pObj;
					if(pEffect->NeedSave())
					{
						fprintf(fp, "========ObjType=%d========\n", MAP_3DEFFECT);
						pEffect->SaveTextObj(fp);
					}
				}
				break;
			case MAP_3DEFFECTNEW:
				{
					C3DMapEffectNew* pEffect = (C3DMapEffectNew*)pObj;
					if(pEffect->NeedSave())
					{
						fprintf(fp, "========ObjType=%d========\n", MAP_3DEFFECTNEW);
						pEffect->SaveTextObj(fp);
					}
				}
				break;
			default:
				break;
			}
		}
	}
}
//-------------------------------------------------------------
void CInteractiveLayer::LoadDataLayer(FILE* fp)
{
	if(!fp)
		return;
	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_COVER:
			{
				C2DMapCoverObj* pCoverObj = new C2DMapCoverObj;
				if(pCoverObj)
				{
					pCoverObj->LoadDataObj(fp);
					this->AddMapObj(pCoverObj);
				}
			}
			break;
		case MAP_TERRAIN:
			{
				C2DMapTerrainObj* pTerrainObj = new C2DMapTerrainObj;
				if(pTerrainObj)

⌨️ 快捷键说明

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