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

📄 cresourcemanager.cpp

📁 墨香最新私服
💻 CPP
字号:
// cResourceManager.cpp: implementation of the cResourceManager class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "cResourceManager.h"
#include "../Engine/GraphicEngine.h"
#include "PtrList.h"



//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GLOBALTON(cResourceManager);
cResourceManager::cResourceManager()
{
	m_pImageList = NULL;
	m_pImageInfoArray = NULL;
	m_nMaxImageInfoNum = 0;
}

cResourceManager::~cResourceManager()
{
	Release();
}
void cResourceManager::Init(char * szImagePath, char * szMsgPath)
{
	if(!m_pImageList)
		m_pImageList = new cPtrList;

	strcpy( m_szImageListPath,	szImagePath );
	strcpy( m_szMsgListPath,	szMsgPath );


	// ImageInfo List
	CMHFile fp;
#ifdef _FILE_BIN_
	fp.Init(m_szImageListPath, "rb");
#else
	fp.Init(m_szImageListPath, "rt");	
#endif
	m_nMaxImageInfoNum = fp.GetInt();
	m_pImageInfoArray = new IMAGE_NODE[ m_nMaxImageInfoNum ];
	for( int i = 0 ; i < m_nMaxImageInfoNum ; ++i )
	{
		fp.GetInt();
		strcpy( m_pImageInfoArray[i].szFileName, fp.GetString() );
		m_pImageInfoArray[i].size.x			= fp.GetFloat();
		m_pImageInfoArray[i].size.y			= fp.GetFloat();
		m_pImageInfoArray[i].layer			= fp.GetInt();
		m_pImageInfoArray[i].pSpriteObject	= NULL;
	}
	fp.Release();

/*
#ifdef _FILE_BIN_
	char temp[255];
	fp.Init(m_szImageListPath, "rb");
	m_nMaxImageInfoNum = fp.GetInt();
//	fp.GetLine( temp, 255 );
	m_pImageInfoArray = new IMAGE_NODE[ m_nMaxImageInfoNum ];
	for( int i = 0 ; i < m_nMaxImageInfoNum ; ++i )
	{
		fp.GetInt();
		strcpy( m_pImageInfoArray[i].szFileName, fp.GetString() );
		m_pImageInfoArray[i].size.x			= fp.GetFloat();
		m_pImageInfoArray[i].size.y			= fp.GetFloat();
		m_pImageInfoArray[i].layer			= fp.GetInt();
		m_pImageInfoArray[i].pSpriteObject	= NULL;
//		fp.GetLine( temp, 255 );
	}
	fp.Release();
#else
	fp.Init(m_szImageListPath, "rt");
	m_nMaxImageInfoNum = fp.GetInt();
	m_pImageInfoArray = new IMAGE_NODE[ m_nMaxImageInfoNum ];
	for( int i = 0 ; i < m_nMaxImageInfoNum ; ++i )
	{
		fp.GetInt();
		strcpy( m_pImageInfoArray[i].szFileName, fp.GetString() );
		m_pImageInfoArray[i].size.x			= fp.GetFloat();
		m_pImageInfoArray[i].size.y			= fp.GetFloat();
		m_pImageInfoArray[i].layer			= fp.GetInt();
		m_pImageInfoArray[i].pSpriteObject	= NULL;
	}
	fp.Release();
#endif
	*/
	// ImageInfo List
	/*
	fp.Init(m_szMsgListPath, "rt");
	for( i = 0 ; i < idx-1 ; ++i )
	{
		fp.GetLine(msg, size);
	}
	fp.GetInt();
	fp.Seek(1);
	fp.GetLine(msg, size);
	fp.Release();
	*/
}
IMAGE_NODE * cResourceManager::GetInfo( int idx )
{	
	if( idx < 0 )
		return NULL;
	if( idx >= m_nMaxImageInfoNum ) 
		return NULL;
	return &m_pImageInfoArray[idx];
}
IDISpriteObject * cResourceManager::GetImageInfo( int idx )
{
	if( idx >= m_nMaxImageInfoNum ) 
		return NULL;

	if( !m_pImageInfoArray[idx].pSpriteObject )
	{
		m_pImageInfoArray[idx].pSpriteObject = g_pExecutive->GetRenderer()->CreateSpriteObject(m_pImageInfoArray[idx].szFileName,0);
	}

	return ( m_pImageInfoArray[idx].pSpriteObject );
}
IDISpriteObject * cResourceManager::GetImageInfo( char * fileName, cImageSize size, int layer )
{

	for( int i = 0 ; i < m_nMaxImageInfoNum ; ++i )
	{
		if( m_pImageInfoArray[i].pSpriteObject && 0 == strcmp( m_pImageInfoArray[i].szFileName, fileName ) )
		{
			return m_pImageInfoArray[i].pSpriteObject;
		}
	}

	PTRLISTPOS pos = m_pImageList->GetHeadPosition();
	while(pos)
	{
		IMAGE_NODE * node = (IMAGE_NODE *)m_pImageList->GetNext(pos);
		if(0 == strcmp( node->szFileName, fileName ) )
		{	
			return node->pSpriteObject;
		}
	}

	IMAGE_NODE * pNewNode	= new IMAGE_NODE;
	strcpy( pNewNode->szFileName, fileName );
	pNewNode->pSpriteObject = g_pExecutive->GetRenderer()->CreateSpriteObject(fileName,0);
	pNewNode->layer			= layer;
	pNewNode->size			= size;
	
	if( !pNewNode->pSpriteObject )
	{
		char buffer[255];
		GetCurrentDirectory(255, buffer);
		strcat(buffer, fileName);
		ASSERTMSG(0, buffer);
		if( pNewNode ) delete pNewNode;
	}

	m_pImageList->AddTail( pNewNode );
	return pNewNode->pSpriteObject;
}


