Files
Sun1602/ProgramCommon/AreaTileLoadHelper.cpp
2022-10-26 12:25:11 +08:00

146 lines
3.7 KiB
C++

#include "StdAfx.h"
#include <ProgramCommon/wzDataType.h>
#include <ProgramCommon/DiscAccess.h>
#include <ProgramCommon/WzArchive.h>
#include "AreaTileLoadHelper.h"
#include "Define.h"
//----------------------------------------------------------------------------
/**
*/
CAreaTileHelper::CAreaTileHelper()
{
m_pAreaTileInfoHashTable = new util::SolarHashTable<AREA_TILE_INFO *>;
m_pAreaTileInfoHashTable->Initialize( 100 );
m_TotalTileCount = 0;
}
//----------------------------------------------------------------------------
/**
*/
CAreaTileHelper::~CAreaTileHelper()
{
if (m_pAreaTileInfoHashTable)
{
m_pAreaTileInfoHashTable->SetFirst();
while (AREA_TILE_INFO* tile_info = m_pAreaTileInfoHashTable->GetNext())
{
SAFE_DELETE(tile_info);
}
m_pAreaTileInfoHashTable->RemoveAll();
SAFE_DELETE(m_pAreaTileInfoHashTable);
}
m_TotalTileCount = 0;
}
//----------------------------------------------------------------------------
/**
*/
BOOL CAreaTileHelper::SaveAreaTile( TCHAR* szFileName )
{
CWzArchive saveArchive;
if(!saveArchive.SaveFile(szFileName))
{
return FALSE;
}
DWORD dwVersion = VERSION_AREA_TILE;
saveArchive << dwVersion;
int iAreaNum=m_pAreaTileInfoHashTable->GetDataNum();
(saveArchive) << iAreaNum; //공간 갯수
m_pAreaTileInfoHashTable->SetFirst();
while (AREA_TILE_INFO* area_info = m_pAreaTileInfoHashTable->GetNext())
{
saveArchive << area_info->iAreaID; //공간 번호
saveArchive << area_info->wNumberOfTiles; //타일 갯수
for (int i = 0; i < area_info->wNumberOfTiles; ++i)
{
saveArchive << area_info->piTileIndex[i]; //타일 인덱스
}
}
saveArchive.Close();
return TRUE;
}
//----------------------------------------------------------------------------
/**
*/
BOOL CAreaTileHelper::LoadAreaTile( TCHAR* szFileName, CDiscAccess* pDiscAccess )
{
DWORD dwVersion;
int iAreaNum;
CWzArchive loadArchive;
if( pDiscAccess != NULL )
{
loadArchive.SetDiscAccess( pDiscAccess );
}
if( !loadArchive.LoadFile( szFileName))
return FALSE;
loadArchive >> dwVersion;
loadArchive >> iAreaNum; //공간 갯수
for(int i=0;i<iAreaNum;i++)
{
AREA_TILE_INFO * pAreaInfo = new AREA_TILE_INFO;
loadArchive >>pAreaInfo->iAreaID; //공간 번호
loadArchive >>pAreaInfo->wNumberOfTiles; //타일 갯수
pAreaInfo->piTileIndex = new int[pAreaInfo->wNumberOfTiles];
for(int j=0;j<pAreaInfo->wNumberOfTiles;j++)
{
loadArchive >>pAreaInfo->piTileIndex[j]; //타일 인덱스
}
m_TotalTileCount += pAreaInfo->wNumberOfTiles;
m_pAreaTileInfoHashTable->Add( pAreaInfo, pAreaInfo->iAreaID );
}
loadArchive.Close();
return TRUE;
}
/*
BOOL Map::LoadMapWAT(CAreaTileHelper * pAreaTileLoadHelper)
{
char szBufStr[_MAX_PATH] = { 0, };
char szDrive[_MAX_PATH] = { 0, };
char szDir[_MAX_PATH] = { 0, };
char szFName[_MAX_FNAME] = { 0, };
char szExt[_MAX_EXT] = { 0, };
char szWATFileName[MAX_PATH]= { 0, };
_splitpath(GetFullFileName(), szDrive, szDir, NULL, NULL);
ZeroMemory(m_szFilePath,sizeof(m_szFilePath));
if (szDrive[0] == 0)
{
_stprintf(m_szFilePath,_T("%s"),szDir);
}
else
{
_stprintf(m_szFilePath,_T("%s\\%s"),szDrive,szDir);
}
StrCopy(szWATFileName, m_szFullFileName);
szWATFileName[strlen(m_szFullFileName)- 3] = 0;
strcat(szWATFileName, "wat");
CDiscAccess discAcess;//파일이 있나 검사
DA_FILE dfFile=discAcess.OpenFile(EDI_ACTIVE, szWATFileName, DA_READ, DA_READ, SM_READ | SM_WRITE , OD_OPEN_EXISTING);
if ( INVALID_DA_FILE == dfFile)
{
return FALSE;
}
discAcess.CloseFile( dfFile);
return pAreaTileLoadHelper->LoadAreaTile(szWATFileName);
}
*/