📄 guildmarkmanager.cpp
字号:
// GuildMarkManager.cpp: implementation of the CGuildMarkManager class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "GuildMarkManager.h"
#include "GuildMarkImg.h"
#include "GuildMark.h"
#include "cImageSelf.h"
#include "FreeImage/FreeImage.h"
#include "MHFile.h"
#include "ObjectManager.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CGuildMarkManager::CGuildMarkManager()
{
m_pLoadingImg = NULL;
m_MarkTable.Initialize(32);
}
CGuildMarkManager::~CGuildMarkManager()
{
Release();
}
BOOL CGuildMarkManager::Init()
{
if(m_pLoadingImg == 0)
m_pLoadingImg = LoadMarkImg(0);
if(m_pLoadingImg == NULL)
return FALSE;
return TRUE;
}
void CGuildMarkManager::Release()
{
m_MarkTable.SetPositionHead();
while(CGuildMark* pMark = m_MarkTable.GetData())
{
delete pMark;
}
delete m_pLoadingImg;
}
CGuildMarkImg* CGuildMarkManager::LoadMarkImg(MARKNAMETYPE markname)
{
//辑滚喊 备盒 眠啊
char filename[256];
sprintf(filename,"Image/MunpaMark/%d.tga",markname);
cImageSelf* pImg = new cImageSelf;
if(pImg->LoadSprite(filename) == FALSE)
{
delete pImg;
return NULL;
}
CGuildMarkImg* pMarkImg = new CGuildMarkImg(markname,pImg);
return pMarkImg;
}
BOOL CGuildMarkManager::LoadMarkInfo()
{
//捞固瘤 佬绢咳
return TRUE;
}
void CGuildMarkManager::SendGuildMarkImgRequest(MARKNAMETYPE MarkName)
{
MSG_DWORD msg;
SetProtocol(&msg,MP_GUILD,MP_GUILDMARK_REQUEST_SYN);
msg.dwObjectID = HEROID;
msg.dwData = MarkName;
NETWORK->Send(&msg,sizeof(msg));
}
void CGuildMarkManager::SendGuildMarkImgUpdate(DWORD GuildIdx,char* pImgData)
{
MSG_GUILDMARK_IMG msg;
SetProtocol(&msg,MP_GUILD,MP_GUILDMARK_UPDATE_SYN);
msg.dwObjectID = HEROID;
msg.GuildIdx = GuildIdx;
memcpy(msg.imgData,pImgData,GUILDMARK_BUFSIZE);
NETWORK->Send(&msg,sizeof(msg));
}
void CGuildMarkManager::UpdateGuildMarkImg(DWORD GuildIdx,MARKNAMETYPE markname,char* pImgData)
{
// 弊覆 颇老肺 历厘
char filename[256];
sprintf(filename, "Image/MunpaMark/%d.tga", markname);
char tempBuf[GUILDMARKBPP*GUILDMARKWIDTH*GUILDMARKWIDTH];
memset(tempBuf,0,GUILDMARKBPP*GUILDMARKWIDTH*GUILDMARKWIDTH);
memcpy(tempBuf,pImgData,GUILDMARK_BUFSIZE);
WriteTGA(filename,tempBuf,
GUILDMARKWIDTH, GUILDMARKWIDTH,
GUILDMARKBPP*GUILDMARKWIDTH,
GUILDMARKBPP*8);
// 付农 沥焊 历厘
// 扁粮 巩颇 付农啊 乐栏搁 盎脚
CGuildMark* pMark = m_MarkTable.GetData(markname);
if(pMark)
{
CGuildMarkImg* pMarkImg = LoadMarkImg(markname);
ASSERT(pMarkImg);
pMark->SetGuildMarkImg(pMarkImg);
}
}
CGuildMark* CGuildMarkManager::GetGuildMark(MARKNAMETYPE markname)
{
if(markname == 0)
return NULL;
// 扁粮 付农 乐栏搁 弊成 府畔茄促.
CGuildMark* pMark = m_MarkTable.GetData(markname);
if(pMark)
return pMark;
// 付农 捞固瘤甫 肺爹茄促
CGuildMarkImg* pMarkImg = LoadMarkImg(markname);
// 付农 捞固瘤啊 绝促搁 肺爹捞固瘤肺 官操绊 付农甫 夸没茄促.
if(pMarkImg == NULL)
{
pMarkImg = m_pLoadingImg;
SendGuildMarkImgRequest(markname);
}
// 付农捞固瘤甫 付农俊 悸泼窍绊 府畔茄促.
pMark = new CGuildMark;
pMark->SetGuildMarkImg(pMarkImg);
m_MarkTable.Add(pMark,markname);
return pMark;
}
void CGuildMarkManager::OnRecvGuildMarkImg(MSG_GUILDMARK_IMG* pmsg)
{
UpdateGuildMarkImg(pmsg->GuildIdx,pmsg->MarkName,pmsg->imgData);
}
BOOL CGuildMarkManager::ChangeGuildMarkSyn(DWORD GuildIdx,char* filename)
{
char markf[256];
sprintf( markf, "Image/munpamark/%s", filename );
char imgData[GUILDMARK_BUFSIZE];
if(ReadBitInfoFromFile(markf,imgData) == FALSE)
{
//弊覆 颇老阑 佬绰单 角菩沁嚼聪促.
//return FALSE;
strcat(markf, ".bmp");
if(ReadBitInfoFromFile(markf,imgData) == FALSE)
return FALSE;
}
SendGuildMarkImgUpdate(GuildIdx,imgData);
return TRUE;
}
BOOL CGuildMarkManager::ReadBitInfoFromFile(char* filename,char* imgData)
{
FIBITMAP* pBitMap = FreeImage_LoadBMP(filename);
BITMAPINFO* pBitInfo = FreeImage_GetInfo(pBitMap);
if( (pBitMap == 0) || (pBitInfo == 0) )
return FALSE;
//荤捞令啊 撇覆
if( pBitInfo->bmiHeader.biHeight != GUILDMARKHEIGHT ||
pBitInfo->bmiHeader.biWidth != GUILDMARKWIDTH )
return FALSE;
FIBITMAP* pConvertedBitmap = FreeImage_ConvertTo16Bits565(pBitMap);
int bytesPerLine = GUILDMARKWIDTH*GUILDMARKBPP;
BYTE* pData = FreeImage_GetBits(pConvertedBitmap);
for(int y=0;y<GUILDMARKHEIGHT;++y)
{
memcpy(
&imgData[(GUILDMARKHEIGHT-y-1)*bytesPerLine],
&pData[y*bytesPerLine],
bytesPerLine);
}
FreeImage_Unload(pBitMap);
FreeImage_Unload(pConvertedBitmap);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -