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

📄 guildmarkmanager.cpp

📁 墨香最新私服
💻 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 + -