#include "stdafx.h" #include "MapFieldInfo.h" // #include #include BOOL MapFieldInfo::Create(CWzArchive& archive, FIELDCODE fcFIELD) { MapInfoParser* pPARSER = MapInfoParser::Instance(); sFIELDINFO_HASH& rFIELDHASH = pPARSER->GetFieldInfoHash(); BOOL bRET = FALSE; sFIELDINFO* pINFO = rFIELDHASH.GetData(fcFIELD); if(pINFO) { m_pWorldBase = (CWorldBase*)m_rINSTANCE.HANDLEofTERRAIN()(CT_NEW_WORLD, 0); m_pWorldBase->Create(pINFO->bNewPathEngine); bRET = _Load(archive, pINFO->pszPath); if(!bRET) { m_pWorldBase->Destroy(NULL); m_rINSTANCE.HANDLEofTERRAIN()(CT_DELETE_WORLD, 0); m_pWorldBase = NULL; } else { } } return bRET; } BOOL MapFieldInfo::_Load(CWzArchive& archive, const CHAR* pszFieldPath) { //C3D_WORLD_BASE rWORLD(m_pWorldBase); BOOL bRET = FALSE; CDiscAccess cda; cda.Create(); archive.SetDiscAccess(&cda); if(_access(pszFieldPath, 0) < 0) { //SUNLOG(eCRITICAL_LOG, "[FieldInfo::Load] Failed : %s file is not Exist", field_path); goto CLOSURE_MARK; } if(archive.LoadFile(const_cast(pszFieldPath)) == FALSE) { //SUNLOG(eCRITICAL_LOG, "[FieldInfo::Load] Failed LoadFile() : From Fieldxx.map[%s]", field_path); goto CLOSURE_MARK; } archive.Seek(4, SO_CURRENT); archive >> m_wVersion; archive.Seek(-6, SO_CURRENT); if(!m_pWorldBase->Serialize(&archive)) { goto CLOSURE_MARK; } BOOL bContinue = TRUE; ////////////////////////////////////////////////////////////////////////// // do { St_ChunkInfo stCI = archive.ReadChunk(); if(stCI.m_nID == 0x1792) bContinue = FALSE; else archive.SkipCurrentChunk(stCI); } while(bContinue); bRET = TRUE; CLOSURE_MARK: archive.Close(); return bRET; }