📄 interactivelayer.cpp
字号:
//-------------------------------------------------------------
// 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 + -