void cResourceManager::Release()
{
	ReleaseResourceAll();
	if(m_pImageInfoArray)
	{
		delete [] m_pImageInfoArray;
		m_pImageInfoArray = NULL;
	}
	if(m_pImageList)
	{
		delete m_pImageList;
		m_pImageList = NULL;
	}
}

void cResourceManager::ReleaseResourceAll()
{
	if( m_pImageList )
	{	
		for( int i = 0 ; i < m_nMaxImageInfoNum ; ++i )
		{
			if( m_pImageInfoArray[i].pSpriteObject )
			{
				m_pImageInfoArray[i].pSpriteObject->Release();
				m_pImageInfoArray[i].pSpriteObject = NULL;
			}
		}

		PTRLISTPOS pos = m_pImageList->GetHeadPosition();
		while(pos)
		{
			IMAGE_NODE * node = (IMAGE_NODE *)m_pImageList->GetNext(pos);
			node->pSpriteObject->Release();
			node->pSpriteObject = NULL;
			SAFE_DELETE(node);
		}
		m_pImageList->RemoveAll();
	}
}

char * cResourceManager::GetMsg(int idx)
{
	static char msg[255];
	CMHFile fp;
#ifdef _FILE_BIN_
	fp.Init(m_szMsgListPath, "rb");
	for(int i = 0 ; i < idx-1 ; i++)
	{
		fp.GetLine(msg, 255);
	}
	fp.GetInt();
//	fp.Seek(1);
	fp.GetLine(msg, 255);
	fp.Release();
#else
	fp.Init(m_szMsgListPath, "rt");
	for(int i = 0 ; i < idx-1 ; i++)
	{
		fp.GetLine(msg, 255);
	}
	fp.GetInt();
	fp.Seek(1);
	fp.GetLine(msg, 255);
	fp.Release();
#endif

	return msg;
}


void cResourceManager::ReleaseResource(int layer)
{
	for( int i = 0 ; i < m_nMaxImageInfoNum ; ++i )
	{
		if( m_pImageInfoArray[i].pSpriteObject && m_pImageInfoArray[i].layer == layer)
		{
			m_pImageInfoArray[i].pSpriteObject->Release();
			m_pImageInfoArray[i].pSpriteObject = NULL;
			return;
		}
	}

	PTRLISTPOS pos = m_pImageList->GetHeadPosition();
	while(pos)
	{
		IMAGE_NODE * node = (IMAGE_NODE *)m_pImageList->GetAt(pos);
		if(node->layer == layer)
		{
			node->pSpriteObject->Release();
			node->pSpriteObject = NULL;
			SAFE_DELETE(node);
			m_pImageList->RemoveAt(pos);
			break;
		}
		m_pImageList->GetNext(pos);
	}
}

⌨️ 快捷键说明

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