?? factory.cpp
字號:
#include "factory.h"
CFactory& CFactory::Instance()
{
static CFactory instance;
return instance;
}
void CFactory::LoadFixedPrototype(ASLFile *pFile)
{
ASLIni ini;
ASLFileLoader loader;
ASLFile *pPicFile;
ASLBitmap *pbm;
int nHotX, nHotY, nShare;
CPopo *pPopo;
CGift *pGift;
char szSection[80];
Ability ab;
ini.Load(pFile);
loader.SetDirApp("Pic");
// 加載泡泡
ini.SetSection("Popo");
pPopo = new CPopo();
// 加載泡泡主圖
pPicFile = loader.Load(ini.SafeReadString("Main").c_str());
nHotX = ini.SafeReadInteger("MainHotX");
nHotY = ini.SafeReadInteger("MainHotY");
pbm = LoadBitmap(pPicFile, 3, nHotX, nHotY);
m_vFixedBitmap.push_back(pbm);
pPopo->LoadMainBitmap(pbm);
// 加載泡泡陰影
pPicFile = loader.Load(ini.SafeReadString("Shadow").c_str());
nHotX = ini.SafeReadInteger("ShadowHotX");
nHotY = ini.SafeReadInteger("ShadowHotY");
pbm = LoadBitmap(pPicFile, 3, nHotX, nHotY);
m_vFixedBitmap.push_back(pbm);
pPopo->LoadShadowBitmap(pbm);
// 將已加載的泡泡放入原型庫
m_vFixedPrototype.push_back(pPopo);
// 加載寶物
ini.SetSection("Gift");
m_nGiftNum = ini.SafeReadInteger("GiftNum");
for (int i = 1; i <= m_nGiftNum; ++i)
{
sprintf(szSection, "Gift%d", i);
ini.SetSection(szSection);
pGift = new CGift();
// 加載寶物主圖
pPicFile = loader.Load(ini.SafeReadString("Main").c_str());
nHotX = ini.SafeReadInteger("MainHotX");
nHotY = ini.SafeReadInteger("MainHotY");
pbm = LoadBitmap(pPicFile, 3, nHotX, nHotY);
m_vFixedBitmap.push_back(pbm);
pGift->LoadMainBitmap(pbm);
// 加載寶物陰影
nShare = ini.SafeReadInteger("ShareShadow");
if (nShare > 0 && nShare < (int)m_vFixedPrototype.size() &&
m_vFixedPrototype[nShare] != NULL)
{
pGift->LoadShadowBitmap(m_vFixedPrototype[nShare]->GetShadow());
}
else
{
pPicFile = loader.Load(ini.SafeReadString("Shadow").c_str());
nHotX = ini.SafeReadInteger("ShadowHotX");
nHotY = ini.SafeReadInteger("ShadowHotY");
pbm = LoadBitmap(pPicFile, 2, nHotX, nHotY);
m_vFixedBitmap.push_back(pbm);
pGift->LoadShadowBitmap(pbm);
}
// 加載寶物屬性
ab.nPopoMax = ini.ReadInteger("PopoMax", 0);
ab.nPopoPower = ini.ReadInteger("PopoPower", 0);
ab.nSpeed = ini.ReadInteger("Speed", 0);
ab.bKick = ini.ReadBoolean("Kick", false);
ab.Vehicle = (VehicleType)ini.ReadInteger("Vehicle", 0);
pGift->SetAbility(ab);
// 將已加載的寶物放入原型庫
m_vFixedPrototype.push_back(pGift);
}
}
void CFactory::LoadMapPrototype(ASLFile *pFile)
{
enum Type { Medium = 1, MediumAni, Large, Box, Bush, Tent };
ASLIni ini;
ASLFileLoader loader;
ASLFile *pPicFile;
ASLBitmap *pbm;
int nBlock, nHotX, nHotY, nShare;
char szSection[80];
CItem *pItem;
Type type;
int nItemNum;
// 初始化地圖物體原型庫
ReleaseMapPrototype();
m_vMapPrototype.push_back(NULL);
// 加載地圖物體原型
loader.SetDirApp("Pic");
ini.Load(pFile);
ini.SetSection("Setup");
nItemNum = ini.SafeReadInteger("ItemNum");
for (int i = 1; i <= nItemNum; ++i)
{
sprintf(szSection, "Item%d", i);
ini.SetSection(szSection);
type = (Type)ini.SafeReadInteger("Type");
// 創建對象
switch (type)
{
case Medium:
pItem = new CMedium();
break;
case MediumAni:
pItem = new CMediumAni();
break;
case Large:
pItem = new CLarge();
break;
case Box:
pItem = new CBox();
break;
case Bush:
pItem = new CBush();
break;
case Tent:
pItem = new CTent();
break;
default:
continue;
}
// 加載主圖
pPicFile = loader.Load(ini.SafeReadString("Main").c_str());
nBlock = ini.SafeReadInteger("MainBlock");
nHotX = ini.SafeReadInteger("MainHotX");
nHotY = ini.SafeReadInteger("MainHotY");
pbm = LoadBitmap(pPicFile, nBlock, nHotX, nHotY);
m_vMapBitmap.push_back(pbm);
pItem->LoadMainBitmap(pbm);
// 加載陰影
nShare = ini.SafeReadInteger("ShareShadow");
if (nShare != 0 && m_vMapPrototype[nShare] != NULL)
{
pItem->LoadShadowBitmap(m_vMapPrototype[nShare]->GetShadow());
}
else
{
if (ini.SafeReadString("Shadow") != "NULL")
{
pPicFile = loader.Load(ini.SafeReadString("Shadow").c_str());
nBlock = ini.SafeReadInteger("ShadowBlock");
nHotX = ini.SafeReadInteger("ShadowHotX");
nHotY = ini.SafeReadInteger("ShadowHotY");
pbm = LoadBitmap(pPicFile, nBlock, nHotX, nHotY);
m_vMapBitmap.push_back(pbm);
pItem->LoadShadowBitmap(pbm);
}
}
// 加載動畫部分
if (type == MediumAni || type == Large)
{
CAniItem *pAni = (CAniItem*)pItem;
// 加載動畫序列
char szBuffer[80];
int nSeqNum = ini.SafeReadInteger("SeqNum");
for (int i = 1; i <= nSeqNum; ++i)
{
sprintf(szBuffer, "Seq%d", i);
pAni->PushSequence(ini.SafeReadInteger(szBuffer));
}
pAni->PushSequence(CAniItem::ANI_END);
// 設置動畫幀間隔
pAni->SetDelta((float)ini.SafeReadFloat("Delta"));
// 設置動畫間隔
pAni->SetInterval((float)ini.SafeReadFloat("Interval"));
if (type == Large)
{
// 加載動畫圖片
pPicFile = loader.Load(ini.SafeReadString("Ani").c_str());
nBlock = ini.SafeReadInteger("AniBlock");
nHotX = ini.SafeReadInteger("AniHotX");
nHotY = ini.SafeReadInteger("AniHotY");
pbm = LoadBitmap(pPicFile, nBlock, nHotX, nHotY);
m_vMapBitmap.push_back(pbm);
((CLarge*)pAni)->LoadAniBitmap(pbm);
}
}
// 將已創建的對象加入地圖原型庫
m_vMapPrototype.push_back(pItem);
}
}
void CFactory::ReleaseFixedPrototype(void)
{
for (size_t i = 0; i < m_vFixedPrototype.size(); ++i)
{
SAFE_DELETE(m_vFixedPrototype[i]);
}
m_vFixedPrototype.clear();
for (size_t i = 0; i < m_vFixedBitmap.size(); ++i)
{
SAFE_DELETE(m_vFixedBitmap[i]);
}
m_vFixedBitmap.clear();
}
void CFactory::ReleaseMapPrototype(void)
{
for (size_t i = 0; i < m_vMapPrototype.size(); ++i)
{
SAFE_DELETE(m_vMapPrototype[i]);
}
m_vMapPrototype.clear();
for (size_t i = 0; i < m_vMapBitmap.size(); ++i)
{
SAFE_DELETE(m_vMapBitmap[i]);
}
m_vMapBitmap.clear();
}
ASLBitmap* CFactory::LoadBitmap(ASLFile *pFile, int nBlock, int nHotX, int nHotY) const
{
ASLBitmap *pbm;
pbm = new ASLBitmap();
pbm->LoadBMP(pFile);
pbm->SetBlock(nBlock, 1);
POINT pt = { nHotX, nHotY };
pbm->SetHotspot(pt);
pbm->SetColorKey(clFuchsia);
return pbm;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -