forked from metin2/client
Used shared pointers and string streams to read data from the CEterPackManager
This commit is contained in:
@ -76,18 +76,23 @@ bool CTerrainImpl::LoadHeightMap(const char*c_szFileName)
|
||||
{
|
||||
Tracef("LoadRawHeightMapFile %s ", c_szFileName);
|
||||
|
||||
CMappedFile kMappedFile;
|
||||
LPCVOID lpcvFileData;
|
||||
|
||||
if (!CEterPackManager::Instance().Get(kMappedFile, c_szFileName, &lpcvFileData))
|
||||
std::stringstream data;
|
||||
if (!CEterPackManager::Instance().Get(c_szFileName, data))
|
||||
{
|
||||
Tracen("Error");
|
||||
TraceError("CTerrainImpl::LoadHeightMap - %s OPEN ERROR", c_szFileName);
|
||||
return false;
|
||||
}
|
||||
|
||||
memcpy(m_awRawHeightMap, lpcvFileData, sizeof(WORD)*HEIGHTMAP_RAW_XSIZE*HEIGHTMAP_RAW_YSIZE);
|
||||
|
||||
data.read((char*) m_awRawHeightMap, sizeof(WORD)*HEIGHTMAP_RAW_XSIZE*HEIGHTMAP_RAW_YSIZE);
|
||||
if (!data)
|
||||
{
|
||||
// Could not read data
|
||||
TraceError("CTerrainImpl::LoadHeightMap - %s READ ERROR", c_szFileName);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Data read successfully
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -96,18 +101,13 @@ bool CTerrainImpl::LoadAttrMap(const char *c_szFileName)
|
||||
DWORD dwStart = ELTimer_GetMSec();
|
||||
Tracef("LoadAttrMapFile %s ", c_szFileName);
|
||||
|
||||
CMappedFile kMappedFile;
|
||||
LPCVOID lpcvFileData;
|
||||
|
||||
if (!CEterPackManager::Instance().Get(kMappedFile, c_szFileName, &lpcvFileData))
|
||||
std::stringstream data;
|
||||
if (!CEterPackManager::Instance().Get(c_szFileName, data))
|
||||
{
|
||||
TraceError("CTerrainImpl::LoadAttrMap - %s OPEN ERROR", c_szFileName);
|
||||
return false;
|
||||
}
|
||||
|
||||
DWORD dwFileSize = kMappedFile.Size();
|
||||
BYTE * abFileData = (BYTE *) lpcvFileData;
|
||||
|
||||
// LoadAttrMap
|
||||
{
|
||||
#pragma pack(push)
|
||||
@ -119,16 +119,15 @@ bool CTerrainImpl::LoadAttrMap(const char *c_szFileName)
|
||||
WORD m_wHeight;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
if (dwFileSize < sizeof(SAttrMapHeader))
|
||||
|
||||
SAttrMapHeader kAttrMapHeader;
|
||||
data.read((char*) &kAttrMapHeader, sizeof(kAttrMapHeader));
|
||||
if (!data)
|
||||
{
|
||||
TraceError(" CTerrainImpl::LoadAttrMap - %s FILE SIZE ERROR", c_szFileName);
|
||||
return false;
|
||||
}
|
||||
|
||||
SAttrMapHeader kAttrMapHeader;
|
||||
memcpy(&kAttrMapHeader, abFileData, sizeof(kAttrMapHeader));
|
||||
|
||||
const WORD c_wAttrMapMagic = 2634;
|
||||
if (c_wAttrMapMagic != kAttrMapHeader.m_wMagic)
|
||||
{
|
||||
@ -148,40 +147,40 @@ bool CTerrainImpl::LoadAttrMap(const char *c_szFileName)
|
||||
return false;
|
||||
}
|
||||
|
||||
DWORD dwFileRestSize=dwFileSize-sizeof(kAttrMapHeader);
|
||||
DWORD dwFileNeedSize=sizeof(m_abyAttrMap);
|
||||
if (dwFileRestSize != dwFileNeedSize)
|
||||
data.read((char*)m_abyAttrMap, sizeof(m_abyAttrMap));
|
||||
if (!data)
|
||||
{
|
||||
TraceError("CTerrainImpl::LoadAttrMap - %s FILE DATA SIZE(rest %d != need %d) ERROR", c_szFileName, dwFileRestSize, dwFileNeedSize);
|
||||
TraceError("CTerrainImpl::LoadAttrMap - %s FILE DATA SIZE ERROR", c_szFileName);
|
||||
return false;
|
||||
}
|
||||
|
||||
BYTE* abSrcAttrData= abFileData+sizeof(kAttrMapHeader);
|
||||
memcpy(m_abyAttrMap, abSrcAttrData, sizeof(m_abyAttrMap));
|
||||
}
|
||||
|
||||
Tracef("%d\n", ELTimer_GetMSec() - dwStart);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CTerrainImpl::RAW_LoadTileMap(const char * c_szFileName)
|
||||
bool CTerrainImpl::RAW_LoadTileMap(const char* c_szFileName)
|
||||
{
|
||||
Tracef("LoadSplatFile %s ", c_szFileName);
|
||||
|
||||
CMappedFile kMappedFile;
|
||||
LPCVOID lpcvFileData;
|
||||
|
||||
if (!CEterPackManager::Instance().Get(kMappedFile, c_szFileName, &lpcvFileData))
|
||||
|
||||
std::stringstream data;
|
||||
if (!CEterPackManager::Instance().Get(c_szFileName, data))
|
||||
{
|
||||
Tracen("Error");
|
||||
TraceError("CTerrainImpl::RAW_LoadTileMap - %s OPEN ERROR", c_szFileName);
|
||||
return false;
|
||||
}
|
||||
|
||||
memcpy(m_abyTileMap, lpcvFileData, sizeof(BYTE)*(TILEMAP_RAW_XSIZE)*(TILEMAP_RAW_YSIZE));
|
||||
|
||||
return true;
|
||||
|
||||
data.read((char*)m_abyTileMap, sizeof(BYTE) * (TILEMAP_RAW_XSIZE) * (TILEMAP_RAW_YSIZE));
|
||||
if (!data)
|
||||
{
|
||||
// Could not read data
|
||||
TraceError("CTerrainImpl::RAW_LoadTileMap - %s READ ERROR", c_szFileName);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Data read successfully
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CTerrainImpl::LoadWaterMap(const char * c_szFileName)
|
||||
@ -206,18 +205,16 @@ bool CTerrainImpl::LoadWaterMap(const char * c_szFileName)
|
||||
|
||||
bool CTerrainImpl::LoadWaterMapFile(const char * c_szFileName)
|
||||
{
|
||||
CMappedFile kMappedFile;
|
||||
LPCVOID lpcvFileData;
|
||||
|
||||
if (!CEterPackManager::Instance().Get(kMappedFile, c_szFileName, &lpcvFileData))
|
||||
std::stringstream data;
|
||||
size_t fileSize = 0;
|
||||
if (!CEterPackManager::Instance().Get(c_szFileName, data))
|
||||
{
|
||||
Tracen("Error");
|
||||
TraceError("CTerrainImpl::LoadWaterMap - %s OPEN ERROR", c_szFileName);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
DWORD dwFileSize = kMappedFile.Size();
|
||||
BYTE* abFileData = (BYTE*)lpcvFileData;
|
||||
fileSize = data.str().length();
|
||||
|
||||
{
|
||||
#pragma pack(push)
|
||||
@ -231,15 +228,14 @@ bool CTerrainImpl::LoadWaterMapFile(const char * c_szFileName)
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
if (dwFileSize < sizeof(SWaterMapHeader))
|
||||
SWaterMapHeader kWaterMapHeader;
|
||||
data.read((char*)&kWaterMapHeader, sizeof(kWaterMapHeader));
|
||||
if (!data)
|
||||
{
|
||||
TraceError("CTerrainImpl::LoadWaterMap - %s FILE SIZE ERROR", c_szFileName);
|
||||
return false;
|
||||
}
|
||||
|
||||
SWaterMapHeader kWaterMapHeader;
|
||||
memcpy(&kWaterMapHeader, abFileData, sizeof(kWaterMapHeader));
|
||||
|
||||
const WORD c_wWaterMapMagic = 5426;
|
||||
|
||||
if (c_wWaterMapMagic != kWaterMapHeader.m_wMagic)
|
||||
@ -262,22 +258,23 @@ bool CTerrainImpl::LoadWaterMapFile(const char * c_szFileName)
|
||||
|
||||
m_byNumWater = kWaterMapHeader.m_byLayerCount;
|
||||
|
||||
DWORD dwFileRestSize = dwFileSize - sizeof(kWaterMapHeader);
|
||||
DWORD dwFileRestSize = fileSize - sizeof(kWaterMapHeader);
|
||||
DWORD dwFileNeedSize = sizeof(m_abyWaterMap) + sizeof(long) * m_byNumWater;
|
||||
DWORD dwFileNeedSize2 = sizeof(m_abyWaterMap) + sizeof(WORD) * m_byNumWater;
|
||||
if (dwFileRestSize == dwFileNeedSize2)
|
||||
{
|
||||
WORD wWaterHeight[MAX_WATER_NUM + 1];
|
||||
|
||||
BYTE * abSrcWaterData = abFileData + sizeof(kWaterMapHeader);
|
||||
memcpy(m_abyWaterMap, abSrcWaterData, sizeof(m_abyWaterMap));
|
||||
|
||||
BYTE * abSrcWaterHeight = abSrcWaterData + sizeof(m_abyWaterMap);
|
||||
data.read((char*)m_abyWaterMap, sizeof(m_abyWaterMap));
|
||||
if (!data)
|
||||
return false;
|
||||
|
||||
m_byNumWater = MIN(MAX_WATER_NUM, m_byNumWater);
|
||||
if (m_byNumWater)
|
||||
{
|
||||
memcpy(wWaterHeight, abSrcWaterHeight, sizeof(WORD) * m_byNumWater);
|
||||
data.read((char*)wWaterHeight, sizeof(WORD) * m_byNumWater);
|
||||
if (!data)
|
||||
return false;
|
||||
|
||||
for (int i = 0; i < m_byNumWater; ++i)
|
||||
m_lWaterHeight[i] = wWaterHeight[i];
|
||||
@ -289,13 +286,15 @@ bool CTerrainImpl::LoadWaterMapFile(const char * c_szFileName)
|
||||
return false;
|
||||
}
|
||||
|
||||
BYTE * abSrcWaterData = abFileData + sizeof(kWaterMapHeader);
|
||||
memcpy(m_abyWaterMap, abSrcWaterData, sizeof(m_abyWaterMap));
|
||||
data.read((char*)m_abyWaterMap, sizeof(m_abyWaterMap));
|
||||
if (!data)
|
||||
return false;
|
||||
|
||||
BYTE * abSrcWaterHeight = abSrcWaterData + sizeof(m_abyWaterMap);
|
||||
|
||||
if (m_byNumWater)
|
||||
memcpy(m_lWaterHeight, abSrcWaterHeight, sizeof(long) * m_byNumWater);
|
||||
if (m_byNumWater) {
|
||||
data.read((char*)m_lWaterHeight, sizeof(long)* m_byNumWater);
|
||||
if (!data)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
Reference in New Issue
Block a user