Files
Client/Engine/Zalla3D Scene Class/MapStorage.cpp
LGram16 e067522598 Initial commit: ROW Client source code
Game client codebase including:
- CharacterActionControl: Character and creature management
- GlobalScript: Network, items, skills, quests, utilities
- RYLClient: Main client application with GUI and event handlers
- Engine: 3D rendering engine (RYLGL)
- MemoryManager: Custom memory allocation
- Library: Third-party dependencies (DirectX, boost, etc.)
- Tools: Development utilities

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 16:24:34 +09:00

5125 lines
154 KiB
C++
Raw Blame History

// MapStorage.cpp: implementation of the CMapStorage class.
//
//////////////////////////////////////////////////////////////////////
#include "MapStorage.h"
#include "RenderOption.h"
#include "AmbienceManager.h"
#include "BgmManager.h"
#include "SceneManager.h"
#include "SoundMgr.h"
#include "GMMemory.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
/*
std::vector<CSectorDungeonMap*> CMapStorage::m_DundeonMap;
std::vector<CSectorHeightMap*> CMapStorage::m_HeightMap;
std::vector<CSectorMeshMap*> CMapStorage::m_MeshMap;
std::vector<CSectorPlantMap*> CMapStorage::m_PlantMap;
std::vector<CSectorWideMap*> CMapStorage::m_WideMap;
std::vector<CSectorHouseMap*> CMapStorage::m_HouseMap;
std::vector<CSectorWaterMap*> CMapStorage::m_WaterMap;
std::vector<CSectorFallMap*> CMapStorage::m_FallMap;
std::vector<CInHouseObjectMap*> CMapStorage::m_InHouseMap;
std::vector<CSectorMustDivideVertexMap*> CMapStorage::m_MustDivideVertexMap;
std::vector<CSectorEffectMap*> CMapStorage::m_EffectMap;
long CMapStorage::m_TotalHouseSceneCount;
long CMapStorage::m_TotalInHouseLightSceneCount;
long CMapStorage::m_TotalInHouseObjectSceneCount;
long CMapStorage::m_TotalObjectSceneCount;
*/
CMapStorage::CMapStorage()
{
m_TotalHouseSceneCount=0;
m_TotalInHouseLightSceneCount=0;
m_TotalInHouseObjectSceneCount=0;
m_TotalObjectSceneCount=0;
m_TotalLightCount = 0;
m_LoadMode=0;
memset(m_DundeonMapTable,0,sizeof(CSectorDungeonMap *) * MAXSECTOR);
memset(m_MeshMapTable,0,sizeof(CSectorMeshMap *) * MAXSECTOR);
memset(m_PlantMapTable,0,sizeof(CSectorPlantMap *) * MAXSECTOR);
memset(m_HouseMapTable,0,sizeof(CSectorHouseMap *) * MAXSECTOR);
memset(m_WaterMapTable,0,sizeof(CSectorWaterMap *) * MAXSECTOR);
memset(m_FallMapTable,0,sizeof(CSectorFallMap *) * MAXSECTOR);
memset(m_InHouseMapTable,0,sizeof(CInHouseObjectMap *) * MAXSECTOR);
memset(m_MustDivideVertexMapTable,0,sizeof(CSectorMustDivideVertexMap *) * MAXSECTOR);
memset(m_EffectMapTable,0,sizeof(CSectorEffectMap *) * MAXSECTOR);
memset(m_LightMapTable,0,sizeof(CSectorLightMap *) * MAXSECTOR);
memset(m_LandscapeEffectMapTable,0,sizeof(CSectorLandscapeEffectMap *) * MAXSECTOR);
memset(m_HeightMapTable,0,sizeof(CSectorHeightMap *) * MAXSECTOR);
memset(m_WideMapTable,0,sizeof(CSectorWideMap *) * MAXSECTOR);
}
CMapStorage::~CMapStorage()
{
DeleteAllObject();
}
void CMapStorage::Load(char *strFilename)
{
//map search Table <20>ʱ<EFBFBD>ȭ
memset(m_DundeonMapTable,0,sizeof(CSectorDungeonMap *) * MAXSECTOR);
memset(m_MeshMapTable,0,sizeof(CSectorMeshMap *) * MAXSECTOR);
memset(m_PlantMapTable,0,sizeof(CSectorPlantMap *) * MAXSECTOR);
memset(m_HouseMapTable,0,sizeof(CSectorHouseMap *) * MAXSECTOR);
memset(m_WaterMapTable,0,sizeof(CSectorWaterMap *) * MAXSECTOR);
memset(m_FallMapTable,0,sizeof(CSectorFallMap *) * MAXSECTOR);
memset(m_InHouseMapTable,0,sizeof(CInHouseObjectMap *) * MAXSECTOR);
memset(m_MustDivideVertexMapTable,0,sizeof(CSectorMustDivideVertexMap *) * MAXSECTOR);
memset(m_EffectMapTable,0,sizeof(CSectorEffectMap *) * MAXSECTOR);
memset(m_LightMapTable,0,sizeof(CSectorLightMap *) * MAXSECTOR);
memset(m_LandscapeEffectMapTable,0,sizeof(CSectorLandscapeEffectMap *) * MAXSECTOR);
memset(m_HeightMapTable,0,sizeof(CSectorHeightMap *) * MAXSECTOR);
memset(m_WideMapTable,0,sizeof(CSectorWideMap *) * MAXSECTOR);
FILE *fp=fopen(strFilename,"rb");
if(fp==NULL)
return;
strcpy(m_strMapFilename,strFilename);
DeleteAllData();
char strRead[MAX_NAMEBUFFER];
fread(strRead,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(&m_TotalHouseSceneCount,sizeof(long),1,fp);
fread(&m_TotalInHouseLightSceneCount,sizeof(long),1,fp);
fread(&m_TotalInHouseObjectSceneCount,sizeof(long),1,fp);
fread(&m_TotalObjectSceneCount,sizeof(long),1,fp);
// Height-Value Loading
int cSavedHeightData=0;
fread(&cSavedHeightData,sizeof(int),1,fp);
if(m_LoadMode==0)
{
for(int cHeightData=0;cHeightData<cSavedHeightData;cHeightData++)
{
CSectorHeightMap *AddNode=new CSectorHeightMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
AddNode->m_pHeightData=new float[SECTORSX*SECTORSY];
fread(AddNode->m_pHeightData,sizeof(float)*SECTORSX*SECTORSY,1,fp);
m_HeightMap.push_back(AddNode);
/*
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_HeightMapTable[iNode] = AddNode;
*/
}
}
else
{
float pHeightData[SECTORSX*SECTORSY];
for(int cHeightData=0;cHeightData<cSavedHeightData;cHeightData++)
{
CSectorHeightMap *AddNode=new CSectorHeightMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
AddNode->m_FilePos=ftell(fp);
fread(&pHeightData,sizeof(float)*SECTORSX*SECTORSY,1,fp);
m_HeightMap.push_back(AddNode);
/*
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_HeightMapTable[iNode] = AddNode;
*/
}
}
//Water loading
int cSavedWaterData=0;
fread(&cSavedWaterData,sizeof(int),1,fp);
for(int cWaterData=0;cWaterData<cSavedWaterData;cWaterData++)
{
CSectorWaterMap *AddNode=new CSectorWaterMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
fread(&AddNode->m_fWaterPosX,sizeof(float),1,fp);
fread(&AddNode->m_fWaterPosY,sizeof(float),1,fp);
fread(&AddNode->m_fWaterSizeX,sizeof(float),1,fp);
fread(&AddNode->m_fWaterSizeY,sizeof(float),1,fp);
fread(&AddNode->m_fWaterHeight,sizeof(float),1,fp);
fread(&AddNode->m_bWaterRelection,sizeof(bool),1,fp);
fread(&AddNode->m_WaterColor,sizeof(color),1,fp);
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_WaterMap.push_back(AddNode);
m_WaterMapTable[iNode] = AddNode;
}
//Widemap loading
int cSavedWideData=0;
fread(&cSavedWideData,sizeof(int),1,fp);
for(int cWideData=0;cWideData<cSavedWideData;cWideData++)
{
CSectorWideMap *AddNode=new CSectorWideMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
fread(AddNode->m_strWidemapName[0],sizeof(char)*MAX_NAMEBUFFER,1,fp);
strcpy(AddNode->m_strDetailName[0],"detail.dds");
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_WideMap.push_back(AddNode);
m_WideMapTable[iNode] = AddNode;
}
//Fallmap loading
int cSavedFallData=0;
fread(&cSavedFallData,sizeof(int),1,fp);
for(int cFallData=0;cFallData<cSavedFallData;cFallData++)
{
CSectorFallMap *AddNode=new CSectorFallMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
fread(&AddNode->m_fFallPosX,sizeof(float),1,fp);
fread(&AddNode->m_fFallPosY,sizeof(float),1,fp);
fread(&AddNode->m_fFallRot,sizeof(float),1,fp);
int cSavedFallList;
fread(&cSavedFallList,sizeof(int),1,fp);
for(int cFallList=0;cFallList<cSavedFallList;cFallList++)
{
float ReadFallData;
color ReadFallColor;
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallHeightList.push_back(ReadFallData);
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallLeftList.push_back(ReadFallData);
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallRightList.push_back(ReadFallData);
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallAddXList.push_back(ReadFallData);
fread(&ReadFallColor,sizeof(color),1,fp);
AddNode->m_FallColor.push_back(ReadFallColor);
}
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_FallMap.push_back(AddNode);
m_FallMapTable[iNode] = AddNode;
}
// HouseMap loading
int cSavedHouseData=0;
fread(&cSavedHouseData,sizeof(int),1,fp);
int IndexX, IndexY;
for(int cHouseData=0;cHouseData<cSavedHouseData;cHouseData++)
{
fread(&IndexX,sizeof(int),1,fp);
fread(&IndexY,sizeof(int),1,fp);
int iNode = IndexX * 11 + IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
continue;
}
CSectorHouseMap *AddNode=new CSectorHouseMap();
int cSavedHouseList=0;
AddNode->m_IndexX = IndexX;
AddNode->m_IndexY = IndexY;
fread(&cSavedHouseList,sizeof(int),1,fp);
for(int cHouseList=0;cHouseList<cSavedHouseList;cHouseList++)
{
int ReadHouseID;
char *ReadHouseName;
matrix ReadHouseTM;
fread(&ReadHouseTM,sizeof(matrix),1,fp);
AddNode->m_TM.push_back(ReadHouseTM);
fread(&ReadHouseID,sizeof(int),1,fp);
AddNode->m_HouseSceneID.push_back(ReadHouseID);
ReadHouseName=new char[MAX_NAMEBUFFER];
ZeroMemory(ReadHouseName, MAX_NAMEBUFFER);
fread(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strOutName.push_back(ReadHouseName);
ReadHouseName=new char[MAX_NAMEBUFFER];
ZeroMemory(ReadHouseName, MAX_NAMEBUFFER);
fread(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strMedName.push_back(ReadHouseName);
ReadHouseName=new char[MAX_NAMEBUFFER];
ZeroMemory(ReadHouseName, MAX_NAMEBUFFER);
fread(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strInName.push_back(ReadHouseName);
ReadHouseName=new char[MAX_NAMEBUFFER];
strcpy(ReadHouseName,"");
AddNode->m_strBspName.push_back(ReadHouseName);
}
m_HouseMap.push_back(AddNode);
m_HouseMapTable[iNode] = AddNode;
}
int cSavedInHouseData=0;
fread(&cSavedInHouseData,sizeof(int),1,fp);
for(int cInHouseData=0;cInHouseData<cSavedInHouseData;cInHouseData++)
{
CInHouseObjectMap *AddNode=new CInHouseObjectMap();
fread(AddNode->m_strOutName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(AddNode->m_strMedName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(AddNode->m_strInName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
strcpy(AddNode->m_strOutName,strlwr(AddNode->m_strOutName));
strcpy(AddNode->m_strMedName,strlwr(AddNode->m_strMedName));
strcpy(AddNode->m_strInName,strlwr(AddNode->m_strInName));
strcpy(AddNode->m_strBspName,"");
int cSavedObject,cSavedLight;
fread(&cSavedObject,sizeof(int),1,fp);
for(int cObject=0;cObject<cSavedObject;cObject++)
{
matrix ReadObjectTM;
bool ReadAlpha,ReadLight;
long ReadObjectID;
char *ReadObjectName=new char[MAX_NAMEBUFFER];
fread(ReadObjectName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strObjectNameList.push_back(ReadObjectName);
fread(&ReadObjectID,sizeof(long),1,fp);
AddNode->m_ObjectID.push_back(ReadObjectID);
fread(&ReadObjectTM,sizeof(matrix),1,fp);
AddNode->m_matObjectList.push_back(ReadObjectTM);
fread(&ReadAlpha,sizeof(bool),1,fp);
AddNode->m_isAlpha.push_back(true);
fread(&ReadLight,sizeof(bool),1,fp);
AddNode->m_isLight.push_back(true);
}
fread(&cSavedLight,sizeof(int),1,fp);
for(int cLight=0;cLight<cSavedLight;cLight++)
{
matrix ReadLightTM;
float ReadLightRange;
color ReadLightColor;
long ReadLightID;
char *ReadLightName=new char[MAX_NAMEBUFFER];
fread(ReadLightName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strLightNameList.push_back(ReadLightName);
fread(&ReadLightID,sizeof(long),1,fp);
AddNode->m_LightID.push_back(ReadLightID);
fread(&ReadLightTM,sizeof(matrix),1,fp);
AddNode->m_matLightList.push_back(ReadLightTM);
fread(&ReadLightRange,sizeof(float),1,fp);
AddNode->m_fLightRange.push_back(ReadLightRange);
fread(&ReadLightColor,sizeof(color),1,fp);
AddNode->m_LightColor.push_back(ReadLightColor);
}
m_InHouseMap.push_back(AddNode);
}
// PlantMap loading
int cSavedPlantData=0;
fread(&cSavedPlantData,sizeof(int),1,fp);
for(int cPlantData=0;cPlantData<cSavedPlantData;cPlantData++)
{
CSectorPlantMap *AddNode=new CSectorPlantMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
int cSavedSubPlant;
int ReadKind;
unsigned char ReadPosX,ReadPosZ;
//vector3 ReadPos;
fread(&cSavedSubPlant,sizeof(int),1,fp);
for(int cSubPlant=0;cSubPlant<cSavedSubPlant;cSubPlant++)
{
fread(&ReadKind,sizeof(unsigned char),1,fp);
fread(&ReadPosX,sizeof(unsigned char),1,fp);
fread(&ReadPosZ,sizeof(unsigned char),1,fp);
//fread(&ReadPos,sizeof(vector3),1,fp);
bool isAlready=false;
for(int cNowPlant=0;cNowPlant<(int)AddNode->m_PlantKind.size();cNowPlant++)
{
if( AddNode->m_PlantPosX[cNowPlant]==ReadPosX &&
AddNode->m_PlantPosZ[cNowPlant]==ReadPosZ)
{
AddNode->m_PlantKind[cNowPlant]=ReadKind;
AddNode->m_PlantPosX[cNowPlant]=ReadPosX;
AddNode->m_PlantPosZ[cNowPlant]=ReadPosZ;
isAlready=true;
}
}
if(isAlready==false)
{
AddNode->m_PlantKind.push_back(ReadKind);
AddNode->m_PlantPosX.push_back(ReadPosX);
AddNode->m_PlantPosZ.push_back(ReadPosZ);
}
//AddNode->m_vecPlantPos.push_back(ReadPos);
}
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_PlantMap.push_back(AddNode);
m_PlantMapTable[iNode] = AddNode;
}
// MeshMap loading
int cSavedMeshData=0;
fread(&cSavedMeshData,sizeof(int),1,fp);
for(int cMeshData=0;cMeshData<cSavedMeshData;cMeshData++)
{
CSectorMeshMap *AddNode=new CSectorMeshMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
int cSavedObject=0;
fread(&cSavedObject,sizeof(int),1,fp);
int ReadObjectSceneID;
matrix ReadMatrixTM;
bool ReadAlpha,ReadLight;
for(int cObject=0;cObject<cSavedObject;cObject++)
{
fread(&ReadObjectSceneID,sizeof(long),1,fp);
char *ReadObjectName=new char[MAX_NAMEBUFFER];
fread(ReadObjectName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(&ReadMatrixTM,sizeof(matrix),1,fp);
fread(&ReadAlpha,sizeof(bool),1,fp);
fread(&ReadLight,sizeof(bool),1,fp);
AddNode->m_ObjectSceneID.push_back(ReadObjectSceneID);
AddNode->m_strObjectName.push_back(ReadObjectName);
AddNode->m_TM.push_back(ReadMatrixTM);
AddNode->m_isAlpha.push_back(true);
AddNode->m_isLight.push_back(true);
}
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_MeshMap.push_back(AddNode);
m_MeshMapTable[iNode] = AddNode;
}
fclose(fp);
BugFix_Tree();
//BugFix_Hangul2English();
}
void CMapStorage::Save(char *strFilename)
{
FILE *fp=fopen(strFilename,"wb");
if(fp==NULL)
return;
char strWrite[MAX_NAMEBUFFER];
sprintf(strWrite,"ZallA-3D Scene Data File Build#1");
fwrite(strWrite,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(&m_TotalHouseSceneCount,sizeof(long),1,fp);
fwrite(&m_TotalInHouseLightSceneCount,sizeof(long),1,fp);
fwrite(&m_TotalInHouseObjectSceneCount,sizeof(long),1,fp);
fwrite(&m_TotalObjectSceneCount,sizeof(long),1,fp);
// Height-Value Saving
int iCnt = m_HeightMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cHeightData=0;cHeightData<iCnt;cHeightData++)
{
fwrite(&m_HeightMap[cHeightData]->m_IndexX,sizeof(int),1,fp);
fwrite(&m_HeightMap[cHeightData]->m_IndexY,sizeof(int),1,fp);
fwrite(m_HeightMap[cHeightData]->m_pHeightData,sizeof(float)*SECTORSX*SECTORSY,1,fp);
}
//Water Saving
iCnt = m_WaterMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cWaterData=0;cWaterData<iCnt;cWaterData++)
{
fwrite(&m_WaterMap[cWaterData]->m_IndexX,sizeof(int),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_IndexY,sizeof(int),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_fWaterPosX,sizeof(float),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_fWaterPosY,sizeof(float),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_fWaterSizeX,sizeof(float),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_fWaterSizeY,sizeof(float),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_fWaterHeight,sizeof(float),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_bWaterRelection,sizeof(bool),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_WaterColor,sizeof(color),1,fp);
}
//Widemap saving
iCnt = m_WideMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cWideData=0;cWideData<iCnt;cWideData++)
{
fwrite(&m_WideMap[cWideData]->m_IndexX,sizeof(int),1,fp);
fwrite(&m_WideMap[cWideData]->m_IndexY,sizeof(int),1,fp);
fwrite(m_WideMap[cWideData]->m_strWidemapName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
}
//Fallmap saving
iCnt = m_FallMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cFallData=0;cFallData<iCnt;cFallData++)
{
fwrite(&m_FallMap[cFallData]->m_IndexX,sizeof(int),1,fp);
fwrite(&m_FallMap[cFallData]->m_IndexY,sizeof(int),1,fp);
fwrite(&m_FallMap[cFallData]->m_fFallPosX,sizeof(float),1,fp);
fwrite(&m_FallMap[cFallData]->m_fFallPosY,sizeof(float),1,fp);
fwrite(&m_FallMap[cFallData]->m_fFallRot,sizeof(float),1,fp);
int iSize = m_FallMap[cFallData]->m_FallHeightList.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cFallList=0;cFallList<iSize;cFallList++)
{
fwrite(&m_FallMap[cFallData]->m_FallHeightList[cFallList],sizeof(float),1,fp);
fwrite(&m_FallMap[cFallData]->m_FallLeftList[cFallList],sizeof(float),1,fp);
fwrite(&m_FallMap[cFallData]->m_FallRightList[cFallList],sizeof(float),1,fp);
fwrite(&m_FallMap[cFallData]->m_FallAddXList[cFallList],sizeof(float),1,fp);
fwrite(&m_FallMap[cFallData]->m_FallColor[cFallList],sizeof(color),1,fp);
}
}
//HouseMap saving
iCnt = m_HouseMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cHouseData=0;cHouseData<iCnt;cHouseData++)
{
fwrite(&m_HouseMap[cHouseData]->m_IndexX,sizeof(int),1,fp);
fwrite(&m_HouseMap[cHouseData]->m_IndexY,sizeof(int),1,fp);
int iSize = m_HouseMap[cHouseData]->m_TM.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cHouseList=0;cHouseList<iSize;cHouseList++)
{
fwrite(&m_HouseMap[cHouseData]->m_TM[cHouseList],sizeof(matrix),1,fp);
fwrite(&m_HouseMap[cHouseData]->m_HouseSceneID[cHouseList],sizeof(int),1,fp);
fwrite(m_HouseMap[cHouseData]->m_strOutName[cHouseList],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_HouseMap[cHouseData]->m_strMedName[cHouseList],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_HouseMap[cHouseData]->m_strInName[cHouseList],sizeof(char)*MAX_NAMEBUFFER,1,fp);
}
}
//InHouseObjectMap saving
iCnt = m_InHouseMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cInHouseData=0;cInHouseData<iCnt;cInHouseData++)
{
fwrite(m_InHouseMap[cInHouseData]->m_strOutName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_InHouseMap[cInHouseData]->m_strMedName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_InHouseMap[cInHouseData]->m_strInName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
int iSize = m_InHouseMap[cInHouseData]->m_strObjectNameList.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cObject=0;cObject<iSize;cObject++)
{
fwrite(m_InHouseMap[cInHouseData]->m_strObjectNameList[cObject],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_ObjectID[cObject],sizeof(long),1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_matObjectList[cObject],sizeof(matrix),1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_isAlpha[cObject],sizeof(bool),1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_isLight[cObject],sizeof(bool),1,fp);
}
iSize = m_InHouseMap[cInHouseData]->m_strLightNameList.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cLight=0;cLight<iSize;cLight++)
{
fwrite(m_InHouseMap[cInHouseData]->m_strLightNameList[cLight],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_LightID[cLight],sizeof(long),1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_matLightList[cLight],sizeof(matrix),1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_fLightRange[cLight],sizeof(float),1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_LightColor[cLight],sizeof(color),1,fp);
}
}
// PlantMap saving
iCnt = m_PlantMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cPlantData=0;cPlantData<iCnt;cPlantData++)
{
fwrite(&m_PlantMap[cPlantData]->m_IndexX,sizeof(int),1,fp);
fwrite(&m_PlantMap[cPlantData]->m_IndexY,sizeof(int),1,fp);
int iSize = m_PlantMap[cPlantData]->m_PlantKind.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cSubPlant=0;cSubPlant<iSize;cSubPlant++)
{
fwrite(&m_PlantMap[cPlantData]->m_PlantKind[cSubPlant],sizeof(unsigned char),1,fp);
//fwrite(&m_PlantMap[cPlantData]->m_vecPlantPos[cSubPlant],sizeof(vector3),1,fp);
fwrite(&m_PlantMap[cPlantData]->m_PlantPosX[cSubPlant],sizeof(unsigned char),1,fp);
fwrite(&m_PlantMap[cPlantData]->m_PlantPosZ[cSubPlant],sizeof(unsigned char),1,fp);
}
}
// MeshMap saving
iCnt = m_MeshMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cMeshData=0;cMeshData<iCnt;cMeshData++)
{
fwrite(&m_MeshMap[cMeshData]->m_IndexX,sizeof(int),1,fp);
fwrite(&m_MeshMap[cMeshData]->m_IndexY,sizeof(int),1,fp);
int iSize = m_MeshMap[cMeshData]->m_ObjectSceneID.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cObject=0;cObject<iSize;cObject++)
{
fwrite(&m_MeshMap[cMeshData]->m_ObjectSceneID[cObject],sizeof(long),1,fp);
fwrite(m_MeshMap[cMeshData]->m_strObjectName[cObject],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(&m_MeshMap[cMeshData]->m_TM[cObject],sizeof(matrix),1,fp);
fwrite(&m_MeshMap[cMeshData]->m_isAlpha[cObject],sizeof(bool),1,fp);
fwrite(&m_MeshMap[cMeshData]->m_isLight[cObject],sizeof(bool),1,fp);
}
}
fclose(fp);
}
CSectorDungeonMap* CMapStorage::FindDungeonMap(float fFindx, float fFindy)
{
return NULL;
}
CSectorHeightMap* CMapStorage::FindHeightMap(float fFindx, float fFindy)
{
int indexx=(int)(fFindx/SECTORSIZE);
int indexy=(int)(fFindy/SECTORSIZE);
/*int iNode = indexx * 11 + indexy;
if(iNode <0 || iNode >= MAXSECTOR)
return NULL;
if(m_HeightMapTable[iNode])
{
if(m_HeightMapTable[iNode]->m_FilePos!=0)
{
FILE *fp=fopen(m_strMapFilename,"rb");
fseek(fp,m_HeightMapTable[iNode]->m_FilePos,SEEK_CUR);
m_HeightMapTable[iNode]->m_pHeightData=new float[SECTORSX*SECTORSY];
fread(m_HeightMapTable[iNode]->m_pHeightData,sizeof(float)*SECTORSX*SECTORSY,1,fp);
fclose(fp);
}
return m_HeightMapTable[iNode];
}*/
for(int cStorage=0;cStorage<(int)m_HeightMap.size();cStorage++)
{
if( m_HeightMap[cStorage]->m_IndexX==indexx &&
m_HeightMap[cStorage]->m_IndexY==indexy)
{
if(m_HeightMap[cStorage]->m_FilePos!=0)
{
FILE *fp=fopen(m_strMapFilename,"rb");
fseek(fp,m_HeightMap[cStorage]->m_FilePos,SEEK_CUR);
m_HeightMap[cStorage]->m_pHeightData=new float[SECTORSX*SECTORSY];
fread(m_HeightMap[cStorage]->m_pHeightData,sizeof(float)*SECTORSX*SECTORSY,1,fp);
fclose(fp);
}
return m_HeightMap[cStorage];
}
}
return NULL;
}
CSectorMeshMap* CMapStorage::FindMeshMap(float fFindx, float fFindy)
{
int indexx=(int)(fFindx/SECTORSIZE);
int indexy=(int)(fFindy/SECTORSIZE);
int iNode = indexx * 11 + indexy;
if(iNode <0 || iNode >= MAXSECTOR)
return NULL;
if(m_MeshMapTable[iNode])
{
return m_MeshMapTable[iNode];
}
/*
for(int cStorage=0;cStorage<m_MeshMap.num;cStorage++)
{
if( m_MeshMap[cStorage]->m_IndexX==indexx &&
m_MeshMap[cStorage]->m_IndexY==indexy)
{
return m_MeshMap[cStorage];
}
}*/
return NULL;
}
CSectorPlantMap* CMapStorage::FindPlantMap(float fFindx, float fFindy)
{
int indexx=(int)(fFindx/SECTORSIZE);
int indexy=(int)(fFindy/SECTORSIZE);
int iNode = indexx * 11 + indexy;
if(iNode <0 || iNode >= MAXSECTOR)
return NULL;
if(m_PlantMapTable[iNode])
{
return m_PlantMapTable[iNode];
}
/*
for(int cStorage=0;cStorage<m_PlantMap.num;cStorage++)
{
if( m_PlantMap[cStorage]->m_IndexX==indexx &&
m_PlantMap[cStorage]->m_IndexY==indexy)
{
return m_PlantMap[cStorage];
}
}*/
return NULL;
}
CSectorWideMap* CMapStorage::FindWideMap(float fFindx, float fFindy)
{
int indexx=(int)(fFindx/SECTORSIZE);
int indexy=(int)(fFindy/SECTORSIZE);
int iNode = indexx * 11 + indexy;
if(iNode <0 || iNode >= MAXSECTOR)
return NULL;
if(m_WideMapTable[iNode])
{
return m_WideMapTable[iNode];
}
/*
for(int cStorage=0;cStorage<m_WideMap.num;cStorage++)
{
if( m_WideMap[cStorage]->m_IndexX==indexx &&
m_WideMap[cStorage]->m_IndexY==indexy)
{
return m_WideMap[cStorage];
}
}*/
return NULL;
}
CSectorHouseMap* CMapStorage::FindHouseMap(float fFindx, float fFindy)
{
int indexx=(int)(fFindx/SECTORSIZE);
int indexy=(int)(fFindy/SECTORSIZE);
int iNode = indexx * 11 + indexy;
if(iNode <0 || iNode >= MAXSECTOR)
return NULL;
if(m_HouseMapTable[iNode])
{
return m_HouseMapTable[iNode];
}
/*
for(int cStorage=0;cStorage<m_HouseMap.num;cStorage++)
{
if( m_HouseMap[cStorage]->m_IndexX==indexx &&
m_HouseMap[cStorage]->m_IndexY==indexy)
{
return m_HouseMap[cStorage];
}
}*/
return NULL;
}
void CMapStorage::AddHouseMap(float fAddx, float fAddy, float fAddz,char *strOutName,char *strMedName,char *strInName,char *strBspName)
{
if(strcmp(strOutName,"")==0 && strcmp(strBspName,"")==0 )
return;
int indexx=(int)(fAddx/SECTORSIZE);
int indexy=(int)(fAddz/SECTORSIZE);
char *strAddInName=new char[MAX_NAMEBUFFER];
char *strAddMedName=new char[MAX_NAMEBUFFER];
char *strAddOutName=new char[MAX_NAMEBUFFER];
char *strAddBspName=new char[MAX_NAMEBUFFER];
strcpy(strAddInName,strInName);
strcpy(strAddMedName,strMedName);
strcpy(strAddOutName,strOutName);
strcpy(strAddBspName,strBspName);
matrix tm;
tm.Translation(vector3(fAddx,fAddy,fAddz));
for(int i=0;i<(int)m_HouseMap.size();i++)
{
if( m_HouseMap[i]->m_IndexX==indexx &&
m_HouseMap[i]->m_IndexY==indexy)
{
m_HouseMap[i]->m_strInName.push_back(strAddInName);
m_HouseMap[i]->m_strMedName.push_back(strAddMedName);
m_HouseMap[i]->m_strOutName.push_back(strAddOutName);
m_HouseMap[i]->m_strBspName.push_back(strAddBspName);
m_HouseMap[i]->m_TM.push_back(tm);
m_HouseMap[i]->m_HouseSceneID.push_back(m_TotalHouseSceneCount++);
return;
}
}
int iNode = indexx * 11 + indexy;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
return;
}
CSectorHouseMap *AddSectorHouseMap=new CSectorHouseMap;
AddSectorHouseMap->m_IndexX=indexx;
AddSectorHouseMap->m_IndexY=indexy;
AddSectorHouseMap->m_strInName.push_back(strAddInName);
AddSectorHouseMap->m_strMedName.push_back(strAddMedName);
AddSectorHouseMap->m_strOutName.push_back(strAddOutName);
AddSectorHouseMap->m_strBspName.push_back(strAddBspName);
AddSectorHouseMap->m_TM.push_back(tm);
AddSectorHouseMap->m_HouseSceneID.push_back(m_TotalHouseSceneCount++);
m_HouseMap.push_back(AddSectorHouseMap);
m_HouseMapTable[iNode] = AddSectorHouseMap;
}
void CMapStorage::DeleteHouseMap(float fDelx,float fDely,float fDelz,char *filename)
{
int indexx=(int)(fDelx/SECTORSIZE);
int indexy=(int)(fDelz/SECTORSIZE);
for(int i=0;i<(int)m_HouseMap.size();i++)
{
if( m_HouseMap[i]->m_IndexX==indexx && m_HouseMap[i]->m_IndexY==indexy)
{
std::vector<int> vecDel;
for(int cObject=0;cObject<(int)m_HouseMap[i]->m_TM.size();cObject++)
{
// edith erase <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
if(!strcmp(m_HouseMap[i]->m_strOutName[cObject],filename))
{
if(fabs(m_HouseMap[i]->m_TM[cObject]._41 - fDelx) < 1.0f &&
fabs(m_HouseMap[i]->m_TM[cObject]._42 - fDely) < 1.0f &&
fabs(m_HouseMap[i]->m_TM[cObject]._43 - fDelz) < 1.0f)
{
vecDel.insert(vecDel.begin(), cObject);
}
}
}
for(int a = 0; a < (int)vecDel.size(); a++)
{
int k = vecDel[a];
m_HouseMap[i]->m_TM.erase(m_HouseMap[i]->m_TM.begin()+k);
char *delNode;
delNode=m_HouseMap[i]->m_strOutName[k];
m_HouseMap[i]->m_strOutName.erase(m_HouseMap[i]->m_strOutName.begin()+k);
if(delNode) {
delete [] delNode;
delNode = NULL;
}
delNode=m_HouseMap[i]->m_strMedName[k];
m_HouseMap[i]->m_strMedName.erase(m_HouseMap[i]->m_strMedName.begin()+k);
if(delNode) {
delete [] delNode;
delNode = NULL;
}
delNode=m_HouseMap[i]->m_strInName[k];
m_HouseMap[i]->m_strInName.erase(m_HouseMap[i]->m_strInName.begin()+k);
if(delNode) {
delete [] delNode;
delNode = NULL;
}
delNode=m_HouseMap[i]->m_strBspName[k];
m_HouseMap[i]->m_strBspName.erase(m_HouseMap[i]->m_strBspName.begin()+k);
if(delNode) {
delete [] delNode;
delNode = NULL;
}
}
if(m_HouseMap[i]->m_TM.size()==0)
{
int iNode = m_HouseMap[i]->m_IndexX * 11 + m_HouseMap[i]->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
return;
}
if(m_HouseMap[i]) {
delete m_HouseMap[i];
m_HouseMap[i] = NULL;
}
m_HouseMap.erase(m_HouseMap.begin()+i);
m_HouseMapTable[iNode] = NULL;
}
return;
}
}
}
void CMapStorage::DelHouseMap(float fDelx,float fDely,float fDelz,long HouseSceneID)
{
int indexx=(int)(fDelx/SECTORSIZE);
int indexy=(int)(fDelz/SECTORSIZE);
for(int i=0;i<(int)m_HouseMap.size();i++)
{
if( m_HouseMap[i]->m_IndexX==indexx &&
m_HouseMap[i]->m_IndexY==indexy)
{
std::vector<int> vecDel;
for(int cObject=0;cObject<(int)m_HouseMap[i]->m_TM.size();cObject++)
{
// edith erase <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
if(m_HouseMap[i]->m_HouseSceneID[cObject]==HouseSceneID)
{
vecDel.insert(vecDel.begin(), cObject);
}
}
for(int a = 0; a < (int)vecDel.size(); a++)
{
int k = vecDel[a];
m_HouseMap[i]->m_TM.erase(m_HouseMap[i]->m_TM.begin()+k);
char *delNode;
delNode=m_HouseMap[i]->m_strOutName[k];
m_HouseMap[i]->m_strOutName.erase(m_HouseMap[i]->m_strOutName.begin()+k);
if(delNode) {
delete [] delNode;
delNode = NULL;
}
delNode=m_HouseMap[i]->m_strMedName[k];
m_HouseMap[i]->m_strMedName.erase(m_HouseMap[i]->m_strMedName.begin()+k);
if(delNode) {
delete [] delNode;
delNode = NULL;
}
delNode=m_HouseMap[i]->m_strInName[k];
m_HouseMap[i]->m_strInName.erase(m_HouseMap[i]->m_strInName.begin()+k);
if(delNode) {
delete [] delNode;
delNode = NULL;
}
delNode=m_HouseMap[i]->m_strBspName[k];
m_HouseMap[i]->m_strBspName.erase(m_HouseMap[i]->m_strBspName.begin()+k);
if(delNode) {
delete [] delNode;
delNode = NULL;
}
}
if(m_HouseMap[i]->m_TM.size()==0)
{
int iNode = m_HouseMap[i]->m_IndexX * 11 + m_HouseMap[i]->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
return;
}
if(m_HouseMap[i]) {
delete m_HouseMap[i];
m_HouseMap[i] = NULL;
}
m_HouseMap.erase(m_HouseMap.begin()+i);
m_HouseMapTable[iNode] = NULL;
}
return;
}
}
}
void CMapStorage::AddHeightMap(float fAddx, float fAddy, float fAddz, float *fHeightData)
{
if(fHeightData==NULL)
return;
int indexx=(int)(fAddx/SECTORSIZE);
int indexy=(int)(fAddz/SECTORSIZE);
for(int i=0;i<(int)m_HeightMap.size();i++)
{
if( m_HeightMap[i]->m_IndexX == indexx &&
m_HeightMap[i]->m_IndexY == indexy)
{
memcpy(m_HeightMap[i]->m_pHeightData,fHeightData,sizeof(float)*SECTORSX*SECTORSY);
return;
}
}
CSectorHeightMap *AddHeightMap=new CSectorHeightMap();
AddHeightMap->m_IndexX=indexx;
AddHeightMap->m_IndexY=indexy;
if(m_LoadMode==0)
{
AddHeightMap->m_pHeightData=new float[SECTORSX*SECTORSY];
}
memcpy(AddHeightMap->m_pHeightData,fHeightData,sizeof(float)*SECTORSX*SECTORSY);
m_HeightMap.push_back(AddHeightMap);
}
void CMapStorage::AddWideMap(float fAddx, float fAddy, float fAddz, char *strWideMapName,char *strDetailMapName,char *strWideMapName1,char *strDetailMapName1,char *strWideMapName2,char *strDetailMapName2)
{
if(strcmp(strWideMapName,"")==0)
return;
int indexx=(int)(fAddx/SECTORSIZE);
int indexy=(int)(fAddz/SECTORSIZE);
for(int i=0;i<(int)m_WideMap.size();i++)
{
if( m_WideMap[i]->m_IndexX == indexx &&
m_WideMap[i]->m_IndexY == indexy)
{
strcpy(m_WideMap[i]->m_strWidemapName[0],strWideMapName);
strcpy(m_WideMap[i]->m_strWidemapName[1],strWideMapName1);
strcpy(m_WideMap[i]->m_strWidemapName[2],strWideMapName2);
strcpy(m_WideMap[i]->m_strDetailName[0],strDetailMapName);
strcpy(m_WideMap[i]->m_strDetailName[1],strDetailMapName1);
strcpy(m_WideMap[i]->m_strDetailName[2],strDetailMapName2);
return;
}
}
CSectorWideMap *AddWideMap=new CSectorWideMap();
AddWideMap->m_IndexX=indexx;
AddWideMap->m_IndexY=indexy;
strcpy(AddWideMap->m_strWidemapName[0],strWideMapName);
strcpy(AddWideMap->m_strWidemapName[1],strWideMapName1);
strcpy(AddWideMap->m_strWidemapName[2],strWideMapName2);
strcpy(AddWideMap->m_strDetailName[0],strDetailMapName);
strcpy(AddWideMap->m_strDetailName[1],strDetailMapName1);
strcpy(AddWideMap->m_strDetailName[2],strDetailMapName2);
m_WideMap.push_back(AddWideMap);
}
void CMapStorage::AddWaterMap(float fAddx, float fAddy, float fAddz,float fWaterHeight,float fWaterSizeX,float fWaterSizeY,float fWaterPosX,float fWaterPosY,color WaterColor,bool bWaterRelection)
{
int indexx=(int)(fAddx/SECTORSIZE);
int indexy=(int)(fAddz/SECTORSIZE);
for(int i=0;i<(int)m_WaterMap.size();i++)
{
if( m_WaterMap[i]->m_IndexX == indexx &&
m_WaterMap[i]->m_IndexY == indexy)
{
m_WaterMap[i]->m_fWaterHeight=fWaterHeight;
m_WaterMap[i]->m_fWaterPosX=fWaterPosX;
m_WaterMap[i]->m_fWaterPosY=fWaterPosY;
m_WaterMap[i]->m_fWaterSizeX=fWaterSizeX;
m_WaterMap[i]->m_fWaterSizeY=fWaterSizeY;
m_WaterMap[i]->m_bWaterRelection=bWaterRelection;
m_WaterMap[i]->m_WaterColor=WaterColor;
return;
}
}
CSectorWaterMap *AddWaterMap=new CSectorWaterMap();
AddWaterMap->m_IndexX=indexx;
AddWaterMap->m_IndexY=indexy;
AddWaterMap->m_fWaterHeight=fWaterHeight;
AddWaterMap->m_fWaterPosX=fWaterPosX;
AddWaterMap->m_fWaterPosY=fWaterPosY;
AddWaterMap->m_fWaterSizeX=fWaterSizeX;
AddWaterMap->m_fWaterSizeY=fWaterSizeY;
AddWaterMap->m_bWaterRelection=bWaterRelection;
AddWaterMap->m_WaterColor=WaterColor;
m_WaterMap.push_back(AddWaterMap);
}
CSectorWaterMap* CMapStorage::FindWaterMap(float fFindx, float fFindy)
{
int indexx=(int)(fFindx/SECTORSIZE);
int indexy=(int)(fFindy/SECTORSIZE);
int iNode = indexx * 11 + indexy;
if(iNode <0 || iNode >= MAXSECTOR)
return NULL;
if(m_WaterMapTable[iNode])
{
return m_WaterMapTable[iNode];
}
/*
for(int cStorage=0;cStorage<m_WaterMap.num;cStorage++)
{
if( m_WaterMap[cStorage]->m_IndexX==indexx &&
m_WaterMap[cStorage]->m_IndexY==indexy)
{
return m_WaterMap[cStorage];
}
}*/
return NULL;
}
void CMapStorage::AddFallMap(float fAddx, float fAddy,float fAddz,float fFallPosX,float fFallPosY,float fFallRot,std::vector<float> &FallHeight,std::vector<float> &FallLeft,std::vector<float> &FallRight,std::vector<float> &FallAddX,std::vector<color> &WaterFallColor)
{
int indexx=(int)(fAddx/SECTORSIZE);
int indexy=(int)(fAddz/SECTORSIZE);
for(int i=0;i<(int)m_FallMap.size();i++)
{
if( m_FallMap[i]->m_IndexX == indexx &&
m_FallMap[i]->m_IndexY == indexy)
{
m_FallMap[i]->m_fFallPosX=fFallPosX;
m_FallMap[i]->m_fFallPosY=fFallPosY;
m_FallMap[i]->m_fFallRot=fFallRot;
m_FallMap[i]->m_FallHeightList.clear();
m_FallMap[i]->m_FallLeftList.clear();
m_FallMap[i]->m_FallRightList.clear();
m_FallMap[i]->m_FallAddXList.clear();
for(int cElement=0;cElement<(int)FallHeight.size();cElement++)
{
m_FallMap[i]->m_FallHeightList.push_back(FallHeight[cElement]);
m_FallMap[i]->m_FallLeftList.push_back(FallLeft[cElement]);
m_FallMap[i]->m_FallRightList.push_back(FallRight[cElement]);
m_FallMap[i]->m_FallAddXList.push_back(FallAddX[cElement]);
m_FallMap[i]->m_FallColor.push_back(WaterFallColor[cElement]);
}
}
}
CSectorFallMap *AddFallMap=new CSectorFallMap();
AddFallMap->m_IndexX=indexx;
AddFallMap->m_IndexY=indexy;
AddFallMap->m_fFallPosX=fFallPosX;
AddFallMap->m_fFallPosY=fFallPosY;
AddFallMap->m_fFallRot=fFallRot;
for(int i=0;i<(int)FallHeight.size();i++)
{
AddFallMap->m_FallHeightList.push_back(FallHeight[i]);
AddFallMap->m_FallLeftList.push_back(FallLeft[i]);
AddFallMap->m_FallRightList.push_back(FallRight[i]);
AddFallMap->m_FallAddXList.push_back(FallAddX[i]);
AddFallMap->m_FallColor.push_back(WaterFallColor[i]);
}
m_FallMap.push_back(AddFallMap);
}
CSectorFallMap* CMapStorage::FindFallMap(float fFindx, float fFindy)
{
int indexx=(int)(fFindx/SECTORSIZE);
int indexy=(int)(fFindy/SECTORSIZE);
int iNode = indexx * 11 + indexy;
if(iNode <0 || iNode >= MAXSECTOR)
return NULL;
if(m_FallMapTable[iNode])
{
return m_FallMapTable[iNode];
}
/*
for(int cStorage=0;cStorage<m_FallMap.num;cStorage++)
{
if( m_FallMap[cStorage]->m_IndexX==indexx &&
m_FallMap[cStorage]->m_IndexY==indexy)
{
return m_FallMap[cStorage];
}
}*/
return NULL;
}
void CMapStorage::AddInHouseObject(char *strOutName, char *strMedName, char *strInName,char *strBspName, char *strObjectName, matrix matTM,bool isAlpha,bool isLight)
{
strOutName=strlwr(strOutName);
strMedName=strlwr(strMedName);
strInName=strlwr(strInName);
strBspName=strlwr(strBspName);
for(int cHouse=0;cHouse<(int)m_InHouseMap.size();cHouse++)
{
if( strcmp(m_InHouseMap[cHouse]->m_strOutName,strOutName)==0 &&
strcmp(m_InHouseMap[cHouse]->m_strMedName,strMedName)==0 &&
strcmp(m_InHouseMap[cHouse]->m_strInName,strInName)==0 &&
strcmp(m_InHouseMap[cHouse]->m_strBspName,strBspName)==0 )
{
char *pStrObjectName=new char[MAX_NAMEBUFFER];
strcpy(pStrObjectName,strObjectName);
m_InHouseMap[cHouse]->m_strObjectNameList.push_back(pStrObjectName);
m_InHouseMap[cHouse]->m_matObjectList.push_back(matTM);
m_InHouseMap[cHouse]->m_isAlpha.push_back(isAlpha);
m_InHouseMap[cHouse]->m_isLight.push_back(isLight);
m_InHouseMap[cHouse]->m_ObjectID.push_back(m_TotalInHouseObjectSceneCount++);
return;
}
}
CInHouseObjectMap *AddInHouseMap=new CInHouseObjectMap();
char *pStrObjectName=new char[MAX_NAMEBUFFER];
strcpy(pStrObjectName,strObjectName);
AddInHouseMap->m_strObjectNameList.push_back(pStrObjectName);
AddInHouseMap->m_matObjectList.push_back(matTM);
AddInHouseMap->m_isAlpha.push_back(isAlpha);
AddInHouseMap->m_isLight.push_back(isLight);
strcpy(AddInHouseMap->m_strOutName,strOutName);
strcpy(AddInHouseMap->m_strMedName,strMedName);
strcpy(AddInHouseMap->m_strInName,strInName);
strcpy(AddInHouseMap->m_strBspName,strBspName);
AddInHouseMap->m_ObjectID.push_back(m_TotalInHouseObjectSceneCount++);
m_InHouseMap.push_back(AddInHouseMap);
}
void CMapStorage::AddInHouseLight(char *strOutName, char *strMedName, char *strInName, char *strBspName, char *strLightName, matrix matTM,float fLightRange,color LightColor)
{
strOutName=strlwr(strOutName);
strMedName=strlwr(strMedName);
strInName=strlwr(strInName);
strBspName=strlwr(strBspName);
for(int cHouse=0;cHouse<(int)m_InHouseMap.size();cHouse++)
{
if( strcmp(m_InHouseMap[cHouse]->m_strOutName,strOutName)==0 &&
strcmp(m_InHouseMap[cHouse]->m_strMedName,strMedName)==0 &&
strcmp(m_InHouseMap[cHouse]->m_strInName,strInName)==0 &&
strcmp(m_InHouseMap[cHouse]->m_strBspName,strBspName)==0 )
{
char *pStrLightName=new char[MAX_NAMEBUFFER];
strcpy(pStrLightName,strLightName);
m_InHouseMap[cHouse]->m_strLightNameList.push_back(pStrLightName);
m_InHouseMap[cHouse]->m_matLightList.push_back(matTM);
m_InHouseMap[cHouse]->m_fLightRange.push_back(fLightRange);
m_InHouseMap[cHouse]->m_LightColor.push_back(LightColor);
m_InHouseMap[cHouse]->m_LightID.push_back(m_TotalInHouseLightSceneCount++);
return;
}
}
CInHouseObjectMap *AddInHouseMap=new CInHouseObjectMap();
char *pStrObjectName=new char[MAX_NAMEBUFFER];
strcpy(pStrObjectName,strLightName);
AddInHouseMap->m_strLightNameList.push_back(pStrObjectName);
AddInHouseMap->m_matLightList.push_back(matTM);
AddInHouseMap->m_fLightRange.push_back(fLightRange);
AddInHouseMap->m_LightColor.push_back(LightColor);
strcpy(AddInHouseMap->m_strOutName,strOutName);
strcpy(AddInHouseMap->m_strMedName,strMedName);
strcpy(AddInHouseMap->m_strInName,strInName);
strcpy(AddInHouseMap->m_strBspName,strBspName);
AddInHouseMap->m_LightID.push_back(m_TotalInHouseLightSceneCount++);
m_InHouseMap.push_back(AddInHouseMap);
}
CInHouseObjectMap* CMapStorage::FindInHouseMap(char *strOutName, char *strMedName, char *strInName,char *strBspName)
{
strOutName=strlwr(strOutName);
strMedName=strlwr(strMedName);
strInName=strlwr(strInName);
strBspName=strlwr(strBspName);
for(int i=0;i<(int)m_InHouseMap.size();i++)
{
if( strcmp(m_InHouseMap[i]->m_strOutName,strOutName)==0 &&
strcmp(m_InHouseMap[i]->m_strMedName,strMedName)==0 &&
strcmp(m_InHouseMap[i]->m_strInName,strInName)==0 &&
strcmp(m_InHouseMap[i]->m_strBspName,strBspName)==0 )
{
return m_InHouseMap[i];
}
}
return NULL;
}
void CMapStorage::DeleteAllData()
{
int i;
for(i=0;i<(int)m_HouseMap.size();i++)
{
if ( m_HouseMap[i] )
{
delete m_HouseMap[i];
m_HouseMap[i] = NULL;
}
}
m_HouseMap.clear();
for(i=0;i<(int)m_HeightMap.size();i++)
{
if(m_HeightMap[i]) {
delete m_HeightMap[i];
m_HeightMap[i] = NULL;
}
}
m_HeightMap.clear();
for(i=0;i<(int)m_WideMap.size();i++)
{
if(m_WideMap[i]) {
delete m_WideMap[i];
m_WideMap[i] = NULL;
}
}
m_WideMap.clear();
for(i=0;i<(int)m_FallMap.size();i++)
{
if(m_FallMap[i]) {
delete m_FallMap[i];
m_FallMap[i] = NULL;
}
}
m_FallMap.clear();
for(i=0;i<(int)m_InHouseMap.size();i++)
{
if(m_InHouseMap[i]) {
delete m_InHouseMap[i];
m_InHouseMap[i] = NULL;
}
}
m_InHouseMap.clear();
for(i=0;i<(int)m_PlantMap.size();i++)
{
if(m_PlantMap[i]) {
delete m_PlantMap[i];
m_PlantMap[i] = NULL;
}
}
m_PlantMap.clear();
for(i=0;i<(int)m_WaterMap.size();i++)
{
if(m_WaterMap[i]) {
delete m_WaterMap[i];
m_WaterMap[i] = NULL;
}
}
m_WaterMap.clear();
for(i=0;i<(int)m_MeshMap.size();i++)
{
if(m_MeshMap[i]) {
delete m_MeshMap[i];
m_MeshMap[i] = NULL;
}
}
m_MeshMap.clear();
for(i=0;i<(int)m_EffectMap.size();i++)
{
if(m_EffectMap[i]) {
delete m_EffectMap[i];
m_EffectMap[i] = NULL;
}
}
m_EffectMap.clear();
}
void CMapStorage::DelInHouseObject(char *strOutName, char *strMedName, char *strInName,long ObjectID)
{
for(int cHouse=0;cHouse<(int)m_InHouseMap.size();cHouse++)
{
if( strcmp(m_InHouseMap[cHouse]->m_strOutName,strOutName)==0 &&
strcmp(m_InHouseMap[cHouse]->m_strMedName,strMedName)==0 &&
strcmp(m_InHouseMap[cHouse]->m_strInName,strInName)==0)
{
std::vector<int> vecDel;
for(int cObject=0;cObject<(int)m_InHouseMap[cHouse]->m_strObjectNameList.size();cObject++)
{
// edith erase <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
if(m_InHouseMap[cHouse]->m_ObjectID[cObject]==ObjectID)
{
vecDel.insert(vecDel.begin(), cObject);
}
}
for(int a = 0; a < (int)vecDel.size(); a++)
{
int k = vecDel[a];
delete m_InHouseMap[cHouse]->m_strObjectNameList[k];
m_InHouseMap[cHouse]->m_strObjectNameList.erase(m_InHouseMap[cHouse]->m_strObjectNameList.begin()+k);
m_InHouseMap[cHouse]->m_ObjectID.erase(m_InHouseMap[cHouse]->m_ObjectID.begin()+k);
m_InHouseMap[cHouse]->m_matObjectList.erase(m_InHouseMap[cHouse]->m_matObjectList.begin()+k);
m_InHouseMap[cHouse]->m_isAlpha.erase(m_InHouseMap[cHouse]->m_isAlpha.begin()+k);
m_InHouseMap[cHouse]->m_isLight.erase(m_InHouseMap[cHouse]->m_isLight.begin()+k);
}
}
}
}
void CMapStorage::DelInHouseLight(char *strOutName, char *strMedName, char *strInName,long LightID)
{
for(int cHouse=0;cHouse<(int)m_InHouseMap.size();cHouse++)
{
if( strcmp(m_InHouseMap[cHouse]->m_strOutName,strOutName)==0 &&
strcmp(m_InHouseMap[cHouse]->m_strMedName,strMedName)==0 &&
strcmp(m_InHouseMap[cHouse]->m_strInName,strInName)==0)
{
std::vector<int> vecDel;
for(int cLight=0;cLight<(int)m_InHouseMap[cHouse]->m_strLightNameList.size();cLight++)
{
// edith erase <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
if(m_InHouseMap[cHouse]->m_LightID[cLight]==LightID)
{
vecDel.insert(vecDel.begin(), cLight);
}
}
for(int a = 0; a < (int)vecDel.size(); a++)
{
int k = vecDel[a];
delete m_InHouseMap[cHouse]->m_strLightNameList[k];
m_InHouseMap[cHouse]->m_LightID.erase(m_InHouseMap[cHouse]->m_LightID.begin()+k);
m_InHouseMap[cHouse]->m_strLightNameList.erase(m_InHouseMap[cHouse]->m_strLightNameList.begin()+k);
m_InHouseMap[cHouse]->m_matLightList.erase(m_InHouseMap[cHouse]->m_matLightList.begin()+k);
m_InHouseMap[cHouse]->m_fLightRange.erase(m_InHouseMap[cHouse]->m_fLightRange.begin()+k);
m_InHouseMap[cHouse]->m_LightColor.erase(m_InHouseMap[cHouse]->m_LightColor.begin()+k);
}
return;
}
}
}
void CMapStorage::AddPlantMap(float fAddx, float fAddy, float fAddz, unsigned char PlantKind)
{
int indexx=(int)(fAddx/SECTORSIZE);
int indexy=(int)(fAddz/SECTORSIZE);
for(int cPlant=0;cPlant<(int)m_PlantMap.size();cPlant++)
{
if( m_PlantMap[cPlant]->m_IndexX == indexx &&
m_PlantMap[cPlant]->m_IndexY == indexy)
{
int ix=(fAddx-(indexx*SECTORSIZE))/LINTERVAL;
int iz=(fAddz-(indexy*SECTORSIZE))/LINTERVAL;
bool isAlready=false;
for(int cSubPlant=0;cSubPlant<(int)m_PlantMap[cPlant]->m_PlantKind.size();cSubPlant++)
{
if( m_PlantMap[cPlant]->m_PlantPosX[cSubPlant]==ix &&
m_PlantMap[cPlant]->m_PlantPosZ[cSubPlant]==iz)
{
m_PlantMap[cPlant]->m_PlantPosX[cSubPlant]=ix;
m_PlantMap[cPlant]->m_PlantPosZ[cSubPlant]=iz;
m_PlantMap[cPlant]->m_PlantKind[cSubPlant]=PlantKind;
isAlready=true;
break;
}
}
if(isAlready==false)
{
m_PlantMap[cPlant]->m_PlantPosX.push_back(ix);
m_PlantMap[cPlant]->m_PlantPosZ.push_back(iz);
m_PlantMap[cPlant]->m_PlantKind.push_back(PlantKind);
}
//m_PlantMap[cPlant]->m_vecPlantPos.push_back(vector3(fAddx-(indexx*SECTORSIZE),fAddy,fAddz-(indexy*SECTORSIZE)));
return;
}
}
CSectorPlantMap *AddPlantMap=new CSectorPlantMap();
AddPlantMap->m_IndexX=indexx;
AddPlantMap->m_IndexY=indexy;
int ix=(fAddx-(indexx*SECTORSIZE))/LINTERVAL;
int iz=(fAddz-(indexy*SECTORSIZE))/LINTERVAL;
AddPlantMap->m_PlantKind.push_back(PlantKind);
//AddPlantMap->m_vecPlantPos.push_back(vector3(fAddx-(indexx*SECTORSIZE),fAddy,fAddz-(indexy*SECTORSIZE)));
AddPlantMap->m_PlantPosX.push_back(ix);
AddPlantMap->m_PlantPosZ.push_back(iz);
m_PlantMap.push_back(AddPlantMap);
}
void CMapStorage::DelPlantMap(float fDelx, float fDelY, float fDelz)
{
int indexx=(int)(fDelx/SECTORSIZE);
int indexy=(int)(fDelz/SECTORSIZE);
int Findx,Findz,Delx,Delz;
for(int cPlant=0;cPlant<(int)m_PlantMap.size();cPlant++)
{
std::vector<int> vecDel;
if( m_PlantMap[cPlant]->m_IndexX == indexx &&
m_PlantMap[cPlant]->m_IndexY == indexy)
{
for(int cInPlant=0;cInPlant<(int)m_PlantMap[cPlant]->m_PlantKind.size();cInPlant++)
{
// edith erase <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
Delx=m_PlantMap[cPlant]->m_PlantPosX[cInPlant];
Delz=m_PlantMap[cPlant]->m_PlantPosZ[cInPlant];
Findx=(int)( (fDelx-(indexx*SECTORSIZE)) /LINTERVAL);
Findz=(int)( (fDelz-(indexy*SECTORSIZE)) /LINTERVAL);
if(Delx==Findx && Delz==Findz)
{
vecDel.insert(vecDel.begin(), cInPlant);
}
}
for(int a=0; a < (int)vecDel.size(); a++)
{
int k = vecDel[a];
m_PlantMap[cPlant]->m_PlantKind.erase(m_PlantMap[cPlant]->m_PlantKind.begin()+k);
m_PlantMap[cPlant]->m_PlantPosX.erase(m_PlantMap[cPlant]->m_PlantPosX.begin()+k);
m_PlantMap[cPlant]->m_PlantPosZ.erase(m_PlantMap[cPlant]->m_PlantPosZ.begin()+k);
//m_PlantMap[cPlant]->m_vecPlantPos.DelIndex(cInPlant);
}
return;
}
}
}
void CMapStorage::AddMeshMap(float fAddx, float fAddy, float fAddz,char *strObjectName,matrix matTM, bool isAlpha, bool isLight)
{
int indexx=(int)(fAddx/SECTORSIZE);
int indexy=(int)(fAddz/SECTORSIZE);
for(int cObject=0;cObject<(int)m_MeshMap.size();cObject++)
{
if( m_MeshMap[cObject]->m_IndexX == indexx &&
m_MeshMap[cObject]->m_IndexY == indexy)
{
char *AddObjectName=new char[MAX_NAMEBUFFER];
strcpy(AddObjectName,strObjectName);
m_MeshMap[cObject]->m_strObjectName.push_back(AddObjectName);
m_MeshMap[cObject]->m_TM.push_back(matTM);
m_MeshMap[cObject]->m_isAlpha.push_back(isAlpha);
m_MeshMap[cObject]->m_isLight.push_back(isLight);
m_MeshMap[cObject]->m_ObjectSceneID.push_back(m_TotalObjectSceneCount++);
return;
}
}
CSectorMeshMap *AddMeshMap=new CSectorMeshMap();
AddMeshMap->m_IndexX=indexx;
AddMeshMap->m_IndexY=indexy;
char *AddObjectName=new char[MAX_NAMEBUFFER];
strcpy(AddObjectName,strObjectName);
AddMeshMap->m_strObjectName.push_back(AddObjectName);
AddMeshMap->m_TM.push_back(matTM);
AddMeshMap->m_isAlpha.push_back(isAlpha);
AddMeshMap->m_isLight.push_back(isLight);
AddMeshMap->m_ObjectSceneID.push_back(m_TotalObjectSceneCount++);
m_MeshMap.push_back(AddMeshMap);
}
void CMapStorage::DelMeshMap(float fDelx, float fDely, float fDelz, long ObjectSceneID)
{
int indexx=(int)(fDelx/SECTORSIZE);
int indexy=(int)(fDelz/SECTORSIZE);
for(int i=0;i<(int)m_MeshMap.size();i++)
{
if( m_MeshMap[i]->m_IndexX==indexx &&
m_MeshMap[i]->m_IndexY==indexy)
{
std::vector<int> vecDel;
for(int cObject=0;cObject<(int)m_MeshMap[i]->m_TM.size();cObject++)
{
// edith erase <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
if(ObjectSceneID==m_MeshMap[i]->m_ObjectSceneID[cObject])
{
vecDel.insert(vecDel.begin(), cObject);
}
}
for(int a = 0; a < (int)vecDel.size(); a++)
{
int k = vecDel[a];
m_MeshMap[i]->m_TM.erase(m_MeshMap[i]->m_TM.begin()+k);
m_MeshMap[i]->m_isAlpha.erase(m_MeshMap[i]->m_isAlpha.begin()+k);
m_MeshMap[i]->m_isLight.erase(m_MeshMap[i]->m_isLight.begin()+k);
m_MeshMap[i]->m_ObjectSceneID.erase(m_MeshMap[i]->m_ObjectSceneID.begin()+k);
char *delNode;
delNode=m_MeshMap[i]->m_strObjectName[k];
delete [] delNode;
m_MeshMap[i]->m_strObjectName.erase(m_MeshMap[i]->m_strObjectName.begin()+k);
}
if( m_MeshMap[i]->m_TM.size()==0)
{
delete m_MeshMap[i];
m_MeshMap.erase(m_MeshMap.begin()+i);
}
return;
}
}
}
void CMapStorage::SaveSector(char *strFilename,long SectorX,long SectorY)
{
FILE *fp=fopen(strFilename,"wb");
if(fp==NULL)
return;
char strWrite[MAX_NAMEBUFFER];
sprintf(strWrite,"ZallA-3D Sector Scene Data File Build#1");
fwrite(strWrite,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(&m_TotalHouseSceneCount,sizeof(long),1,fp);
fwrite(&m_TotalInHouseLightSceneCount,sizeof(long),1,fp);
fwrite(&m_TotalInHouseObjectSceneCount,sizeof(long),1,fp);
fwrite(&m_TotalObjectSceneCount,sizeof(long),1,fp);
bool HaveHeightMap=false;
for(int cHeightData=0;cHeightData<(int)m_HeightMap.size();cHeightData++)
{
if( m_HeightMap[cHeightData]->m_IndexX==SectorX &&
m_HeightMap[cHeightData]->m_IndexY==SectorY)
{
HaveHeightMap=true;
fwrite(&HaveHeightMap,sizeof(bool),1,fp);
fwrite(m_HeightMap[cHeightData]->m_pHeightData,sizeof(float)*SECTORSX*SECTORSY,1,fp);
break;
}
}
if(HaveHeightMap==false)
{
fwrite(&HaveHeightMap,sizeof(bool),1,fp);
}
bool HaveWaterMap=false;
for(int cWaterData=0;cWaterData<(int)m_WaterMap.size();cWaterData++)
{
if( m_WaterMap[cWaterData]->m_IndexX==SectorX &&
m_WaterMap[cWaterData]->m_IndexY==SectorY)
{
HaveWaterMap=true;
fwrite(&HaveWaterMap,sizeof(bool),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_fWaterPosX,sizeof(float),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_fWaterPosY,sizeof(float),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_fWaterSizeX,sizeof(float),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_fWaterSizeY,sizeof(float),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_fWaterHeight,sizeof(float),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_bWaterRelection,sizeof(bool),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_WaterColor,sizeof(color),1,fp);
break;
}
}
if(HaveWaterMap==false)
{
fwrite(&HaveWaterMap,sizeof(bool),1,fp);
}
bool HaveWideMap=false;
for(int cWideData=0;cWideData<(int)m_WideMap.size();cWideData++)
{
if( m_WideMap[cWideData]->m_IndexX==SectorX &&
m_WideMap[cWideData]->m_IndexY==SectorY)
{
HaveWideMap=true;
fwrite(&HaveWideMap,sizeof(bool),1,fp);
fwrite(m_WideMap[cWideData]->m_strWidemapName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
break;
}
}
if(HaveWideMap==false)
{
fwrite(&HaveWideMap,sizeof(bool),1,fp);
}
bool HaveFallMap=false;
for(int cFallData=0;cFallData<(int)m_FallMap.size();cFallData++)
{
if( m_FallMap[cFallData]->m_IndexX==SectorX &&
m_FallMap[cFallData]->m_IndexY==SectorY)
{
HaveFallMap=true;
fwrite(&HaveFallMap,sizeof(bool),1,fp);
fwrite(&m_FallMap[cFallData]->m_fFallPosX,sizeof(float),1,fp);
fwrite(&m_FallMap[cFallData]->m_fFallPosY,sizeof(float),1,fp);
fwrite(&m_FallMap[cFallData]->m_fFallRot,sizeof(float),1,fp);
int iSize = m_FallMap[cFallData]->m_FallHeightList.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cFallList=0;cFallList<iSize;cFallList++)
{
fwrite(&m_FallMap[cFallData]->m_FallHeightList[cFallList],sizeof(float),1,fp);
fwrite(&m_FallMap[cFallData]->m_FallLeftList[cFallList],sizeof(float),1,fp);
fwrite(&m_FallMap[cFallData]->m_FallRightList[cFallList],sizeof(float),1,fp);
fwrite(&m_FallMap[cFallData]->m_FallAddXList[cFallList],sizeof(float),1,fp);
fwrite(&m_FallMap[cFallData]->m_FallColor[cFallList],sizeof(color),1,fp);
}
break;
}
}
if(HaveFallMap==false)
{
fwrite(&HaveFallMap,sizeof(bool),1,fp);
}
bool HaveHouseMap=false;
for(int cHouseData=0;cHouseData<(int)m_HouseMap.size();cHouseData++)
{
if( m_HouseMap[cHouseData]->m_IndexX==SectorX &&
m_HouseMap[cHouseData]->m_IndexY==SectorY)
{
HaveHouseMap=true;
fwrite(&HaveHouseMap,sizeof(bool),1,fp);
int iSize = m_HouseMap[cHouseData]->m_TM.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cHouseList=0;cHouseList<iSize;cHouseList++)
{
matrix matTM=m_HouseMap[cHouseData]->m_TM[cHouseList];
matTM._41-=SectorX*SECTORSIZE;
matTM._43-=SectorY*SECTORSIZE;
//fwrite(&m_HouseMap[cHouseData]->m_TM[cHouseList],sizeof(matrix),1,fp);
fwrite(&matTM,sizeof(matrix),1,fp);
fwrite(&m_HouseMap[cHouseData]->m_HouseSceneID[cHouseList],sizeof(int),1,fp);
fwrite(m_HouseMap[cHouseData]->m_strOutName[cHouseList],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_HouseMap[cHouseData]->m_strMedName[cHouseList],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_HouseMap[cHouseData]->m_strInName[cHouseList],sizeof(char)*MAX_NAMEBUFFER,1,fp);
}
break;
}
}
if(HaveHouseMap==false)
{
fwrite(&HaveHouseMap,sizeof(bool),1,fp);
}
bool HavePlantMap=false;
for(int cPlantData=0;cPlantData<(int)m_PlantMap.size();cPlantData++)
{
if( m_PlantMap[cPlantData]->m_IndexX==SectorX &&
m_PlantMap[cPlantData]->m_IndexY==SectorY)
{
HavePlantMap=true;
fwrite(&HavePlantMap,sizeof(bool),1,fp);
int iSize = m_PlantMap[cPlantData]->m_PlantKind.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cSubPlant=0;cSubPlant<iSize;cSubPlant++)
{
/*
fwrite(&m_PlantMap[cPlantData]->m_PlantKind[cSubPlant],sizeof(unsigned char),1,fp);
fwrite(&m_PlantMap[cPlantData]->m_PlantPosX[cSubPlant],sizeof(unsigned char),1,fp);
fwrite(&m_PlantMap[cPlantData]->m_PlantPosZ[cSubPlant],sizeof(unsigned char),1,fp);
*/
fwrite(&m_PlantMap[cPlantData]->m_PlantKind[cSubPlant],sizeof(unsigned char),1,fp);
//fwrite(&m_PlantMap[cPlantData]->m_vecPlantPos[cSubPlant],sizeof(vector3),1,fp);
fwrite(&m_PlantMap[cPlantData]->m_PlantPosX[cSubPlant],sizeof(unsigned char),1,fp);
fwrite(&m_PlantMap[cPlantData]->m_PlantPosZ[cSubPlant],sizeof(unsigned char),1,fp);
//fwrite(&m_PlantMap[cPlantData]->m_vecPlantPos[cSubPlant],sizeof(vector3),1,fp);
}
break;
}
}
if(HavePlantMap==false)
{
fwrite(&HavePlantMap,sizeof(bool),1,fp);
}
bool HaveMeshMap=false;
for(int cMeshData=0;cMeshData<(int)m_MeshMap.size();cMeshData++)
{
if( m_MeshMap[cMeshData]->m_IndexX==SectorX&&
m_MeshMap[cMeshData]->m_IndexY==SectorY)
{
HaveMeshMap=true;
fwrite(&HaveMeshMap,sizeof(bool),1,fp);
int iSize = m_MeshMap[cMeshData]->m_ObjectSceneID.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cObject=0;cObject<iSize;cObject++)
{
fwrite(&m_MeshMap[cMeshData]->m_ObjectSceneID[cObject],sizeof(long),1,fp);
fwrite(m_MeshMap[cMeshData]->m_strObjectName[cObject],sizeof(char)*MAX_NAMEBUFFER,1,fp);
matrix matTM=m_MeshMap[cMeshData]->m_TM[cObject];
matTM._41-=SectorX*SECTORSIZE;
matTM._43-=SectorY*SECTORSIZE;
fwrite(&matTM,sizeof(matrix),1,fp);
//fwrite(&m_MeshMap[cMeshData]->m_TM[cObject],sizeof(matrix),1,fp);
fwrite(&m_MeshMap[cMeshData]->m_isAlpha[cObject],sizeof(bool),1,fp);
fwrite(&m_MeshMap[cMeshData]->m_isLight[cObject],sizeof(bool),1,fp);
}
break;
}
}
if(HaveMeshMap==false)
{
fwrite(&HaveMeshMap,sizeof(bool),1,fp);
}
fclose(fp);
}
void CMapStorage::LoadSector(char *strFilename, long SectorX, long SectorY)
{
FILE *fp=fopen(strFilename,"rb");
if(fp==NULL)
return;
char strRead[MAX_NAMEBUFFER];
fread(strRead,sizeof(char)*MAX_NAMEBUFFER,1,fp);
int ReadJunk;
fread(&ReadJunk,sizeof(long),1,fp);
fread(&ReadJunk,sizeof(long),1,fp);
fread(&ReadJunk,sizeof(long),1,fp);
fread(&ReadJunk,sizeof(long),1,fp);
bool HaveHeightData=false;
fread(&HaveHeightData,sizeof(bool),1,fp);
if(HaveHeightData)
{
CSectorHeightMap *AddNode=new CSectorHeightMap();
AddNode->m_IndexX=SectorX;
AddNode->m_IndexY=SectorY;
fread(AddNode->m_pHeightData,sizeof(float)*SECTORSX*SECTORSY,1,fp);
AddHeightMap(SectorX*SECTORSIZE,0.0f,SectorY*SECTORSIZE,AddNode->m_pHeightData);
//m_HeightMap.push_back(AddNode);
delete AddNode;
}
else
{
std::vector<int> vecDel;
for(int cHeight=0;cHeight<(int)m_HeightMap.size();cHeight++)
{
if( m_HeightMap[cHeight]->m_IndexX==SectorX &&
m_HeightMap[cHeight]->m_IndexY==SectorY)
{
// edith erase <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
vecDel.insert(vecDel.begin(), cHeight);
}
}
for(int a = 0; a < (int)vecDel.size(); a++)
{
int k = vecDel[a];
m_HeightMap.erase(m_HeightMap.begin()+k);
}
}
bool HaveWaterData=false;
fread(&HaveWaterData,sizeof(bool),1,fp);
if(HaveWaterData)
{
CSectorWaterMap *AddNode=new CSectorWaterMap();
AddNode->m_IndexX=SectorX;
AddNode->m_IndexY=SectorY;
fread(&AddNode->m_fWaterPosX,sizeof(float),1,fp);
fread(&AddNode->m_fWaterPosY,sizeof(float),1,fp);
fread(&AddNode->m_fWaterSizeX,sizeof(float),1,fp);
fread(&AddNode->m_fWaterSizeY,sizeof(float),1,fp);
fread(&AddNode->m_fWaterHeight,sizeof(float),1,fp);
fread(&AddNode->m_bWaterRelection,sizeof(bool),1,fp);
fread(&AddNode->m_WaterColor,sizeof(color),1,fp);
AddWaterMap(SectorX*SECTORSIZE,0.0f,SectorY*SECTORSIZE,AddNode->m_fWaterHeight,AddNode->m_fWaterSizeX,
AddNode->m_fWaterSizeY,AddNode->m_fWaterPosX,AddNode->m_fWaterPosY,AddNode->m_WaterColor,AddNode->m_bWaterRelection);
delete AddNode;
//m_WaterMap.push_back(AddNode);
}
else
{
std::vector<int> vecDel;
for(int cWater=0;cWater<(int)m_WaterMap.size();cWater++)
{
if( m_WaterMap[cWater]->m_IndexX==SectorX &&
m_WaterMap[cWater]->m_IndexY==SectorY)
{
// edith erase <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
vecDel.insert(vecDel.begin(), cWater);
}
}
for(int a=0; a<(int)vecDel.size(); a++)
{
int k = vecDel[a];
m_WaterMap.erase(m_WaterMap.begin()+k);
}
}
bool HaveWideData=false;
fread(&HaveWideData,sizeof(bool),1,fp);
if(HaveWideData)
{
CSectorWideMap *AddNode=new CSectorWideMap();
AddNode->m_IndexX=SectorX;
AddNode->m_IndexY=SectorY;
fread(AddNode->m_strWidemapName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddWideMap(SectorX*SECTORSIZE,0.0f,SectorY*SECTORSIZE,AddNode->m_strWidemapName[0],AddNode->m_strDetailName[0],AddNode->m_strWidemapName[1],AddNode->m_strDetailName[1],AddNode->m_strWidemapName[2],AddNode->m_strDetailName[2]);
delete AddNode;
//m_WideMap.push_back(AddNode);
}
else
{
std::vector<int> vecDel;
for(int cWide=0;cWide<(int)m_WideMap.size();cWide++)
{
if( m_WideMap[cWide]->m_IndexX==SectorX &&
m_WideMap[cWide]->m_IndexY==SectorY)
{
// edith erase <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
vecDel.insert(vecDel.begin(), cWide);
}
}
for(int a=0; a < (int)vecDel.size(); a++)
{
int k = vecDel[a];
m_WideMap.erase(m_WideMap.begin()+k);
}
}
bool HaveFallData=false;
fread(&HaveFallData,sizeof(bool),1,fp);
if(HaveFallData)
{
CSectorFallMap *AddNode=new CSectorFallMap();
AddNode->m_IndexX=SectorX;
AddNode->m_IndexY=SectorY;
fread(&AddNode->m_fFallPosX,sizeof(float),1,fp);
fread(&AddNode->m_fFallPosY,sizeof(float),1,fp);
fread(&AddNode->m_fFallRot,sizeof(float),1,fp);
int cSavedFallList;
fread(&cSavedFallList,sizeof(int),1,fp);
for(int cFallList=0;cFallList<cSavedFallList;cFallList++)
{
float ReadFallData;
color ReadFallColor;
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallHeightList.push_back(ReadFallData);
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallLeftList.push_back(ReadFallData);
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallRightList.push_back(ReadFallData);
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallAddXList.push_back(ReadFallData);
fread(&ReadFallColor,sizeof(color),1,fp);
AddNode->m_FallColor.push_back(ReadFallColor);
}
AddFallMap(SectorX*SECTORSIZE,0.0f,SectorY*SECTORSIZE,AddNode->m_fFallPosX,AddNode->m_fFallPosY,
AddNode->m_fFallRot,AddNode->m_FallHeightList,AddNode->m_FallLeftList,AddNode->m_FallRightList,
AddNode->m_FallAddXList,AddNode->m_FallColor);
delete AddNode;
//m_FallMap.push_back(AddNode);
}
else
{
std::vector<int> vecDel;
for(int cFall=0;cFall<(int)m_FallMap.size();cFall++)
{
if( m_FallMap[cFall]->m_IndexX==SectorX &&
m_FallMap[cFall]->m_IndexY==SectorY)
{
// edith erase <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
vecDel.insert(vecDel.begin(), cFall);
}
}
for(int a= 0; a < (int)vecDel.size(); a++)
{
int k = vecDel[a];
m_FallMap.erase(m_FallMap.begin()+k);
}
}
bool HaveHouseData=false;
fread(&HaveHouseData,sizeof(bool),1,fp);
if(HaveHouseData)
{
CSectorHouseMap *AddNode=new CSectorHouseMap();
AddNode->m_IndexX=SectorX;
AddNode->m_IndexY=SectorY;
int cSavedHouseList=0;
fread(&cSavedHouseList,sizeof(int),1,fp);
for(int cHouseList=0;cHouseList<cSavedHouseList;cHouseList++)
{
int ReadHouseID;
char *ReadHouseName;
matrix ReadHouseTM;
fread(&ReadHouseTM,sizeof(matrix),1,fp);
matrix matTM=ReadHouseTM;
matTM._41+=SectorX*SECTORSIZE;
matTM._43+=SectorY*SECTORSIZE;
//AddNode->m_TM.push_back(ReadHouseTM);
AddNode->m_TM.push_back(matTM);
fread(&ReadHouseID,sizeof(int),1,fp);
AddNode->m_HouseSceneID.push_back(m_TotalHouseSceneCount++);
ReadHouseName=new char[MAX_NAMEBUFFER];
fread(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strOutName.push_back(ReadHouseName);
ReadHouseName=new char[MAX_NAMEBUFFER];
fread(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strMedName.push_back(ReadHouseName);
ReadHouseName=new char[MAX_NAMEBUFFER];
fread(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strInName.push_back(ReadHouseName);
}
int cHouseMap=0;
for(;cHouseMap<(int)m_HouseMap.size();cHouseMap++)
{
if( m_HouseMap[cHouseMap]->m_IndexX==SectorX &&
m_HouseMap[cHouseMap]->m_IndexY==SectorY)
{
break;
}
}
if(cHouseMap==m_HouseMap.size())
m_HouseMap.push_back(AddNode);
else
{
// <20>̹<EFBFBD><CCB9>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD>..
m_HouseMap[cHouseMap]=AddNode;
}
}
else
{
std::vector<int> vecDel;
for(int cHouse=0;cHouse<(int)m_HouseMap.size();cHouse++)
{
if( m_HouseMap[cHouse]->m_IndexX==SectorX &&
m_HouseMap[cHouse]->m_IndexY==SectorY)
{
// edith erase <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
vecDel.insert(vecDel.begin(), cHouse);
}
}
for(int a= 0; a < (int)vecDel.size(); a++)
{
int k = vecDel[a];
m_HouseMap.erase(m_HouseMap.begin()+k);
}
}
bool HavePlantData=false;
fread(&HavePlantData,sizeof(bool),1,fp);
if(HavePlantData)
{
CSectorPlantMap *AddNode=new CSectorPlantMap();
AddNode->m_IndexX=SectorX;
AddNode->m_IndexY=SectorY;
int cSavedSubPlant;
int ReadKind;
vector3 ReadPos;
unsigned char ReadPosX,ReadPosZ;
fread(&cSavedSubPlant,sizeof(int),1,fp);
for(int cSubPlant=0;cSubPlant<cSavedSubPlant;cSubPlant++)
{
fread(&ReadKind,sizeof(unsigned char),1,fp);
//fread(&ReadPos,sizeof(vector3),1,fp);
fread(&ReadPosX,sizeof(unsigned char),1,fp);
fread(&ReadPosZ,sizeof(unsigned char),1,fp);
///*
AddNode->m_PlantKind.push_back(ReadKind);
AddNode->m_PlantPosX.push_back(ReadPosX);
AddNode->m_PlantPosZ.push_back(ReadPosZ);
//*/
//AddNode->m_vecPlantPos.push_back(ReadPos);
/*
fread(&ReadKind,sizeof(unsigned char),1,fp);
fread(&ReadPosX,sizeof(unsigned char),1,fp);
fread(&ReadPosZ,sizeof(unsigned char),1,fp);
//fread(&ReadPos,sizeof(vector3),1,fp);
bool isAlready=false;
for(int cNowPlant=0;cNowPlant<AddNode->m_PlantKind.num;cNowPlant++)
{
if( AddNode->m_PlantPosX[cNowPlant]==ReadPosX &&
AddNode->m_PlantPosZ[cNowPlant]==ReadPosZ)
{
AddNode->m_PlantKind[cNowPlant]=ReadKind;
AddNode->m_PlantPosX[cNowPlant]=ReadPosX;
AddNode->m_PlantPosZ[cNowPlant]=ReadPosZ;
isAlready=true;
}
}
if(isAlready==false)
{
AddNode->m_PlantKind.push_back(ReadKind);
AddNode->m_PlantPosX.push_back(ReadPosX);
AddNode->m_PlantPosZ.push_back(ReadPosZ);
}
*/
}
int cPlantMap=0;
for(;cPlantMap<(int)m_PlantMap.size();cPlantMap++)
{
if( m_PlantMap[cPlantMap]->m_IndexX==SectorX &&
m_PlantMap[cPlantMap]->m_IndexY==SectorY)
{
break;
}
}
if(cPlantMap==m_PlantMap.size())
m_PlantMap.push_back(AddNode);
else
m_PlantMap[cPlantMap]=AddNode;
}
else
{
std::vector<int> vecDel;
for(int cPlant=0;cPlant<(int)m_PlantMap.size();cPlant++)
{
if( m_PlantMap[cPlant]->m_IndexX==SectorX &&
m_PlantMap[cPlant]->m_IndexY==SectorY)
{
// edith erase <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
vecDel.insert(vecDel.begin(), cPlant);
}
}
for(int a= 0; a < (int)vecDel.size(); a++)
{
int k = vecDel[a];
m_PlantMap.erase(m_PlantMap.begin()+k);
}
}
bool HaveMeshData=false;
fread(&HaveMeshData,sizeof(bool),1,fp);
if(HaveMeshData)
{
CSectorMeshMap *AddNode=new CSectorMeshMap();
AddNode->m_IndexX=SectorX;
AddNode->m_IndexY=SectorY;
int cSavedObject=0;
fread(&cSavedObject,sizeof(int),1,fp);
int ReadObjectSceneID;
matrix ReadMatrixTM;
bool ReadAlpha,ReadLight;
for(int cObject=0;cObject<cSavedObject;cObject++)
{
fread(&ReadObjectSceneID,sizeof(long),1,fp);
char *ReadObjectName=new char[MAX_NAMEBUFFER];
fread(ReadObjectName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(&ReadMatrixTM,sizeof(matrix),1,fp);
fread(&ReadAlpha,sizeof(bool),1,fp);
fread(&ReadLight,sizeof(bool),1,fp);
AddNode->m_ObjectSceneID.push_back(m_TotalObjectSceneCount++);
AddNode->m_strObjectName.push_back(ReadObjectName);
matrix matTM=ReadMatrixTM;
matTM._41+=SectorX*SECTORSIZE;
matTM._43+=SectorY*SECTORSIZE;
AddNode->m_TM.push_back(matTM);
//AddNode->m_TM.push_back(ReadMatrixTM);
AddNode->m_isAlpha.push_back(ReadAlpha);
AddNode->m_isLight.push_back(ReadLight);
}
int cMeshMap=0;
for(;cMeshMap<(int)m_MeshMap.size();cMeshMap++)
{
if( m_MeshMap[cMeshMap]->m_IndexX==SectorX &&
m_MeshMap[cMeshMap]->m_IndexY==SectorY)
{
break;
//m_MeshMap.DelIndex(cMeshMap);
}
}
if(cMeshMap==m_MeshMap.size())
m_MeshMap.push_back(AddNode);
else
m_MeshMap[cMeshMap]=AddNode;
}
else
{
std::vector<int> vecDel;
for(int cMesh=0;cMesh<(int)m_MeshMap.size();cMesh++)
{
if( m_MeshMap[cMesh]->m_IndexX==SectorX &&
m_MeshMap[cMesh]->m_IndexY==SectorY)
{
// edith erase <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
vecDel.insert(vecDel.begin(), cMesh);
}
}
for(int a= 0; a<(int)vecDel.size();a++)
{
int k = vecDel[a];
m_MeshMap.erase(m_MeshMap.begin()+k);
}
}
fclose(fp);
}
void CMapStorage::OldLoad(char *strFilename)
{
FILE *fp=fopen(strFilename,"rb");
if(fp==NULL)
return;
DeleteAllData();
char strRead[MAX_NAMEBUFFER];
fread(strRead,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(&m_TotalHouseSceneCount,sizeof(long),1,fp);
fread(&m_TotalInHouseLightSceneCount,sizeof(long),1,fp);
fread(&m_TotalInHouseObjectSceneCount,sizeof(long),1,fp);
fread(&m_TotalObjectSceneCount,sizeof(long),1,fp);
// Height-Value Loading
int cSavedHeightData=0;
fread(&cSavedHeightData,sizeof(int),1,fp);
for(int cHeightData=0;cHeightData<cSavedHeightData;cHeightData++)
{
CSectorHeightMap *AddNode=new CSectorHeightMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
fread(AddNode->m_pHeightData,sizeof(float)*(SECTORSX-1)*(SECTORSY-1),1,fp);
//m_HeightMap.push_back(AddNode);
}
//Water loading
int cSavedWaterData=0;
fread(&cSavedWaterData,sizeof(int),1,fp);
for(int cWaterData=0;cWaterData<cSavedWaterData;cWaterData++)
{
CSectorWaterMap *AddNode=new CSectorWaterMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
fread(&AddNode->m_fWaterPosX,sizeof(float),1,fp);
fread(&AddNode->m_fWaterPosY,sizeof(float),1,fp);
fread(&AddNode->m_fWaterSizeX,sizeof(float),1,fp);
fread(&AddNode->m_fWaterSizeY,sizeof(float),1,fp);
fread(&AddNode->m_fWaterHeight,sizeof(float),1,fp);
fread(&AddNode->m_bWaterRelection,sizeof(bool),1,fp);
fread(&AddNode->m_WaterColor,sizeof(color),1,fp);
m_WaterMap.push_back(AddNode);
}
//Widemap loading
int cSavedWideData=0;
fread(&cSavedWideData,sizeof(int),1,fp);
for(int cWideData=0;cWideData<cSavedWideData;cWideData++)
{
CSectorWideMap *AddNode=new CSectorWideMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
fread(AddNode->m_strWidemapName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
m_WideMap.push_back(AddNode);
}
//Fallmap loading
int cSavedFallData=0;
fread(&cSavedFallData,sizeof(int),1,fp);
for(int cFallData=0;cFallData<cSavedFallData;cFallData++)
{
CSectorFallMap *AddNode=new CSectorFallMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
fread(&AddNode->m_fFallPosX,sizeof(float),1,fp);
fread(&AddNode->m_fFallPosY,sizeof(float),1,fp);
fread(&AddNode->m_fFallRot,sizeof(float),1,fp);
int cSavedFallList;
fread(&cSavedFallList,sizeof(int),1,fp);
for(int cFallList=0;cFallList<cSavedFallList;cFallList++)
{
float ReadFallData;
color ReadFallColor;
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallHeightList.push_back(ReadFallData);
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallLeftList.push_back(ReadFallData);
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallRightList.push_back(ReadFallData);
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallAddXList.push_back(ReadFallData);
fread(&ReadFallColor,sizeof(color),1,fp);
AddNode->m_FallColor.push_back(ReadFallColor);
}
m_FallMap.push_back(AddNode);
}
// HouseMap loading
int cSavedHouseData=0;
fread(&cSavedHouseData,sizeof(int),1,fp);
for(int cHouseData=0;cHouseData<cSavedHouseData;cHouseData++)
{
CSectorHouseMap *AddNode=new CSectorHouseMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
int cSavedHouseList=0;
fread(&cSavedHouseList,sizeof(int),1,fp);
for(int cHouseList=0;cHouseList<cSavedHouseList;cHouseList++)
{
int ReadHouseID;
char *ReadHouseName;
matrix ReadHouseTM;
fread(&ReadHouseTM,sizeof(matrix),1,fp);
AddNode->m_TM.push_back(ReadHouseTM);
fread(&ReadHouseID,sizeof(int),1,fp);
AddNode->m_HouseSceneID.push_back(ReadHouseID);
ReadHouseName=new char[MAX_NAMEBUFFER];
fread(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strOutName.push_back(ReadHouseName);
ReadHouseName=new char[MAX_NAMEBUFFER];
fread(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strMedName.push_back(ReadHouseName);
ReadHouseName=new char[MAX_NAMEBUFFER];
fread(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strInName.push_back(ReadHouseName);
}
m_HouseMap.push_back(AddNode);
}
int cSavedInHouseData=0;
fread(&cSavedInHouseData,sizeof(int),1,fp);
for(int cInHouseData=0;cInHouseData<cSavedInHouseData;cInHouseData++)
{
CInHouseObjectMap *AddNode=new CInHouseObjectMap();
fread(AddNode->m_strOutName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(AddNode->m_strMedName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(AddNode->m_strInName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
int cSavedObject,cSavedLight;
fread(&cSavedObject,sizeof(int),1,fp);
for(int cObject=0;cObject<cSavedObject;cObject++)
{
matrix ReadObjectTM;
bool ReadAlpha,ReadLight;
long ReadObjectID;
char *ReadObjectName=new char[MAX_NAMEBUFFER];
fread(ReadObjectName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strObjectNameList.push_back(ReadObjectName);
fread(&ReadObjectID,sizeof(long),1,fp);
AddNode->m_ObjectID.push_back(ReadObjectID);
fread(&ReadObjectTM,sizeof(matrix),1,fp);
AddNode->m_matObjectList.push_back(ReadObjectTM);
fread(&ReadAlpha,sizeof(bool),1,fp);
AddNode->m_isAlpha.push_back(ReadAlpha);
fread(&ReadLight,sizeof(bool),1,fp);
AddNode->m_isLight.push_back(ReadLight);
}
fread(&cSavedLight,sizeof(int),1,fp);
for(int cLight=0;cLight<cSavedLight;cLight++)
{
matrix ReadLightTM;
float ReadLightRange;
color ReadLightColor;
long ReadLightID;
char *ReadLightName=new char[MAX_NAMEBUFFER];
fread(ReadLightName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strLightNameList.push_back(ReadLightName);
fread(&ReadLightID,sizeof(long),1,fp);
AddNode->m_LightID.push_back(ReadLightID);
fread(&ReadLightTM,sizeof(matrix),1,fp);
AddNode->m_matLightList.push_back(ReadLightTM);
fread(&ReadLightRange,sizeof(float),1,fp);
AddNode->m_fLightRange.push_back(ReadLightRange);
fread(&ReadLightColor,sizeof(color),1,fp);
AddNode->m_LightColor.push_back(ReadLightColor);
}
/*
AddNode->m_strLightNameList.num=0;
AddNode->m_LightID.num=0;
AddNode->m_matLightList.num=0;
AddNode->m_fLightRange.num=0;
AddNode->m_LightColor.num=0;
m_TotalInHouseLightSceneCount=0;
*/
m_InHouseMap.push_back(AddNode);
}
// PlantMap loading
int cSavedPlantData=0;
fread(&cSavedPlantData,sizeof(int),1,fp);
for(int cPlantData=0;cPlantData<cSavedPlantData;cPlantData++)
{
CSectorPlantMap *AddNode=new CSectorPlantMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
int cSavedSubPlant;
int ReadKind;
vector3 ReadPos;
fread(&cSavedSubPlant,sizeof(int),1,fp);
for(int cSubPlant=0;cSubPlant<cSavedSubPlant;cSubPlant++)
{
fread(&ReadKind,sizeof(unsigned char),1,fp);
fread(&ReadPos,sizeof(vector3),1,fp);
AddNode->m_PlantKind.push_back(ReadKind);
//AddNode->m_vecPlantPos.push_back(ReadPos);
}
//m_PlantMap.push_back(AddNode);
}
// MeshMap loading
int cSavedMeshData=0;
fread(&cSavedMeshData,sizeof(int),1,fp);
for(int cMeshData=0;cMeshData<cSavedMeshData;cMeshData++)
{
CSectorMeshMap *AddNode=new CSectorMeshMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
int cSavedObject=0;
fread(&cSavedObject,sizeof(int),1,fp);
int ReadObjectSceneID;
matrix ReadMatrixTM;
bool ReadAlpha,ReadLight;
for(int cObject=0;cObject<cSavedObject;cObject++)
{
fread(&ReadObjectSceneID,sizeof(long),1,fp);
char *ReadObjectName=new char[MAX_NAMEBUFFER];
fread(ReadObjectName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(&ReadMatrixTM,sizeof(matrix),1,fp);
fread(&ReadAlpha,sizeof(bool),1,fp);
fread(&ReadLight,sizeof(bool),1,fp);
AddNode->m_ObjectSceneID.push_back(ReadObjectSceneID);
AddNode->m_strObjectName.push_back(ReadObjectName);
AddNode->m_TM.push_back(ReadMatrixTM);
AddNode->m_isAlpha.push_back(ReadAlpha);
AddNode->m_isLight.push_back(ReadLight);
}
m_MeshMap.push_back(AddNode);
}
fclose(fp);
}
void CMapStorage::SaveInHouseMap(char *strFilename)
{
FILE *fp=fopen(strFilename,"wb");
if(fp==NULL)
return;
int iCnt = m_InHouseMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cInHouseData=0;cInHouseData<iCnt;cInHouseData++)
{
fwrite(m_InHouseMap[cInHouseData]->m_strOutName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_InHouseMap[cInHouseData]->m_strMedName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_InHouseMap[cInHouseData]->m_strInName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
int iSize = m_InHouseMap[cInHouseData]->m_strObjectNameList.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cObject=0;cObject<iSize;cObject++)
{
fwrite(m_InHouseMap[cInHouseData]->m_strObjectNameList[cObject],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_ObjectID[cObject],sizeof(long),1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_matObjectList[cObject],sizeof(matrix),1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_isAlpha[cObject],sizeof(bool),1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_isLight[cObject],sizeof(bool),1,fp);
}
iSize = m_InHouseMap[cInHouseData]->m_strLightNameList.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cLight=0;cLight<iSize;cLight++)
{
fwrite(m_InHouseMap[cInHouseData]->m_strLightNameList[cLight],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_LightID[cLight],sizeof(long),1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_matLightList[cLight],sizeof(matrix),1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_fLightRange[cLight],sizeof(float),1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_LightColor[cLight],sizeof(color),1,fp);
}
}
fclose(fp);
}
void CMapStorage::LoadInHouseMap(char *strFilename)
{
int cSavedInHouseData=0;
FILE *fp=fopen(strFilename,"rb");
fread(&cSavedInHouseData,sizeof(int),1,fp);
if(cSavedInHouseData==0)
return;
m_InHouseMap.clear();
for(int cInHouseData=0;cInHouseData<cSavedInHouseData;cInHouseData++)
{
CInHouseObjectMap *AddNode=new CInHouseObjectMap();
fread(AddNode->m_strOutName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(AddNode->m_strMedName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(AddNode->m_strInName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
strcpy(AddNode->m_strOutName,strlwr(AddNode->m_strOutName));
strcpy(AddNode->m_strMedName,strlwr(AddNode->m_strMedName));
strcpy(AddNode->m_strInName,strlwr(AddNode->m_strInName));
int cSavedObject,cSavedLight;
fread(&cSavedObject,sizeof(int),1,fp);
for(int cObject=0;cObject<cSavedObject;cObject++)
{
matrix ReadObjectTM;
bool ReadAlpha,ReadLight;
long ReadObjectID;
char *ReadObjectName=new char[MAX_NAMEBUFFER];
fread(ReadObjectName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strObjectNameList.push_back(ReadObjectName);
fread(&ReadObjectID,sizeof(long),1,fp);
AddNode->m_ObjectID.push_back(ReadObjectID);
fread(&ReadObjectTM,sizeof(matrix),1,fp);
AddNode->m_matObjectList.push_back(ReadObjectTM);
fread(&ReadAlpha,sizeof(bool),1,fp);
AddNode->m_isAlpha.push_back(true);
fread(&ReadLight,sizeof(bool),1,fp);
AddNode->m_isLight.push_back(true);
}
fread(&cSavedLight,sizeof(int),1,fp);
for(int cLight=0;cLight<cSavedLight;cLight++)
{
matrix ReadLightTM;
float ReadLightRange;
color ReadLightColor;
long ReadLightID;
char *ReadLightName=new char[MAX_NAMEBUFFER];
fread(ReadLightName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strLightNameList.push_back(ReadLightName);
fread(&ReadLightID,sizeof(long),1,fp);
AddNode->m_LightID.push_back(ReadLightID);
fread(&ReadLightTM,sizeof(matrix),1,fp);
AddNode->m_matLightList.push_back(ReadLightTM);
fread(&ReadLightRange,sizeof(float),1,fp);
AddNode->m_fLightRange.push_back(ReadLightRange);
fread(&ReadLightColor,sizeof(color),1,fp);
AddNode->m_LightColor.push_back(ReadLightColor);
}
/*
AddNode->m_strLightNameList.num=0;
AddNode->m_LightID.num=0;
AddNode->m_matLightList.num=0;
AddNode->m_fLightRange.num=0;
AddNode->m_LightColor.num=0;
m_TotalInHouseLightSceneCount=0;
*/
m_InHouseMap.push_back(AddNode);
}
fclose(fp);
}
void CMapStorage::BugFix_Tree()
{
for(int cPlantMap=0;cPlantMap<(int)m_PlantMap.size();cPlantMap++)
{
CSectorPlantMap *PlantMap=m_PlantMap[cPlantMap];
std::vector<int> DelTreeList;
/*
for(int cPlant=0;cPlant<(int)PlantMap->m_PlantKind.size();cPlant++)
{
//ix=PlantMap->m_vecPlantPos[cPlant].x/LINTERVAL;
//iy=PlantMap->m_vecPlantPos[cPlant].z/LINTERVAL;
//if( ix < 0 || ix>= SECTORSX || iy < 0 || iy>=SECTORSY)
//DelTreeList.push_back(cPlant);
}
*/
for(int cPlant=(int)DelTreeList.size()-1;cPlant>=0;cPlant--)
{
// edith erase <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
PlantMap->m_PlantKind.erase(PlantMap->m_PlantKind.begin()+DelTreeList[cPlant]);
//PlantMap->m_vecPlantPos.DelIndex(DelTreeList[cPlant]);
}
}
}
std::vector<char *> strHangulList;
std::vector<char *> strEnglishList;
void ConvertH2E(char *strHangle)
{
strHangle=strlwr(strHangle);
for(int cHangul=0;cHangul<(int)strHangulList.size();cHangul++)
{
if(strcmp(strHangulList[cHangul],strHangle)==0)
{
strcpy(strHangle,strEnglishList[cHangul]);
break;
}
}
}
void CMapStorage::BugFix_Hangul2English()
{
FILE *fp=fopen("c:\\convert2.txt","rt");
int ErrorCheck=0;
do
{
char *strHangul=new char[256];
char *strEnglish=new char[256];
char dummy[256];
ErrorCheck=fscanf(fp,"%s %s %s",dummy,strHangul,strEnglish);
if(ErrorCheck!=-1)
{
strHangul=strlwr(strHangul);
strHangulList.push_back(strHangul);
strEnglish=strlwr(strEnglish);
strEnglishList.push_back(strEnglish);
}
}
while(ErrorCheck!=-1);
for(int cWideData=0;cWideData<(int)m_WideMap.size();cWideData++)
{
ConvertH2E(m_WideMap[cWideData]->m_strWidemapName[0]);
}
for(int cHouseData=0;cHouseData<(int)m_HouseMap.size();cHouseData++)
{
for(int cHouseList=0;cHouseList<(int)m_HouseMap[cHouseData]->m_HouseSceneID.size();cHouseList++)
{
ConvertH2E(m_HouseMap[cHouseData]->m_strOutName[cHouseList]);
ConvertH2E(m_HouseMap[cHouseData]->m_strMedName[cHouseList]);
ConvertH2E(m_HouseMap[cHouseData]->m_strInName[cHouseList]);
}
}
for(int cInHouseData=0;cInHouseData<(int)m_InHouseMap.size();cInHouseData++)
{
ConvertH2E(m_InHouseMap[cInHouseData]->m_strOutName);
ConvertH2E(m_InHouseMap[cInHouseData]->m_strMedName);
ConvertH2E(m_InHouseMap[cInHouseData]->m_strInName);
for(int cObject=0;cObject<(int)m_InHouseMap[cInHouseData]->m_strObjectNameList.size();cObject++)
{
ConvertH2E(m_InHouseMap[cInHouseData]->m_strObjectNameList[cObject]);
}
for(int cLight=0;cLight<(int)m_InHouseMap[cInHouseData]->m_strLightNameList.size();cLight++)
{
ConvertH2E(m_InHouseMap[cInHouseData]->m_strLightNameList[cLight]);
}
}
for(int cMeshData=0;cMeshData<(int)m_MeshMap.size();cMeshData++)
{
for(int cObject=0;cObject<(int)m_MeshMap[cMeshData]->m_ObjectSceneID.size();cObject++)
{
ConvertH2E(m_MeshMap[cMeshData]->m_strObjectName[cObject]);
}
}
}
void CMapStorage::BugFix_Tree2(char *strFilename)
{
FILE *fp=fopen(strFilename,"rb");
if(fp==NULL)
return;
DeleteAllData();
char strRead[MAX_NAMEBUFFER];
fread(strRead,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(&m_TotalHouseSceneCount,sizeof(long),1,fp);
fread(&m_TotalInHouseLightSceneCount,sizeof(long),1,fp);
fread(&m_TotalInHouseObjectSceneCount,sizeof(long),1,fp);
fread(&m_TotalObjectSceneCount,sizeof(long),1,fp);
// Height-Value Loading
int cSavedHeightData=0;
fread(&cSavedHeightData,sizeof(int),1,fp);
for(int cHeightData=0;cHeightData<cSavedHeightData;cHeightData++)
{
CSectorHeightMap *AddNode=new CSectorHeightMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
fread(AddNode->m_pHeightData,sizeof(float)*SECTORSX*SECTORSY,1,fp);
m_HeightMap.push_back(AddNode);
}
//Water loading
int cSavedWaterData=0;
fread(&cSavedWaterData,sizeof(int),1,fp);
for(int cWaterData=0;cWaterData<cSavedWaterData;cWaterData++)
{
CSectorWaterMap *AddNode=new CSectorWaterMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
fread(&AddNode->m_fWaterPosX,sizeof(float),1,fp);
fread(&AddNode->m_fWaterPosY,sizeof(float),1,fp);
fread(&AddNode->m_fWaterSizeX,sizeof(float),1,fp);
fread(&AddNode->m_fWaterSizeY,sizeof(float),1,fp);
fread(&AddNode->m_fWaterHeight,sizeof(float),1,fp);
fread(&AddNode->m_bWaterRelection,sizeof(bool),1,fp);
fread(&AddNode->m_WaterColor,sizeof(color),1,fp);
m_WaterMap.push_back(AddNode);
}
//Widemap loading
int cSavedWideData=0;
fread(&cSavedWideData,sizeof(int),1,fp);
for(int cWideData=0;cWideData<cSavedWideData;cWideData++)
{
CSectorWideMap *AddNode=new CSectorWideMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
fread(AddNode->m_strWidemapName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
m_WideMap.push_back(AddNode);
}
//Fallmap loading
int cSavedFallData=0;
fread(&cSavedFallData,sizeof(int),1,fp);
for(int cFallData=0;cFallData<cSavedFallData;cFallData++)
{
CSectorFallMap *AddNode=new CSectorFallMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
fread(&AddNode->m_fFallPosX,sizeof(float),1,fp);
fread(&AddNode->m_fFallPosY,sizeof(float),1,fp);
fread(&AddNode->m_fFallRot,sizeof(float),1,fp);
int cSavedFallList;
fread(&cSavedFallList,sizeof(int),1,fp);
for(int cFallList=0;cFallList<cSavedFallList;cFallList++)
{
float ReadFallData;
color ReadFallColor;
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallHeightList.push_back(ReadFallData);
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallLeftList.push_back(ReadFallData);
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallRightList.push_back(ReadFallData);
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallAddXList.push_back(ReadFallData);
fread(&ReadFallColor,sizeof(color),1,fp);
AddNode->m_FallColor.push_back(ReadFallColor);
}
m_FallMap.push_back(AddNode);
}
// HouseMap loading
int cSavedHouseData=0;
fread(&cSavedHouseData,sizeof(int),1,fp);
for(int cHouseData=0;cHouseData<cSavedHouseData;cHouseData++)
{
CSectorHouseMap *AddNode=new CSectorHouseMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
int cSavedHouseList=0;
fread(&cSavedHouseList,sizeof(int),1,fp);
for(int cHouseList=0;cHouseList<cSavedHouseList;cHouseList++)
{
int ReadHouseID;
char *ReadHouseName;
matrix ReadHouseTM;
fread(&ReadHouseTM,sizeof(matrix),1,fp);
AddNode->m_TM.push_back(ReadHouseTM);
fread(&ReadHouseID,sizeof(int),1,fp);
AddNode->m_HouseSceneID.push_back(ReadHouseID);
ReadHouseName=new char[MAX_NAMEBUFFER];
fread(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strOutName.push_back(ReadHouseName);
ReadHouseName=new char[MAX_NAMEBUFFER];
fread(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strMedName.push_back(ReadHouseName);
ReadHouseName=new char[MAX_NAMEBUFFER];
fread(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strInName.push_back(ReadHouseName);
}
m_HouseMap.push_back(AddNode);
}
int cSavedInHouseData=0;
fread(&cSavedInHouseData,sizeof(int),1,fp);
for(int cInHouseData=0;cInHouseData<cSavedInHouseData;cInHouseData++)
{
CInHouseObjectMap *AddNode=new CInHouseObjectMap();
fread(AddNode->m_strOutName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(AddNode->m_strMedName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(AddNode->m_strInName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
strcpy(AddNode->m_strOutName,strlwr(AddNode->m_strOutName));
strcpy(AddNode->m_strMedName,strlwr(AddNode->m_strMedName));
strcpy(AddNode->m_strInName,strlwr(AddNode->m_strInName));
int cSavedObject,cSavedLight;
fread(&cSavedObject,sizeof(int),1,fp);
for(int cObject=0;cObject<cSavedObject;cObject++)
{
matrix ReadObjectTM;
bool ReadAlpha,ReadLight;
long ReadObjectID;
char *ReadObjectName=new char[MAX_NAMEBUFFER];
fread(ReadObjectName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strObjectNameList.push_back(ReadObjectName);
fread(&ReadObjectID,sizeof(long),1,fp);
AddNode->m_ObjectID.push_back(ReadObjectID);
fread(&ReadObjectTM,sizeof(matrix),1,fp);
AddNode->m_matObjectList.push_back(ReadObjectTM);
fread(&ReadAlpha,sizeof(bool),1,fp);
AddNode->m_isAlpha.push_back(true);
fread(&ReadLight,sizeof(bool),1,fp);
AddNode->m_isLight.push_back(true);
}
fread(&cSavedLight,sizeof(int),1,fp);
for(int cLight=0;cLight<cSavedLight;cLight++)
{
matrix ReadLightTM;
float ReadLightRange;
color ReadLightColor;
long ReadLightID;
char *ReadLightName=new char[MAX_NAMEBUFFER];
fread(ReadLightName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strLightNameList.push_back(ReadLightName);
fread(&ReadLightID,sizeof(long),1,fp);
AddNode->m_LightID.push_back(ReadLightID);
fread(&ReadLightTM,sizeof(matrix),1,fp);
AddNode->m_matLightList.push_back(ReadLightTM);
fread(&ReadLightRange,sizeof(float),1,fp);
AddNode->m_fLightRange.push_back(ReadLightRange);
fread(&ReadLightColor,sizeof(color),1,fp);
AddNode->m_LightColor.push_back(ReadLightColor);
}
/*
AddNode->m_strLightNameList.num=0;
AddNode->m_LightID.num=0;
AddNode->m_matLightList.num=0;
AddNode->m_fLightRange.num=0;
AddNode->m_LightColor.num=0;
m_TotalInHouseLightSceneCount=0;
*/
m_InHouseMap.push_back(AddNode);
}
// PlantMap loading
int cSavedPlantData=0;
fread(&cSavedPlantData,sizeof(int),1,fp);
for(int cPlantData=0;cPlantData<cSavedPlantData;cPlantData++)
{
CSectorPlantMap *AddNode=new CSectorPlantMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
int cSavedSubPlant;
int ReadKind;
vector3 ReadPos;
fread(&cSavedSubPlant,sizeof(int),1,fp);
for(int cSubPlant=0;cSubPlant<cSavedSubPlant;cSubPlant++)
{
fread(&ReadKind,sizeof(unsigned char),1,fp);
fread(&ReadPos,sizeof(vector3),1,fp);
int ix=ReadPos.x/LINTERVAL;
int iy=ReadPos.z/LINTERVAL;
AddNode->m_PlantKind.push_back(ReadKind);
AddNode->m_PlantPosX.push_back(ix);
AddNode->m_PlantPosZ.push_back(iy);
}
m_PlantMap.push_back(AddNode);
}
// MeshMap loading
int cSavedMeshData=0;
fread(&cSavedMeshData,sizeof(int),1,fp);
for(int cMeshData=0;cMeshData<cSavedMeshData;cMeshData++)
{
CSectorMeshMap *AddNode=new CSectorMeshMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
int cSavedObject=0;
fread(&cSavedObject,sizeof(int),1,fp);
int ReadObjectSceneID;
matrix ReadMatrixTM;
bool ReadAlpha,ReadLight;
for(int cObject=0;cObject<cSavedObject;cObject++)
{
fread(&ReadObjectSceneID,sizeof(long),1,fp);
char *ReadObjectName=new char[MAX_NAMEBUFFER];
fread(ReadObjectName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(&ReadMatrixTM,sizeof(matrix),1,fp);
fread(&ReadAlpha,sizeof(bool),1,fp);
fread(&ReadLight,sizeof(bool),1,fp);
AddNode->m_ObjectSceneID.push_back(ReadObjectSceneID);
AddNode->m_strObjectName.push_back(ReadObjectName);
AddNode->m_TM.push_back(ReadMatrixTM);
AddNode->m_isAlpha.push_back(true);
AddNode->m_isLight.push_back(true);
}
m_MeshMap.push_back(AddNode);
}
fclose(fp);
}
CSectorMustDivideVertexMap* CMapStorage::FindMustDivideVertexMap(float fFindX, float fFindY)
{
int indexx=(int)(fFindX/SECTORSIZE);
int indexy=(int)(fFindY/SECTORSIZE);
int iNode = indexx * 11 + indexy;
if(iNode <0 || iNode >= MAXSECTOR)
return NULL;
if(m_MustDivideVertexMapTable[iNode])
{
return m_MustDivideVertexMapTable[iNode];
}
/*
for(int cStorage=0;cStorage<m_MustDivideVertexMap.num;cStorage++)
{
if( m_MustDivideVertexMap[cStorage]->m_IndexX==indexx &&
m_MustDivideVertexMap[cStorage]->m_IndexY==indexy)
{
return m_MustDivideVertexMap[cStorage];
}
}*/
return NULL;
}
void CMapStorage::AddMustDivideVertex(CSectorMustDivideVertexMap *pMustDivideVertex)
{
m_MustDivideVertexMap.push_back(pMustDivideVertex);
}
void CMapStorage::AddSectorLight(float fAddx,float fAddy,float fAddz,float fR,float fG,float fB,float fRad,int iLightSam,int iShadowSam,float fShadowFactor,int iAmb,char *strEffect,float fExpose)
{
int indexx=(int)(fAddx/SECTORSIZE);
int indexy=(int)(fAddz/SECTORSIZE);
for(int i = 0; i < (int)m_LightMap.size(); i++ )
{
if((m_LightMap[i]->m_IndexX == indexx) &&
(m_LightMap[i]->m_IndexY == indexy))
{
CSectorLight pNode;
pNode.m_fRange = fRad;
pNode.m_vecColor.x = fR;
pNode.m_vecColor.y = fG;
pNode.m_vecColor.z = fB;
pNode.m_vecPos.x = fAddx;
pNode.m_vecPos.y = fAddy;
pNode.m_vecPos.z = fAddz;
pNode.m_iLightSamples = iLightSam;
pNode.m_iShadowSamples = iShadowSam;
pNode.m_fShadowFactors = fShadowFactor;
pNode.m_iAmbient = iAmb;
pNode.m_fExpose = fExpose;
strcpy(pNode.m_strEffect,strEffect);
m_LightMap[i]->m_lstLights.push_back(pNode);
return;
}
}
CSectorLightMap *pMap = new CSectorLightMap;
pMap->m_IndexX = indexx;
pMap->m_IndexY = indexy;
CSectorLight pNode;
pNode.m_fRange = fRad;
pNode.m_vecColor.x = fR;
pNode.m_vecColor.y = fG;
pNode.m_vecColor.z = fB;
pNode.m_vecPos.x = fAddx;
pNode.m_vecPos.y = fAddy;
pNode.m_vecPos.z = fAddz;
pNode.m_iLightSamples = iLightSam;
pNode.m_iShadowSamples = iShadowSam;
pNode.m_fShadowFactors = fShadowFactor;
pNode.m_iAmbient = iAmb;
pNode.m_fExpose = fExpose;
strcpy(pNode.m_strEffect,strEffect);
pMap->m_lstLights.push_back(pNode);
m_LightMap.push_back(pMap);
}
void CMapStorage::DeleteSectorLight(float fAddx,float fAddy,float fAddz)
{
int indexx=(int)(fAddx/SECTORSIZE);
int indexy=(int)(fAddz/SECTORSIZE);
for(int i = 0; i < (int)m_LightMap.size(); i++ )
{
if((m_LightMap[i]->m_IndexX == indexx) &&
(m_LightMap[i]->m_IndexY == indexy))
{
for(int k = 0; k < (int)(m_LightMap[i]->m_lstLights.size()); i++)
{
if((m_LightMap[i]->m_lstLights[k].m_vecPos.x == fAddx) &&
(m_LightMap[i]->m_lstLights[k].m_vecPos.y == fAddy) &&
(m_LightMap[i]->m_lstLights[k].m_vecPos.z == fAddz))
{
m_LightMap[i]->m_lstLights.erase(m_LightMap[i]->m_lstLights.begin() + k);
return;
}
}
}
}
}
CSectorLightMap *CMapStorage::FindLightMap(float fFindx, float fFindy)
{
int indexx=(int)(fFindx/SECTORSIZE);
int indexy=(int)(fFindy/SECTORSIZE);
int iNode = indexx * 11 + indexy;
if(iNode <0 || iNode >= MAXSECTOR)
return NULL;
if(m_LightMapTable[iNode])
{
return m_LightMapTable[iNode];
}
/*
for(int i = 0; i < m_LightMap.num; i++)
{
if((m_LightMap[i]->m_IndexX == indexx) &&
(m_LightMap[i]->m_IndexY == indexy))
{
return m_LightMap[i];
}
}
*/
return (CSectorLightMap *)NULL;
}
void CMapStorage::AddEffectMap(float fAddx,float fAddy, float fAddz,char *strFilename,float xrot,float yrot,float zrot)
{
int indexx=(int)(fAddx/SECTORSIZE);
int indexy=(int)(fAddz/SECTORSIZE);
// std::vector<vector3> m_vecEffectPos;
// std::vector<char*> m_vecEffectName;
int i=0;
for(;i<(int)m_EffectMap.size();i++)
{
if( m_EffectMap[i]->m_IndexX==indexx &&
m_EffectMap[i]->m_IndexY==indexy )
{
m_EffectMap[i]->m_vecEffectPos.push_back(vector3(fAddx,fAddy,fAddz));
m_EffectMap[i]->m_vecEffectRot.push_back(vector3(xrot,yrot,zrot));
char *pAddName = new char[256];
strcpy(pAddName,strFilename);
m_EffectMap[i]->m_strEffectName.push_back(pAddName);
m_EffectMap[i]->Sector_EffectNum++;
return;
}
}
CSectorEffectMap *AddEffectMap=new CSectorEffectMap();
AddEffectMap->m_IndexX=indexx;
AddEffectMap->m_IndexY=indexy;
AddEffectMap->m_vecEffectPos.push_back(vector3(fAddx,fAddy,fAddz));
AddEffectMap->m_vecEffectRot.push_back(vector3(xrot,yrot,zrot));
char *pAddName = new char[256];
strcpy(pAddName,strFilename);
AddEffectMap->m_strEffectName.push_back(pAddName);
m_EffectMap.push_back(AddEffectMap);
m_EffectMap[i]->Sector_EffectNum++;
}
void CMapStorage::DelEffectMap(float fAddx,float fAddy,float fAddz,char *filename)
{
int indexx=(int)(fAddx/SECTORSIZE);
int indexy=(int)(fAddz/SECTORSIZE);
int j;
for(int cStorage=0;cStorage<(int)m_EffectMap.size();cStorage++)
{
if( m_EffectMap[cStorage]->m_IndexX==indexx &&
m_EffectMap[cStorage]->m_IndexY==indexy)
{
for(j=0;j<m_EffectMap[cStorage]->Sector_EffectNum;j++) {
if(m_EffectMap[cStorage]->m_vecEffectPos[j].x == fAddx &&
m_EffectMap[cStorage]->m_vecEffectPos[j].y == fAddy &&
m_EffectMap[cStorage]->m_vecEffectPos[j].z == fAddz)
{
m_EffectMap[cStorage]->m_vecEffectPos.erase(m_EffectMap[cStorage]->m_vecEffectPos.begin()+j);
m_EffectMap[cStorage]->m_strEffectName.erase(m_EffectMap[cStorage]->m_strEffectName.begin()+j);
m_EffectMap[cStorage]->Sector_EffectNum--;
return;
}
}
}
}
return;
}
CSectorEffectMap *CMapStorage::FindEffectMap(int indexX,int indexY) {
int iNode = indexX * 11 + indexY;
if(iNode <0 || iNode >= MAXSECTOR)
return NULL;
if(m_EffectMapTable[iNode])
{
return m_EffectMapTable[iNode];
}
/*
for(int cStorage=0;cStorage<m_EffectMap.num;cStorage++) {
if( m_EffectMap[cStorage]->m_IndexX==indexX &&
m_EffectMap[cStorage]->m_IndexY==indexY) {
return m_EffectMap[cStorage];
//return &m_EffectMap.m_Effect[cStorage];
}
}*/
return NULL;
}
CSectorEffectMap *CMapStorage::FindEffectMap(int &index) {
if(index >= (int)m_EffectMap.size())
index = 0;
return m_EffectMap[index];
}
CSectorEffectMap *CMapStorage::FindEffectMap(float fFindx, float fFindy)
{
int indexx=(int)(fFindx/SECTORSIZE);
int indexy=(int)(fFindy/SECTORSIZE);
int iNode = indexx * 11 + indexy;
if(iNode <0 || iNode >= MAXSECTOR)
return NULL;
if(m_EffectMapTable[iNode])
{
return m_EffectMapTable[iNode];
}
/*
for(int cStorage=0;cStorage<m_EffectMap.num;cStorage++)
{
if( m_EffectMap[cStorage]->m_IndexX==indexx &&
m_EffectMap[cStorage]->m_IndexY==indexy)
{
return m_EffectMap[cStorage];
//return &m_EffectMap.m_Effect[cStorage];
}
}*/
return NULL;
}
void CMapStorage::DeleteAllObject()
{
int i;
for(i=0;i<(int)m_HouseMap.size();i++)
{
delete m_HouseMap[i];
}
for(i=0;i<(int)m_HeightMap.size();i++)
{
delete m_HeightMap[i];
}
for(i=0;i<(int)m_WideMap.size();i++)
{
delete m_WideMap[i];
}
for(i=0;i<(int)m_FallMap.size();i++)
{
delete m_FallMap[i];
}
for(i=0;i<(int)m_InHouseMap.size();i++)
{
delete m_InHouseMap[i];
}
for(i=0;i<(int)m_PlantMap.size();i++)
{
delete m_PlantMap[i];
}
for(i=0;i<(int)m_MeshMap.size();i++)
{
delete m_MeshMap[i];
}
for(i=0;i<(int)m_WaterMap.size();i++)
{
delete m_WaterMap[i];
}
for(i=0;i<(int)m_EffectMap.size();i++)
{
delete m_EffectMap[i];
}
for(i=0;i<(int)m_LandscapeEffectMap.size();i++) {
delete m_LandscapeEffectMap[i];
}
for(i = 0; i < (int)m_LightMap.size(); i++ )
{
delete m_LightMap[i];
}
m_LightMap.clear();
m_HouseMap.clear();
m_HeightMap.clear();
m_WideMap.clear();
m_FallMap.clear();
m_InHouseMap.clear();
m_PlantMap.clear();
m_MeshMap.clear();
m_WaterMap.clear();
m_EffectMap.clear();
m_LandscapeEffectMap.clear();
}
/*
void CMapStorage::AddSoundMap(float fAddx, float fAddy, float fAddz, char *strFilename, float fMinRange,float fMaxRange)
{
int indexx=(int)(fAddx/SECTORSIZE);
int indexy=(int)(fAddz/SECTORSIZE);
for(int i=0;i<m_SoundMap.num;i++)
{
if( m_SoundMap[i]->m_IndexX == indexx &&
m_SoundMap[i]->m_IndexY == indexy)
{
char *pFilename=new char[256];
strcpy(pFilename,strFilename);
m_SoundMap[i]->m_strSoundFilenameList.push_back(pFilename);
m_SoundMap[i]->m_SoundPosList.push_back(vector3(fAddx,fAddy,fAddz));
m_SoundMap[i]->m_SoundMinRangeList.push_back(fMinRange);
m_SoundMap[i]->m_SoundMaxRangeList.push_back(fMaxRange);
return;
}
}
CSectorSoundMap *AddNode=new CSectorSoundMap();
AddNode->m_IndexX=indexx;
AddNode->m_IndexY=indexy;
AddNode->m_SoundPosList.push_back(vector3(fAddx,fAddy,fAddz));
AddNode->m_SoundMinRangeList.push_back(fMinRange);
AddNode->m_SoundMaxRangeList.push_back(fMaxRange);
char *pFilename=new char[256];
strcpy(pFilename,strFilename);
AddNode->m_strSoundFilenameList.push_back(pFilename);
m_SoundMap.push_back(AddNode);
/*
if(fHeightData==NULL)
return;
int indexx=(int)(fAddx/SECTORSIZE);
int indexy=(int)(fAddz/SECTORSIZE);
for(int i=0;i<m_HeightMap.num;i++)
{
if( m_HeightMap[i]->m_IndexX == indexx &&
m_HeightMap[i]->m_IndexY == indexy)
{
memcpy(m_HeightMap[i]->m_pHeightData,fHeightData,sizeof(float)*SECTORSX*SECTORSY);
return;
}
}
CSectorHeightMap *AddHeightMap=new CSectorHeightMap();
AddHeightMap->m_IndexX=indexx;
AddHeightMap->m_IndexY=indexy;
if(m_LoadMode==0)
{
AddHeightMap->m_pHeightData=new float[SECTORSX*SECTORSY];
}
memcpy(AddHeightMap->m_pHeightData,fHeightData,sizeof(float)*SECTORSX*SECTORSY);
m_HeightMap.push_back(AddHeightMap);
*/
/*
}
CSectorSoundMap* CMapStorage::FindSoundMap(float fFindx, float fFindy)
{
int indexx=(int)(fFindx/SECTORSIZE);
int indexy=(int)(fFindy/SECTORSIZE);
for(int cStorage=0;cStorage<m_SoundMap.num;cStorage++)
{
if( m_SoundMap[cStorage]->m_IndexX==indexx &&
m_SoundMap[cStorage]->m_IndexY==indexy)
{
return m_SoundMap[cStorage];
}
}
return NULL;
}
void CMapStorage::SaveSoundMap(char *strSoundMapFilename)
{
FILE *fp=fopen(strSoundMapFilename,"wb");
fwrite(&m_SoundMap.num,sizeof(int),1,fp);
for(int cStorage=0;cStorage<m_SoundMap.num;cStorage++)
{
fwrite(&m_SoundMap[cStorage]->m_IndexX,sizeof(int),1,fp);
fwrite(&m_SoundMap[cStorage]->m_IndexY,sizeof(int),1,fp);
fwrite(&m_SoundMap[cStorage]->m_SoundMaxRangeList.num,sizeof(int),1,fp);
for(int i=0;i<m_SoundMap[cStorage]->m_SoundMaxRangeList.num;i++)
{
fwrite(m_SoundMap[cStorage]->m_strSoundFilenameList[i],sizeof(char)*256,1,fp);
fwrite(&m_SoundMap[cStorage]->m_SoundPosList[i],sizeof(vector3),1,fp);
fwrite(&m_SoundMap[cStorage]->m_SoundMaxRangeList[i],sizeof(float),1,fp);
fwrite(&m_SoundMap[cStorage]->m_SoundMinRangeList[i],sizeof(float),1,fp);
}
}
}
void CMapStorage::LoadSoundMap(char *strSoundMapFilename)
{
FILE *fp=fopen(strSoundMapFilename,"rb");
if(fp==NULL)
return;
int nStorage=0;
fread(&nStorage,sizeof(int),1,fp);
for(int cStorage=0;cStorage<nStorage;cStorage++)
{
CSectorSoundMap *AddNode=new CSectorSoundMap();
AddNode->m_IndexY;
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
int c;
fread(&c,sizeof(int),1,fp);
for(int i=0;i<c;i++)
{
char *strName=new char[256];
fread(strName,sizeof(char)*256,1,fp);
AddNode->m_strSoundFilenameList.push_back(strName);
vector3 vecPos;
fread(&vecPos,sizeof(vector3),1,fp);
AddNode->m_SoundPosList.push_back(vecPos);
float fRange;
fread(&fRange,sizeof(float),1,fp);
AddNode->m_SoundMaxRangeList.push_back(fRange);
fread(&fRange,sizeof(float),1,fp);
AddNode->m_SoundMinRangeList.push_back(fRange);
}
m_SoundMap.push_back(AddNode);
}
}
*/
void CMapStorage::SaveGF3(char *strFilename)
{
FILE *fp=fopen(strFilename,"wb");
if(fp==NULL)
return;
char strWrite[MAX_NAMEBUFFER];
sprintf(strWrite,"ZallA-3D Scene Data File Build#2");
fwrite(strWrite,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(&m_TotalHouseSceneCount,sizeof(long),1,fp);
fwrite(&m_TotalInHouseLightSceneCount,sizeof(long),1,fp);
fwrite(&m_TotalInHouseObjectSceneCount,sizeof(long),1,fp);
fwrite(&m_TotalObjectSceneCount,sizeof(long),1,fp);
// Height-Value Saving
int iCnt = m_HeightMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cHeightData=0;cHeightData<iCnt;cHeightData++)
{
fwrite(&m_HeightMap[cHeightData]->m_IndexX,sizeof(int),1,fp);
fwrite(&m_HeightMap[cHeightData]->m_IndexY,sizeof(int),1,fp);
fwrite(m_HeightMap[cHeightData]->m_pHeightData,sizeof(float)*SECTORSX*SECTORSY,1,fp);
}
//Water Saving
iCnt = m_WaterMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cWaterData=0;cWaterData<iCnt;cWaterData++)
{
fwrite(&m_WaterMap[cWaterData]->m_IndexX,sizeof(int),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_IndexY,sizeof(int),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_fWaterPosX,sizeof(float),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_fWaterPosY,sizeof(float),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_fWaterSizeX,sizeof(float),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_fWaterSizeY,sizeof(float),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_fWaterHeight,sizeof(float),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_bWaterRelection,sizeof(bool),1,fp);
fwrite(&m_WaterMap[cWaterData]->m_WaterColor,sizeof(color),1,fp);
}
//Widemap saving
iCnt = m_WideMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cWideData=0;cWideData<iCnt;cWideData++)
{
fwrite(&m_WideMap[cWideData]->m_IndexX,sizeof(int),1,fp);
fwrite(&m_WideMap[cWideData]->m_IndexY,sizeof(int),1,fp);
fwrite(m_WideMap[cWideData]->m_strWidemapName[0],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_WideMap[cWideData]->m_strDetailName[0],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_WideMap[cWideData]->m_strWidemapName[1],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_WideMap[cWideData]->m_strDetailName[1],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_WideMap[cWideData]->m_strWidemapName[2],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_WideMap[cWideData]->m_strDetailName[2],sizeof(char)*MAX_NAMEBUFFER,1,fp);
}
//Fallmap saving
iCnt = m_FallMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cFallData=0;cFallData<iCnt;cFallData++)
{
fwrite(&m_FallMap[cFallData]->m_IndexX,sizeof(int),1,fp);
fwrite(&m_FallMap[cFallData]->m_IndexY,sizeof(int),1,fp);
fwrite(&m_FallMap[cFallData]->m_fFallPosX,sizeof(float),1,fp);
fwrite(&m_FallMap[cFallData]->m_fFallPosY,sizeof(float),1,fp);
fwrite(&m_FallMap[cFallData]->m_fFallRot,sizeof(float),1,fp);
int iSize = m_FallMap[cFallData]->m_FallHeightList.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cFallList=0;cFallList<iSize;cFallList++)
{
fwrite(&m_FallMap[cFallData]->m_FallHeightList[cFallList],sizeof(float),1,fp);
fwrite(&m_FallMap[cFallData]->m_FallLeftList[cFallList],sizeof(float),1,fp);
fwrite(&m_FallMap[cFallData]->m_FallRightList[cFallList],sizeof(float),1,fp);
fwrite(&m_FallMap[cFallData]->m_FallAddXList[cFallList],sizeof(float),1,fp);
fwrite(&m_FallMap[cFallData]->m_FallColor[cFallList],sizeof(color),1,fp);
}
}
//HouseMap saving
iCnt = m_HouseMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cHouseData=0;cHouseData<iCnt;cHouseData++)
{
fwrite(&m_HouseMap[cHouseData]->m_IndexX,sizeof(int),1,fp);
fwrite(&m_HouseMap[cHouseData]->m_IndexY,sizeof(int),1,fp);
int iSize = m_HouseMap[cHouseData]->m_TM.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cHouseList=0;cHouseList<iSize;cHouseList++)
{
fwrite(&m_HouseMap[cHouseData]->m_TM[cHouseList],sizeof(matrix),1,fp);
fwrite(&m_HouseMap[cHouseData]->m_HouseSceneID[cHouseList],sizeof(int),1,fp);
fwrite(m_HouseMap[cHouseData]->m_strOutName[cHouseList],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_HouseMap[cHouseData]->m_strMedName[cHouseList],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_HouseMap[cHouseData]->m_strInName[cHouseList],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_HouseMap[cHouseData]->m_strBspName[cHouseList],sizeof(char)*MAX_NAMEBUFFER,1,fp);
}
}
//InHouseObjectMap saving
iCnt = m_InHouseMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cInHouseData=0;cInHouseData<iCnt;cInHouseData++)
{
fwrite(m_InHouseMap[cInHouseData]->m_strOutName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_InHouseMap[cInHouseData]->m_strMedName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_InHouseMap[cInHouseData]->m_strInName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(m_InHouseMap[cInHouseData]->m_strBspName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
int iSize = m_InHouseMap[cInHouseData]->m_strObjectNameList.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cObject=0;cObject<iSize;cObject++)
{
fwrite(m_InHouseMap[cInHouseData]->m_strObjectNameList[cObject],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_ObjectID[cObject],sizeof(long),1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_matObjectList[cObject],sizeof(matrix),1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_isAlpha[cObject],sizeof(bool),1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_isLight[cObject],sizeof(bool),1,fp);
}
iSize = m_InHouseMap[cInHouseData]->m_strLightNameList.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cLight=0;cLight<iSize;cLight++)
{
fwrite(m_InHouseMap[cInHouseData]->m_strLightNameList[cLight],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_LightID[cLight],sizeof(long),1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_matLightList[cLight],sizeof(matrix),1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_fLightRange[cLight],sizeof(float),1,fp);
fwrite(&m_InHouseMap[cInHouseData]->m_LightColor[cLight],sizeof(color),1,fp);
}
}
// PlantMap saving
iCnt = m_PlantMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cPlantData=0;cPlantData<iCnt;cPlantData++)
{
fwrite(&m_PlantMap[cPlantData]->m_IndexX,sizeof(int),1,fp);
fwrite(&m_PlantMap[cPlantData]->m_IndexY,sizeof(int),1,fp);
int iSize = m_PlantMap[cPlantData]->m_PlantKind.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cSubPlant=0;cSubPlant<iSize;cSubPlant++)
{
fwrite(&m_PlantMap[cPlantData]->m_PlantKind[cSubPlant],sizeof(unsigned char),1,fp);
//fwrite(&m_PlantMap[cPlantData]->m_vecPlantPos[cSubPlant],sizeof(vector3),1,fp);
fwrite(&m_PlantMap[cPlantData]->m_PlantPosX[cSubPlant],sizeof(unsigned char),1,fp);
fwrite(&m_PlantMap[cPlantData]->m_PlantPosZ[cSubPlant],sizeof(unsigned char),1,fp);
}
}
// MeshMap saving
iCnt = m_MeshMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cMeshData=0;cMeshData<iCnt;cMeshData++)
{
fwrite(&m_MeshMap[cMeshData]->m_IndexX,sizeof(int),1,fp);
fwrite(&m_MeshMap[cMeshData]->m_IndexY,sizeof(int),1,fp);
int iSize = m_MeshMap[cMeshData]->m_ObjectSceneID.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cObject=0;cObject<iSize;cObject++)
{
fwrite(&m_MeshMap[cMeshData]->m_ObjectSceneID[cObject],sizeof(long),1,fp);
fwrite(m_MeshMap[cMeshData]->m_strObjectName[cObject],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fwrite(&m_MeshMap[cMeshData]->m_TM[cObject],sizeof(matrix),1,fp);
fwrite(&m_MeshMap[cMeshData]->m_isAlpha[cObject],sizeof(bool),1,fp);
fwrite(&m_MeshMap[cMeshData]->m_isLight[cObject],sizeof(bool),1,fp);
}
}
iCnt = m_EffectMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cEffectData=0;cEffectData<iCnt;cEffectData++)
{
fwrite(&m_EffectMap[cEffectData]->m_IndexX,sizeof(int),1,fp);
fwrite(&m_EffectMap[cEffectData]->m_IndexY,sizeof(int),1,fp);
int iSize = m_EffectMap[cEffectData]->m_vecEffectPos.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cEffect=0;cEffect<iSize;cEffect++)
{
fwrite(&m_EffectMap[cEffectData]->m_vecEffectPos[cEffect],sizeof(vector3),1,fp);
fwrite(&m_EffectMap[cEffectData]->m_vecEffectRot[cEffect],sizeof(vector3),1,fp);
fwrite(m_EffectMap[cEffectData]->m_strEffectName[cEffect],sizeof(char)*256,1,fp);
}
}
// landscapeeffect save
iCnt = m_LandscapeEffectMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int cLandscapeEffectData = 0;cLandscapeEffectData<iCnt;cLandscapeEffectData++)
{
fwrite(&m_LandscapeEffectMap[cLandscapeEffectData]->m_IndexX,sizeof(int),1,fp);
fwrite(&m_LandscapeEffectMap[cLandscapeEffectData]->m_IndexY,sizeof(int),1,fp);
int iSize = m_LandscapeEffectMap[cLandscapeEffectData]->m_LandscapeEffect.size();
fwrite(&iSize,sizeof(int),1,fp);
for(int cLand = 0;cLand <iSize;cLand++)
{
fwrite(&m_LandscapeEffectMap[cLandscapeEffectData]->m_LandscapeEffect[cLand].m_nEffectMethod,sizeof(int),1,fp);
fwrite(&m_LandscapeEffectMap[cLandscapeEffectData]->m_LandscapeEffect[cLand].m_vecCenterPos,sizeof(vector3),1,fp);
fwrite(&m_LandscapeEffectMap[cLandscapeEffectData]->m_LandscapeEffect[cLand].m_Name,sizeof(char)* 50,1,fp);
fwrite(&m_LandscapeEffectMap[cLandscapeEffectData]->m_LandscapeEffect[cLand].m_Param,sizeof(float) * 50,1,fp);
fwrite(&m_LandscapeEffectMap[cLandscapeEffectData]->m_LandscapeEffect[cLand].m_IntParam,sizeof(int) * 20,1,fp);
fwrite(&m_LandscapeEffectMap[cLandscapeEffectData]->m_LandscapeEffect[cLand].m_dwBlend,sizeof(DWORD) * 2,1,fp);
}
}
// Sector Light Save
iCnt = m_LightMap.size();
fwrite(&iCnt,sizeof(int),1,fp);
for(int iLightMap = 0; iLightMap < iCnt; iLightMap++)
{
int iNum = m_LightMap[iLightMap]->m_lstLights.size();
fwrite((int *)&(m_LightMap[iLightMap]->m_IndexX),sizeof(int),1,fp);
fwrite((int *)&(m_LightMap[iLightMap]->m_IndexY),sizeof(int),1,fp);
fwrite((int *)&(iNum),sizeof(int),1,fp);
for(int iLight = 0; iLight < (int)(m_LightMap[iLightMap]->m_lstLights.size()); iLight++)
{
fwrite((CSectorLight *)&(m_LightMap[iLightMap]->m_lstLights[iLight]),sizeof(CSectorLight),1,fp);
}
}
fclose(fp);
}
void CMapStorage::Read( void* tBuf, INT len, const char* sBuf, LONG& seek )
{
CopyMemory(tBuf, &sBuf[seek], len);
seek += len;
}
void CMapStorage::ConvertData(char * data, LONG len)
{
char * enckey = "cjsgkdmlTlqkfshaemfdmlwktlsdjqtsmsgkfn";
if ( len )
{
char a;
int counter = 0;
for(LONG i = 256; i < len; ++i)
{
a = data[i];
if (counter == ((sizeof(enckey) / sizeof(char)) - 1))
{
counter = 0;
}
a = ((a - counter) ^ enckey[counter]);
data[i] = a;
counter++;
}
}
}
void CMapStorage::LoadGF3Mem(char *strFilename)
{
FILE *fp=fopen(strFilename,"rb");
if(fp==NULL)
return;
fseek(fp, 0, SEEK_END);
fpos_t pos = 0;
fgetpos(fp, &pos);
fseek(fp, 0, SEEK_SET);
char* pMem = new char[pos];
fread(pMem, pos, 1, fp);
fclose(fp);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ConvertData(pMem, pos);
//map search Table <20>ʱ<EFBFBD>ȭ
memset(m_DundeonMapTable,0,sizeof(CSectorDungeonMap *) * MAXSECTOR);
memset(m_MeshMapTable,0,sizeof(CSectorMeshMap *) * MAXSECTOR);
memset(m_PlantMapTable,0,sizeof(CSectorPlantMap *) * MAXSECTOR);
memset(m_HouseMapTable,0,sizeof(CSectorHouseMap *) * MAXSECTOR);
memset(m_WaterMapTable,0,sizeof(CSectorWaterMap *) * MAXSECTOR);
memset(m_FallMapTable,0,sizeof(CSectorFallMap *) * MAXSECTOR);
memset(m_InHouseMapTable,0,sizeof(CInHouseObjectMap *) * MAXSECTOR);
memset(m_MustDivideVertexMapTable,0,sizeof(CSectorMustDivideVertexMap *) * MAXSECTOR);
memset(m_EffectMapTable,0,sizeof(CSectorEffectMap *) * MAXSECTOR);
memset(m_LightMapTable,0,sizeof(CSectorLightMap *) * MAXSECTOR);
memset(m_LandscapeEffectMapTable,0,sizeof(CSectorLandscapeEffectMap *) * MAXSECTOR);
memset(m_HeightMapTable,0,sizeof(CSectorHeightMap *) * MAXSECTOR);
memset(m_WideMapTable,0,sizeof(CSectorWideMap *) * MAXSECTOR);
strcpy(m_strMapFilename,strFilename);
DeleteAllData();
LONG seek = 0;
char strRead[MAX_NAMEBUFFER];
ZeroMemory(strRead, sizeof(char)*MAX_NAMEBUFFER);
Read(strRead, sizeof(char)*MAX_NAMEBUFFER, pMem, seek);
Read(&m_TotalHouseSceneCount, sizeof(long), pMem, seek);
Read(&m_TotalInHouseLightSceneCount, sizeof(long), pMem, seek);
Read(&m_TotalInHouseObjectSceneCount, sizeof(long), pMem, seek);
Read(&m_TotalObjectSceneCount, sizeof(long), pMem, seek);
// Height-Value Loading
int cSavedHeightData=0;
Read(&cSavedHeightData, sizeof(int), pMem, seek);
if(m_LoadMode==0)
{
for(int cHeightData=0;cHeightData<cSavedHeightData;cHeightData++)
{
CSectorHeightMap *AddNode=new CSectorHeightMap();
Read(&AddNode->m_IndexX,sizeof(int),pMem, seek);
Read(&AddNode->m_IndexY,sizeof(int),pMem, seek);
AddNode->m_pHeightData=new float[SECTORSX*SECTORSY];
Read(AddNode->m_pHeightData,sizeof(float)*SECTORSX*SECTORSY,pMem, seek);
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11)
{
delete AddNode;
continue;
}
m_HeightMap.push_back(AddNode);
/*
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_HeightMapTable[iNode] = AddNode;
*/
}
}
else
{
//float pHeightData[SECTORSX*SECTORSY];
for(int cHeightData=0;cHeightData<cSavedHeightData;cHeightData++)
{
CSectorHeightMap *AddNode=new CSectorHeightMap();
Read(&AddNode->m_IndexX,sizeof(int),pMem, seek);
Read(&AddNode->m_IndexY,sizeof(int),pMem, seek);
AddNode->m_pHeightData=new float[SECTORSX*SECTORSY];
Read(AddNode->m_pHeightData,sizeof(float)*SECTORSX*SECTORSY,pMem, seek);
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11 )
{
delete AddNode;
continue;
}
/*AddNode->m_FilePos=ftell(fp);
Read(&pHeightData,sizeof(float)*SECTORSX*SECTORSY,pMem, seek);
*/
m_HeightMap.push_back(AddNode);
/*
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
delete AddNode;
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
continue;
}
m_HeightMapTable[iNode] = AddNode;
*/
}
}
//Water loading
int cSavedWaterData=0;
Read(&cSavedWaterData,sizeof(int),pMem, seek);
for(int cWaterData=0;cWaterData<cSavedWaterData;cWaterData++)
{
CSectorWaterMap *AddNode=new CSectorWaterMap();
Read(&AddNode->m_IndexX,sizeof(int),pMem, seek);
Read(&AddNode->m_IndexY,sizeof(int),pMem, seek);
Read(&AddNode->m_fWaterPosX,sizeof(float),pMem, seek);
Read(&AddNode->m_fWaterPosY,sizeof(float),pMem, seek);
Read(&AddNode->m_fWaterSizeX,sizeof(float),pMem, seek);
Read(&AddNode->m_fWaterSizeY,sizeof(float),pMem, seek);
Read(&AddNode->m_fWaterHeight,sizeof(float),pMem, seek);
Read(&AddNode->m_bWaterRelection,sizeof(bool),pMem, seek);
Read(&AddNode->m_WaterColor,sizeof(color),pMem, seek);
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11 )
{
delete AddNode;
continue;
}
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_WaterMap.push_back(AddNode);
m_WaterMapTable[iNode] = AddNode;
}
//Widemap loading
// FILE* tFp = fopen("C:\\ZoneInfo.txt", "wt");
int cSavedWideData=0;
Read(&cSavedWideData,sizeof(int),pMem, seek);
for(int cWideData=0;cWideData<cSavedWideData;cWideData++)
{
CSectorWideMap *AddNode=new CSectorWideMap();
Read(&AddNode->m_IndexX,sizeof(int),pMem, seek);
Read(&AddNode->m_IndexY,sizeof(int),pMem, seek);
Read(AddNode->m_strWidemapName[0],sizeof(char)*MAX_NAMEBUFFER,pMem, seek);
Read(AddNode->m_strDetailName[0],sizeof(char)*MAX_NAMEBUFFER,pMem, seek);
Read(AddNode->m_strWidemapName[1],sizeof(char)*MAX_NAMEBUFFER,pMem, seek);
Read(AddNode->m_strDetailName[1],sizeof(char)*MAX_NAMEBUFFER,pMem, seek);
Read(AddNode->m_strWidemapName[2],sizeof(char)*MAX_NAMEBUFFER,pMem, seek);
Read(AddNode->m_strDetailName[2],sizeof(char)*MAX_NAMEBUFFER,pMem, seek);
if(CRenderOption::m_TerrainMultiDetalTexture)
{
}
else
{
strcpy(AddNode->m_strDetailName[0],"detail.dds");
strcpy(AddNode->m_strWidemapName[1],"");
strcpy(AddNode->m_strDetailName[1],"");
strcpy(AddNode->m_strWidemapName[2],"");
strcpy(AddNode->m_strDetailName[2],"");
}
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11 )
{
delete AddNode;
continue;
}
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
// fprintf(tFp, "%d, %d, %d, %s\r\n", iNode, AddNode->m_IndexX, AddNode->m_IndexY, AddNode->m_strWidemapName[0]);
m_WideMap.push_back(AddNode);
m_WideMapTable[iNode] = AddNode;
}
// fclose(tFp);
//Fallmap loading
int cSavedFallData=0;
Read(&cSavedFallData,sizeof(int),pMem, seek);
for(int cFallData=0;cFallData<cSavedFallData;cFallData++)
{
CSectorFallMap *AddNode=new CSectorFallMap();
Read(&AddNode->m_IndexX,sizeof(int),pMem, seek);
Read(&AddNode->m_IndexY,sizeof(int),pMem, seek);
Read(&AddNode->m_fFallPosX,sizeof(float),pMem, seek);
Read(&AddNode->m_fFallPosY,sizeof(float),pMem, seek);
Read(&AddNode->m_fFallRot,sizeof(float),pMem, seek);
int cSavedFallList;
Read(&cSavedFallList,sizeof(int),pMem, seek);
for(int cFallList=0;cFallList<cSavedFallList;cFallList++)
{
float ReadFallData;
color ReadFallColor;
Read(&ReadFallData,sizeof(float),pMem, seek);
AddNode->m_FallHeightList.push_back(ReadFallData);
Read(&ReadFallData,sizeof(float),pMem, seek);
AddNode->m_FallLeftList.push_back(ReadFallData);
Read(&ReadFallData,sizeof(float),pMem, seek);
AddNode->m_FallRightList.push_back(ReadFallData);
Read(&ReadFallData,sizeof(float),pMem, seek);
AddNode->m_FallAddXList.push_back(ReadFallData);
Read(&ReadFallColor,sizeof(color),pMem, seek);
AddNode->m_FallColor.push_back(ReadFallColor);
}
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11 )
{
delete AddNode;
continue;
}
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_FallMap.push_back(AddNode);
m_FallMapTable[iNode] = AddNode;
}
// HouseMap loading
int cSavedHouseData=0;
Read(&cSavedHouseData,sizeof(int),pMem, seek);
int IndexX, IndexY;
for(int cHouseData=0;cHouseData<cSavedHouseData;cHouseData++)
{
Read(&IndexX,sizeof(int),pMem, seek);
Read(&IndexY,sizeof(int),pMem, seek);
CSectorHouseMap *AddNode=new CSectorHouseMap();
int cSavedHouseList=0;
AddNode->m_IndexX = IndexX;
AddNode->m_IndexY = IndexY;
Read(&cSavedHouseList,sizeof(int),pMem, seek);
for(int cHouseList=0;cHouseList<cSavedHouseList;cHouseList++)
{
int ReadHouseID;
char *ReadHouseName;
matrix ReadHouseTM;
Read(&ReadHouseTM,sizeof(matrix),pMem, seek);
AddNode->m_TM.push_back(ReadHouseTM);
Read(&ReadHouseID,sizeof(int),pMem, seek);
AddNode->m_HouseSceneID.push_back(ReadHouseID);
ReadHouseName=new char[MAX_NAMEBUFFER];
Read(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,pMem, seek);
AddNode->m_strOutName.push_back(ReadHouseName);
ReadHouseName=new char[MAX_NAMEBUFFER];
Read(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,pMem, seek);
AddNode->m_strMedName.push_back(ReadHouseName);
ReadHouseName=new char[MAX_NAMEBUFFER];
Read(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,pMem, seek);
AddNode->m_strInName.push_back(ReadHouseName);
ReadHouseName=new char[MAX_NAMEBUFFER];
Read(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,pMem, seek);
AddNode->m_strBspName.push_back(ReadHouseName);
}
if(IndexX < 0 || IndexX > 11 ||
IndexY < 0 || IndexY > 11 )
{
delete AddNode;
continue;
}
int iNode = IndexX * 11 + IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_HouseMap.push_back(AddNode);
m_HouseMapTable[iNode] = AddNode;
}
int cSavedInHouseData=0;
Read(&cSavedInHouseData,sizeof(int),pMem, seek);
for(int cInHouseData=0;cInHouseData<cSavedInHouseData;cInHouseData++)
{
CInHouseObjectMap *AddNode=new CInHouseObjectMap();
Read(AddNode->m_strOutName,sizeof(char)*MAX_NAMEBUFFER,pMem, seek);
Read(AddNode->m_strMedName,sizeof(char)*MAX_NAMEBUFFER,pMem, seek);
Read(AddNode->m_strInName,sizeof(char)*MAX_NAMEBUFFER,pMem, seek);
Read(AddNode->m_strBspName,sizeof(char)*MAX_NAMEBUFFER,pMem, seek);
strcpy(AddNode->m_strOutName,strlwr(AddNode->m_strOutName));
strcpy(AddNode->m_strMedName,strlwr(AddNode->m_strMedName));
strcpy(AddNode->m_strInName,strlwr(AddNode->m_strInName));
strcpy(AddNode->m_strBspName,strlwr(AddNode->m_strBspName));
int cSavedObject,cSavedLight;
Read(&cSavedObject,sizeof(int),pMem, seek);
for(int cObject=0;cObject<cSavedObject;cObject++)
{
matrix ReadObjectTM;
bool ReadAlpha,ReadLight;
long ReadObjectID;
char *ReadObjectName=new char[MAX_NAMEBUFFER];
Read(ReadObjectName,sizeof(char)*MAX_NAMEBUFFER,pMem, seek);
AddNode->m_strObjectNameList.push_back(ReadObjectName);
Read(&ReadObjectID,sizeof(long),pMem, seek);
AddNode->m_ObjectID.push_back(ReadObjectID);
Read(&ReadObjectTM,sizeof(matrix),pMem, seek);
AddNode->m_matObjectList.push_back(ReadObjectTM);
Read(&ReadAlpha,sizeof(bool),pMem, seek);
AddNode->m_isAlpha.push_back(true);
Read(&ReadLight,sizeof(bool),pMem, seek);
AddNode->m_isLight.push_back(true);
}
Read(&cSavedLight,sizeof(int),pMem, seek);
for(int cLight=0;cLight<cSavedLight;cLight++)
{
matrix ReadLightTM;
float ReadLightRange;
color ReadLightColor;
long ReadLightID;
char *ReadLightName=new char[MAX_NAMEBUFFER];
Read(ReadLightName,sizeof(char)*MAX_NAMEBUFFER,pMem, seek);
AddNode->m_strLightNameList.push_back(ReadLightName);
Read(&ReadLightID,sizeof(long),pMem, seek);
AddNode->m_LightID.push_back(ReadLightID);
Read(&ReadLightTM,sizeof(matrix),pMem, seek);
AddNode->m_matLightList.push_back(ReadLightTM);
Read(&ReadLightRange,sizeof(float),pMem, seek);
AddNode->m_fLightRange.push_back(ReadLightRange);
Read(&ReadLightColor,sizeof(color),pMem, seek);
AddNode->m_LightColor.push_back(ReadLightColor);
}
m_InHouseMap.push_back(AddNode);
}
// PlantMap loading
int cSavedPlantData=0;
Read(&cSavedPlantData,sizeof(int),pMem, seek);
for(int cPlantData=0;cPlantData<cSavedPlantData;cPlantData++)
{
CSectorPlantMap *AddNode=new CSectorPlantMap();
Read(&AddNode->m_IndexX,sizeof(int),pMem, seek);
Read(&AddNode->m_IndexY,sizeof(int),pMem, seek);
int cSavedSubPlant;
int ReadKind;
unsigned char ReadPosX,ReadPosZ;
//vector3 ReadPos;
Read(&cSavedSubPlant,sizeof(int),pMem, seek);
for(int cSubPlant=0;cSubPlant<cSavedSubPlant;cSubPlant++)
{
Read(&ReadKind,sizeof(unsigned char),pMem, seek);
Read(&ReadPosX,sizeof(unsigned char),pMem, seek);
Read(&ReadPosZ,sizeof(unsigned char),pMem, seek);
//Read(&ReadPos,sizeof(vector3),pMem, seek);
bool isAlready=false;
for(int cNowPlant=0;cNowPlant<(int)AddNode->m_PlantKind.size();cNowPlant++)
{
if( AddNode->m_PlantPosX[cNowPlant]==ReadPosX &&
AddNode->m_PlantPosZ[cNowPlant]==ReadPosZ)
{
AddNode->m_PlantKind[cNowPlant]=ReadKind;
AddNode->m_PlantPosX[cNowPlant]=ReadPosX;
AddNode->m_PlantPosZ[cNowPlant]=ReadPosZ;
isAlready=true;
}
}
if(isAlready==false)
{
AddNode->m_PlantKind.push_back(ReadKind);
AddNode->m_PlantPosX.push_back(ReadPosX);
AddNode->m_PlantPosZ.push_back(ReadPosZ);
}
//AddNode->m_vecPlantPos.push_back(ReadPos);
}
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11 )
{
delete AddNode;
continue;
}
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_PlantMap.push_back(AddNode);
m_PlantMapTable[iNode] = AddNode;
}
// MeshMap loading
int cSavedMeshData=0;
Read(&cSavedMeshData,sizeof(int),pMem, seek);
for(int cMeshData=0;cMeshData<cSavedMeshData;cMeshData++)
{
CSectorMeshMap *AddNode=new CSectorMeshMap();
Read(&AddNode->m_IndexX,sizeof(int),pMem, seek);
Read(&AddNode->m_IndexY,sizeof(int),pMem, seek);
int cSavedObject=0;
Read(&cSavedObject,sizeof(int),pMem, seek);
int ReadObjectSceneID;
matrix ReadMatrixTM;
bool ReadAlpha,ReadLight;
for(int cObject=0;cObject<cSavedObject;cObject++)
{
Read(&ReadObjectSceneID,sizeof(long),pMem, seek);
char *ReadObjectName=new char[MAX_NAMEBUFFER];
Read(ReadObjectName,sizeof(char)*MAX_NAMEBUFFER,pMem, seek);
Read(&ReadMatrixTM,sizeof(matrix),pMem, seek);
Read(&ReadAlpha,sizeof(bool),pMem, seek);
Read(&ReadLight,sizeof(bool),pMem, seek);
AddNode->m_ObjectSceneID.push_back(ReadObjectSceneID);
AddNode->m_strObjectName.push_back(ReadObjectName);
AddNode->m_TM.push_back(ReadMatrixTM);
AddNode->m_isAlpha.push_back(true);
AddNode->m_isLight.push_back(true);
}
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11 )
{
delete AddNode;
continue;
}
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_MeshMap.push_back(AddNode);
m_MeshMapTable[iNode] = AddNode;
}
int cSavedEffectData=0;
Read(&cSavedEffectData,sizeof(int),pMem, seek);
for(int cEffectData=0;cEffectData<cSavedEffectData;cEffectData++)
{
CSectorEffectMap *AddNode=new CSectorEffectMap();
Read(&AddNode->m_IndexX,sizeof(int),pMem, seek);
Read(&AddNode->m_IndexY,sizeof(int),pMem, seek);
int nEffect;
Read(&nEffect,sizeof(int),pMem, seek);
vector3 vecEffectPos;
vector3 vecEffectRot;
char* strEffectName;
for(int cEffect=0;cEffect<nEffect;cEffect++)
{
Read(&vecEffectPos,sizeof(vector3),pMem, seek);
Read(&vecEffectRot,sizeof(vector3),pMem, seek);
strEffectName=new char[256];
Read(strEffectName,sizeof(char)*256,pMem, seek);
AddNode->m_vecEffectPos.push_back(vecEffectPos);
AddNode->m_strEffectName.push_back(strEffectName);
AddNode->m_vecEffectRot.push_back(vecEffectRot);
}
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11 )
{
delete AddNode;
continue;
}
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_EffectMap.push_back(AddNode);
m_EffectMapTable[iNode] = AddNode;
}
//landscape effect
int cSaveLandscapeEffectData = 0;
Read((int *)&cSaveLandscapeEffectData,sizeof(int),pMem, seek);
for(int cLandscape = 0;cLandscape<cSaveLandscapeEffectData;cLandscape++) {
CSectorLandscapeEffectMap *AddNode = new CSectorLandscapeEffectMap();
CSectorLandscapeEffectMap ::LandscapeEffect *tmpLandscape;
Read(&AddNode->m_IndexX,sizeof(int),pMem, seek);
Read(&AddNode->m_IndexY,sizeof(int),pMem, seek);
int nLandscapeEffect;
Read(&nLandscapeEffect,sizeof(int),pMem, seek);
for(int cLEffect =0;cLEffect<nLandscapeEffect;cLEffect++) {
tmpLandscape = new CSectorLandscapeEffectMap ::LandscapeEffect();
Read(&(tmpLandscape->m_nEffectMethod),sizeof(int),pMem, seek);
Read(&(tmpLandscape->m_vecCenterPos),sizeof(vector3),pMem, seek);
Read(tmpLandscape->m_Name,sizeof(char)* 50,pMem, seek);
Read(tmpLandscape->m_Param,sizeof(float)* 50,pMem, seek);
Read(tmpLandscape->m_IntParam,sizeof(int)* 20,pMem, seek);
Read(tmpLandscape->m_dwBlend,sizeof(DWORD)*2,pMem, seek);
AddNode->m_LandscapeEffect.push_back(*tmpLandscape);
delete tmpLandscape;
//AddNode->m_LandscapeEffect.push_back
}
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11 )
{
delete AddNode;
continue;
}
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_LandscapeEffectMap.push_back(AddNode);
m_LandscapeEffectMapTable[iNode] = AddNode;
}
// Sector Light Load
if(feof(fp) == 0)
{
int iLightMapNum;
Read((int *)&iLightMapNum,sizeof(int),pMem, seek);
if(iLightMapNum >0 && iLightMapNum < 100)
{
for(int iLightMap = 0; iLightMap < iLightMapNum; iLightMap++)
{
CSectorLightMap *pAddNode = new CSectorLightMap;
Read((int *)&(pAddNode->m_IndexX),sizeof(int),pMem, seek);
Read((int *)&(pAddNode->m_IndexY),sizeof(int),pMem, seek);
int iLightNum;
Read((int *)&iLightNum,sizeof(int),pMem, seek);
for(int iLight = 0; iLight < iLightNum; iLight++)
{
CSectorLight Node;
Read((CSectorLight *)&(Node),sizeof(CSectorLight),pMem, seek);
pAddNode->m_lstLights.push_back(Node);
}
if(pAddNode->m_IndexX < 0 || pAddNode->m_IndexX > 11 ||
pAddNode->m_IndexY < 0 || pAddNode->m_IndexY > 11 )
{
delete pAddNode;
continue;
}
int iNode = pAddNode->m_IndexX * 11 + pAddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete pAddNode;
continue;
}
m_LightMap.push_back(pAddNode);
m_LightMapTable[iNode] = pAddNode;
}
}
}
if(pMem)
{
delete []pMem;
}
BugFix_Tree();
//BugFix_Hangul2English();
//======================
// SoundMap
//======================
CAmbienceManager::_GetInstance()->AllStop();
CAmbienceManager::_GetInstance()->GetAmbienceMap()->DeleteAmbData();
CBgmManager::_GetInstance()->AllStop();
CBgmManager::_GetInstance()->GetBGMTrigger()->DeleteBgmData();
char Temp[MAX_PATH];
char* token = strtok( strFilename, "Z" );
token = strtok( NULL, "." );
if( strcmp(token, "one3") == 0 ) return; //<2F><>Ʋ<EFBFBD>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if( strcmp(token, "one10") == 0 ) return; //<2F><>Ʋ<EFBFBD>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if( strcmp(token, "one11") == 0 ) return; //<2F><>Ʋ<EFBFBD>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if( strcmp(token, "one13") == 0 ) return; //<2F><>Ʋ<EFBFBD>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if( strcmp(token, "one15") == 0 ) return; //ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȭ<EFBFBD><C8AD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if( strcmp(token, "one100") == 0 || strcmp(token, "one14") == 0 ) return; // 100<30><30><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD>
if( strcmp(token, "one16") == 0 ) return;
sprintf( Temp, "%sZ%s.amb", AMBIENCEPATH, token );
// CAmbienceManager::_GetInstance()->AllStop();
CAmbienceManager::_GetInstance()->GetAmbienceMap()->LoadData( Temp );
sprintf( Temp, "%sZ%s.bgm", BGMPATH, token );
// CBgmManager::_GetInstance()->AllStop();
CBgmManager::_GetInstance()->GetBGMTrigger()->LoadData( Temp );
//LoadMapOutHouse();
}
void CMapStorage::LoadGF3(char *strFilename)
{
FILE *fp=fopen(strFilename,"rb");
if(fp==NULL)
return;
//map search Table <20>ʱ<EFBFBD>ȭ
memset(m_DundeonMapTable,0,sizeof(CSectorDungeonMap *) * MAXSECTOR);
memset(m_MeshMapTable,0,sizeof(CSectorMeshMap *) * MAXSECTOR);
memset(m_PlantMapTable,0,sizeof(CSectorPlantMap *) * MAXSECTOR);
memset(m_HouseMapTable,0,sizeof(CSectorHouseMap *) * MAXSECTOR);
memset(m_WaterMapTable,0,sizeof(CSectorWaterMap *) * MAXSECTOR);
memset(m_FallMapTable,0,sizeof(CSectorFallMap *) * MAXSECTOR);
memset(m_InHouseMapTable,0,sizeof(CInHouseObjectMap *) * MAXSECTOR);
memset(m_MustDivideVertexMapTable,0,sizeof(CSectorMustDivideVertexMap *) * MAXSECTOR);
memset(m_EffectMapTable,0,sizeof(CSectorEffectMap *) * MAXSECTOR);
memset(m_LightMapTable,0,sizeof(CSectorLightMap *) * MAXSECTOR);
memset(m_LandscapeEffectMapTable,0,sizeof(CSectorLandscapeEffectMap *) * MAXSECTOR);
memset(m_HeightMapTable,0,sizeof(CSectorHeightMap *) * MAXSECTOR);
memset(m_WideMapTable,0,sizeof(CSectorWideMap *) * MAXSECTOR);
strcpy(m_strMapFilename,strFilename);
DeleteAllData();
char strRead[MAX_NAMEBUFFER];
fread(strRead,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(&m_TotalHouseSceneCount,sizeof(long),1,fp);
fread(&m_TotalInHouseLightSceneCount,sizeof(long),1,fp);
fread(&m_TotalInHouseObjectSceneCount,sizeof(long),1,fp);
fread(&m_TotalObjectSceneCount,sizeof(long),1,fp);
// Height-Value Loading
int cSavedHeightData=0;
fread(&cSavedHeightData,sizeof(int),1,fp);
if(m_LoadMode==0)
{
for(int cHeightData=0;cHeightData<cSavedHeightData;cHeightData++)
{
CSectorHeightMap *AddNode=new CSectorHeightMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
AddNode->m_pHeightData=new float[SECTORSX*SECTORSY];
fread(AddNode->m_pHeightData,sizeof(float)*SECTORSX*SECTORSY,1,fp);
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11)
{
delete AddNode;
continue;
}
m_HeightMap.push_back(AddNode);
/*
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_HeightMapTable[iNode] = AddNode;
*/
}
}
else
{
//float pHeightData[SECTORSX*SECTORSY];
for(int cHeightData=0;cHeightData<cSavedHeightData;cHeightData++)
{
CSectorHeightMap *AddNode=new CSectorHeightMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
AddNode->m_pHeightData=new float[SECTORSX*SECTORSY];
fread(AddNode->m_pHeightData,sizeof(float)*SECTORSX*SECTORSY,1,fp);
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11)
{
delete AddNode;
continue;
}
/*AddNode->m_FilePos=ftell(fp);
fread(&pHeightData,sizeof(float)*SECTORSX*SECTORSY,1,fp);
*/
m_HeightMap.push_back(AddNode);
/*
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
delete AddNode;
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
continue;
}
m_HeightMapTable[iNode] = AddNode;
*/
}
}
//Water loading
int cSavedWaterData=0;
fread(&cSavedWaterData,sizeof(int),1,fp);
for(int cWaterData=0;cWaterData<cSavedWaterData;cWaterData++)
{
CSectorWaterMap *AddNode=new CSectorWaterMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
fread(&AddNode->m_fWaterPosX,sizeof(float),1,fp);
fread(&AddNode->m_fWaterPosY,sizeof(float),1,fp);
fread(&AddNode->m_fWaterSizeX,sizeof(float),1,fp);
fread(&AddNode->m_fWaterSizeY,sizeof(float),1,fp);
fread(&AddNode->m_fWaterHeight,sizeof(float),1,fp);
fread(&AddNode->m_bWaterRelection,sizeof(bool),1,fp);
fread(&AddNode->m_WaterColor,sizeof(color),1,fp);
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11)
{
delete AddNode;
continue;
}
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_WaterMap.push_back(AddNode);
m_WaterMapTable[iNode] = AddNode;
}
//Widemap loading
// FILE* tFp = fopen("C:\\ZoneInfo.txt", "wt");
int cSavedWideData=0;
fread(&cSavedWideData,sizeof(int),1,fp);
for(int cWideData=0;cWideData<cSavedWideData;cWideData++)
{
CSectorWideMap *AddNode=new CSectorWideMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
fread(AddNode->m_strWidemapName[0],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(AddNode->m_strDetailName[0],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(AddNode->m_strWidemapName[1],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(AddNode->m_strDetailName[1],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(AddNode->m_strWidemapName[2],sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(AddNode->m_strDetailName[2],sizeof(char)*MAX_NAMEBUFFER,1,fp);
if(CRenderOption::m_TerrainMultiDetalTexture)
{
}
else
{
strcpy(AddNode->m_strDetailName[0],"detail.dds");
strcpy(AddNode->m_strWidemapName[1],"");
strcpy(AddNode->m_strDetailName[1],"");
strcpy(AddNode->m_strWidemapName[2],"");
strcpy(AddNode->m_strDetailName[2],"");
}
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11)
{
delete AddNode;
continue;
}
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
// fprintf(tFp, "%d, %d, %d, %s\r\n", iNode, AddNode->m_IndexX, AddNode->m_IndexY, AddNode->m_strWidemapName[0]);
m_WideMap.push_back(AddNode);
m_WideMapTable[iNode] = AddNode;
}
// fclose(tFp);
//Fallmap loading
int cSavedFallData=0;
fread(&cSavedFallData,sizeof(int),1,fp);
for(int cFallData=0;cFallData<cSavedFallData;cFallData++)
{
CSectorFallMap *AddNode=new CSectorFallMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
fread(&AddNode->m_fFallPosX,sizeof(float),1,fp);
fread(&AddNode->m_fFallPosY,sizeof(float),1,fp);
fread(&AddNode->m_fFallRot,sizeof(float),1,fp);
int cSavedFallList;
fread(&cSavedFallList,sizeof(int),1,fp);
for(int cFallList=0;cFallList<cSavedFallList;cFallList++)
{
float ReadFallData;
color ReadFallColor;
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallHeightList.push_back(ReadFallData);
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallLeftList.push_back(ReadFallData);
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallRightList.push_back(ReadFallData);
fread(&ReadFallData,sizeof(float),1,fp);
AddNode->m_FallAddXList.push_back(ReadFallData);
fread(&ReadFallColor,sizeof(color),1,fp);
AddNode->m_FallColor.push_back(ReadFallColor);
}
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11)
{
delete AddNode;
continue;
}
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_FallMap.push_back(AddNode);
m_FallMapTable[iNode] = AddNode;
}
// HouseMap loading
int cSavedHouseData=0;
fread(&cSavedHouseData,sizeof(int),1,fp);
int IndexX, IndexY;
for(int cHouseData=0;cHouseData<cSavedHouseData;cHouseData++)
{
fread(&IndexX,sizeof(int),1,fp);
fread(&IndexY,sizeof(int),1,fp);
CSectorHouseMap *AddNode=new CSectorHouseMap();
int cSavedHouseList=0;
AddNode->m_IndexX = IndexX;
AddNode->m_IndexY = IndexY;
fread(&cSavedHouseList,sizeof(int),1,fp);
for(int cHouseList=0;cHouseList<cSavedHouseList;cHouseList++)
{
int ReadHouseID;
char *ReadHouseName;
matrix ReadHouseTM;
fread(&ReadHouseTM,sizeof(matrix),1,fp);
AddNode->m_TM.push_back(ReadHouseTM);
fread(&ReadHouseID,sizeof(int),1,fp);
AddNode->m_HouseSceneID.push_back(ReadHouseID);
ReadHouseName=new char[MAX_NAMEBUFFER];
fread(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strOutName.push_back(ReadHouseName);
ReadHouseName=new char[MAX_NAMEBUFFER];
fread(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strMedName.push_back(ReadHouseName);
ReadHouseName=new char[MAX_NAMEBUFFER];
fread(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strInName.push_back(ReadHouseName);
ReadHouseName=new char[MAX_NAMEBUFFER];
fread(ReadHouseName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strBspName.push_back(ReadHouseName);
}
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11)
{
delete AddNode;
continue;
}
int iNode = IndexX * 11 + IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
continue;
}
m_HouseMap.push_back(AddNode);
m_HouseMapTable[iNode] = AddNode;
}
int cSavedInHouseData=0;
fread(&cSavedInHouseData,sizeof(int),1,fp);
for(int cInHouseData=0;cInHouseData<cSavedInHouseData;cInHouseData++)
{
CInHouseObjectMap *AddNode=new CInHouseObjectMap();
fread(AddNode->m_strOutName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(AddNode->m_strMedName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(AddNode->m_strInName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(AddNode->m_strBspName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
strcpy(AddNode->m_strOutName,strlwr(AddNode->m_strOutName));
strcpy(AddNode->m_strMedName,strlwr(AddNode->m_strMedName));
strcpy(AddNode->m_strInName,strlwr(AddNode->m_strInName));
strcpy(AddNode->m_strBspName,strlwr(AddNode->m_strBspName));
int cSavedObject,cSavedLight;
fread(&cSavedObject,sizeof(int),1,fp);
for(int cObject=0;cObject<cSavedObject;cObject++)
{
matrix ReadObjectTM;
bool ReadAlpha,ReadLight;
long ReadObjectID;
char *ReadObjectName=new char[MAX_NAMEBUFFER];
fread(ReadObjectName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strObjectNameList.push_back(ReadObjectName);
fread(&ReadObjectID,sizeof(long),1,fp);
AddNode->m_ObjectID.push_back(ReadObjectID);
fread(&ReadObjectTM,sizeof(matrix),1,fp);
AddNode->m_matObjectList.push_back(ReadObjectTM);
fread(&ReadAlpha,sizeof(bool),1,fp);
AddNode->m_isAlpha.push_back(true);
fread(&ReadLight,sizeof(bool),1,fp);
AddNode->m_isLight.push_back(true);
}
fread(&cSavedLight,sizeof(int),1,fp);
for(int cLight=0;cLight<cSavedLight;cLight++)
{
matrix ReadLightTM;
float ReadLightRange;
color ReadLightColor;
long ReadLightID;
char *ReadLightName=new char[MAX_NAMEBUFFER];
fread(ReadLightName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
AddNode->m_strLightNameList.push_back(ReadLightName);
fread(&ReadLightID,sizeof(long),1,fp);
AddNode->m_LightID.push_back(ReadLightID);
fread(&ReadLightTM,sizeof(matrix),1,fp);
AddNode->m_matLightList.push_back(ReadLightTM);
fread(&ReadLightRange,sizeof(float),1,fp);
AddNode->m_fLightRange.push_back(ReadLightRange);
fread(&ReadLightColor,sizeof(color),1,fp);
AddNode->m_LightColor.push_back(ReadLightColor);
}
m_InHouseMap.push_back(AddNode);
}
// PlantMap loading
int cSavedPlantData=0;
fread(&cSavedPlantData,sizeof(int),1,fp);
for(int cPlantData=0;cPlantData<cSavedPlantData;cPlantData++)
{
CSectorPlantMap *AddNode=new CSectorPlantMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
int cSavedSubPlant;
int ReadKind;
unsigned char ReadPosX,ReadPosZ;
//vector3 ReadPos;
fread(&cSavedSubPlant,sizeof(int),1,fp);
for(int cSubPlant=0;cSubPlant<cSavedSubPlant;cSubPlant++)
{
fread(&ReadKind,sizeof(unsigned char),1,fp);
fread(&ReadPosX,sizeof(unsigned char),1,fp);
fread(&ReadPosZ,sizeof(unsigned char),1,fp);
//fread(&ReadPos,sizeof(vector3),1,fp);
bool isAlready=false;
for(int cNowPlant=0;cNowPlant<(int)AddNode->m_PlantKind.size();cNowPlant++)
{
if( AddNode->m_PlantPosX[cNowPlant]==ReadPosX &&
AddNode->m_PlantPosZ[cNowPlant]==ReadPosZ)
{
AddNode->m_PlantKind[cNowPlant]=ReadKind;
AddNode->m_PlantPosX[cNowPlant]=ReadPosX;
AddNode->m_PlantPosZ[cNowPlant]=ReadPosZ;
isAlready=true;
}
}
if(isAlready==false)
{
AddNode->m_PlantKind.push_back(ReadKind);
AddNode->m_PlantPosX.push_back(ReadPosX);
AddNode->m_PlantPosZ.push_back(ReadPosZ);
}
//AddNode->m_vecPlantPos.push_back(ReadPos);
}
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11)
{
delete AddNode;
continue;
}
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_PlantMap.push_back(AddNode);
m_PlantMapTable[iNode] = AddNode;
}
// MeshMap loading
int cSavedMeshData=0;
fread(&cSavedMeshData,sizeof(int),1,fp);
for(int cMeshData=0;cMeshData<cSavedMeshData;cMeshData++)
{
CSectorMeshMap *AddNode=new CSectorMeshMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
int cSavedObject=0;
fread(&cSavedObject,sizeof(int),1,fp);
int ReadObjectSceneID;
matrix ReadMatrixTM;
bool ReadAlpha,ReadLight;
for(int cObject=0;cObject<cSavedObject;cObject++)
{
fread(&ReadObjectSceneID,sizeof(long),1,fp);
char *ReadObjectName=new char[MAX_NAMEBUFFER];
fread(ReadObjectName,sizeof(char)*MAX_NAMEBUFFER,1,fp);
fread(&ReadMatrixTM,sizeof(matrix),1,fp);
fread(&ReadAlpha,sizeof(bool),1,fp);
fread(&ReadLight,sizeof(bool),1,fp);
AddNode->m_ObjectSceneID.push_back(ReadObjectSceneID);
AddNode->m_strObjectName.push_back(ReadObjectName);
AddNode->m_TM.push_back(ReadMatrixTM);
AddNode->m_isAlpha.push_back(true);
AddNode->m_isLight.push_back(true);
}
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11)
{
delete AddNode;
continue;
}
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_MeshMap.push_back(AddNode);
m_MeshMapTable[iNode] = AddNode;
}
int cSavedEffectData=0;
fread(&cSavedEffectData,sizeof(int),1,fp);
for(int cEffectData=0;cEffectData<cSavedEffectData;cEffectData++)
{
CSectorEffectMap *AddNode=new CSectorEffectMap();
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
int nEffect;
fread(&nEffect,sizeof(int),1,fp);
vector3 vecEffectPos;
vector3 vecEffectRot;
char* strEffectName;
for(int cEffect=0;cEffect<nEffect;cEffect++)
{
fread(&vecEffectPos,sizeof(vector3),1,fp);
fread(&vecEffectRot,sizeof(vector3),1,fp);
strEffectName=new char[256];
fread(strEffectName,sizeof(char)*256,1,fp);
AddNode->m_vecEffectPos.push_back(vecEffectPos);
AddNode->m_strEffectName.push_back(strEffectName);
AddNode->m_vecEffectRot.push_back(vecEffectRot);
}
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11)
{
delete AddNode;
continue;
}
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_EffectMap.push_back(AddNode);
m_EffectMapTable[iNode] = AddNode;
}
//landscape effect
int cSaveLandscapeEffectData = 0;
fread((int *)&cSaveLandscapeEffectData,sizeof(int),1,fp);
for(int cLandscape = 0;cLandscape<cSaveLandscapeEffectData;cLandscape++) {
CSectorLandscapeEffectMap *AddNode = new CSectorLandscapeEffectMap();
CSectorLandscapeEffectMap ::LandscapeEffect *tmpLandscape;
fread(&AddNode->m_IndexX,sizeof(int),1,fp);
fread(&AddNode->m_IndexY,sizeof(int),1,fp);
int nLandscapeEffect;
fread(&nLandscapeEffect,sizeof(int),1,fp);
for(int cLEffect =0;cLEffect<nLandscapeEffect;cLEffect++) {
tmpLandscape = new CSectorLandscapeEffectMap ::LandscapeEffect();
fread(&(tmpLandscape->m_nEffectMethod),sizeof(int),1,fp);
fread(&(tmpLandscape->m_vecCenterPos),sizeof(vector3),1,fp);
fread(tmpLandscape->m_Name,sizeof(char)* 50,1,fp);
fread(tmpLandscape->m_Param,sizeof(float)* 50,1,fp);
fread(tmpLandscape->m_IntParam,sizeof(int)* 20,1,fp);
fread(tmpLandscape->m_dwBlend,sizeof(DWORD)*2,1,fp);
AddNode->m_LandscapeEffect.push_back(*tmpLandscape);
delete tmpLandscape;
//AddNode->m_LandscapeEffect.push_back
}
if(AddNode->m_IndexX < 0 || AddNode->m_IndexX > 11 ||
AddNode->m_IndexY < 0 || AddNode->m_IndexY > 11)
{
delete AddNode;
continue;
}
int iNode = AddNode->m_IndexX * 11 + AddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete AddNode;
continue;
}
m_LandscapeEffectMap.push_back(AddNode);
m_LandscapeEffectMapTable[iNode] = AddNode;
}
// Sector Light Load
if(feof(fp) == 0)
{
int iLightMapNum;
fread((int *)&iLightMapNum,sizeof(int),1,fp);
if(iLightMapNum >0 && iLightMapNum < 100)
{
for(int iLightMap = 0; iLightMap < iLightMapNum; iLightMap++)
{
CSectorLightMap *pAddNode = new CSectorLightMap;
fread((int *)&(pAddNode->m_IndexX),sizeof(int),1,fp);
fread((int *)&(pAddNode->m_IndexY),sizeof(int),1,fp);
int iLightNum;
fread((int *)&iLightNum,sizeof(int),1,fp);
for(int iLight = 0; iLight < iLightNum; iLight++)
{
CSectorLight Node;
fread((CSectorLight *)&(Node),sizeof(CSectorLight),1,fp);
pAddNode->m_lstLights.push_back(Node);
}
if(pAddNode->m_IndexX < 0 || pAddNode->m_IndexX > 11 ||
pAddNode->m_IndexY < 0 || pAddNode->m_IndexY > 11)
{
delete pAddNode;
continue;
}
int iNode = pAddNode->m_IndexX * 11 + pAddNode->m_IndexY;
if(iNode < 0 || iNode >= MAXSECTOR)
{
//MessageBox(NULL,"<22><><EFBFBD><EFBFBD>","CMapStorage",MB_OK);
delete pAddNode;
continue;
}
m_LightMap.push_back(pAddNode);
m_LightMapTable[iNode] = pAddNode;
}
}
}
fclose(fp);
BugFix_Tree();
//BugFix_Hangul2English();
//======================
// SoundMap
//======================
CAmbienceManager::_GetInstance()->AllStop();
CAmbienceManager::_GetInstance()->GetAmbienceMap()->DeleteAmbData();
CBgmManager::_GetInstance()->AllStop();
CBgmManager::_GetInstance()->GetBGMTrigger()->DeleteBgmData();
char Temp[MAX_PATH];
char* token = strtok( strFilename, "Z" );
token = strtok( NULL, "." );
if( strcmp(token, "one3") == 0 ) return; //<2F><>Ʋ<EFBFBD>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if( strcmp(token, "one10") == 0 ) return; //<2F><>Ʋ<EFBFBD>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if( strcmp(token, "one11") == 0 ) return; //<2F><>Ʋ<EFBFBD>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if( strcmp(token, "one13") == 0 ) return; //<2F><>Ʋ<EFBFBD>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if( strcmp(token, "one15") == 0 ) return; //ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȭ<EFBFBD><C8AD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if( strcmp(token, "one100") == 0 || strcmp(token, "one14") == 0 ) return; // 100<30><30><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD>
if( strcmp(token, "one16") == 0 ) return;
sprintf( Temp, "%sZ%s.amb", AMBIENCEPATH, token );
// CAmbienceManager::_GetInstance()->AllStop();
CAmbienceManager::_GetInstance()->GetAmbienceMap()->LoadData( Temp );
sprintf( Temp, "%sZ%s.bgm", BGMPATH, token );
// CBgmManager::_GetInstance()->AllStop();
CBgmManager::_GetInstance()->GetBGMTrigger()->LoadData( Temp );
//LoadMapOutHouse();
}
void CMapStorage::DeleteLandscapeEffect(CSectorLandscapeEffectMap* pmap){
int del_map = 0;
for(del_map = 0;del_map < (int)m_LandscapeEffectMap.size();del_map++)
{
if(m_LandscapeEffectMap[del_map] == pmap)
{
m_LandscapeEffectMap.erase(m_LandscapeEffectMap.begin()+del_map);
return;
}
}
}
void CMapStorage::AddLandscapeEffect(float fAddx, float fAddy, float fAddz,int nEffectMethod,DWORD dwBlend[2],float Param[50],int IntParam[20],char *strTextureName,char *eff)
{
/*
*/
int indexx=(int)(fAddx/SECTORSIZE);
int indexy=(int)(fAddz/SECTORSIZE);
bool new_sector = false;
fAddy+=100.0f;
for(int i=0;i<(int)m_LandscapeEffectMap.size();i++)
{
if( m_LandscapeEffectMap[i]->m_IndexX == indexx &&
m_LandscapeEffectMap[i]->m_IndexY == indexy )
{
CSectorLandscapeEffectMap::LandscapeEffect AddEffectNode;
AddEffectNode.m_vecCenterPos=vector3(fAddx,fAddy,fAddz);
AddEffectNode.m_nEffectMethod=nEffectMethod;
AddEffectNode.m_dwBlend[0]=dwBlend[0];
AddEffectNode.m_dwBlend[1]=dwBlend[1];
memcpy(AddEffectNode.m_Param,Param,sizeof(float)*50);
memcpy(AddEffectNode.m_IntParam,IntParam,sizeof(int)*20);
if(strTextureName != NULL)
strncpy(AddEffectNode.m_Name,strTextureName,49);
// strcpy(AddEffectNode.m_EffName,eff);
m_LandscapeEffectMap[i]->m_LandscapeEffect.push_back(AddEffectNode);
new_sector = true;
}
}
if(!new_sector) {
CSectorLandscapeEffectMap *AddLandscapeEffect=new CSectorLandscapeEffectMap();
AddLandscapeEffect->m_IndexX=indexx;
AddLandscapeEffect->m_IndexY=indexy;
CSectorLandscapeEffectMap::LandscapeEffect AddEffectNode;
AddEffectNode.m_vecCenterPos=vector3(fAddx,fAddy,fAddz);
AddEffectNode.m_nEffectMethod=nEffectMethod;
AddEffectNode.m_dwBlend[0]=dwBlend[0];
AddEffectNode.m_dwBlend[1]=dwBlend[1];
memcpy(AddEffectNode.m_Param,Param,sizeof(float)*50);
memcpy(AddEffectNode.m_IntParam,IntParam,sizeof(int)*20);
if(strTextureName != NULL)
strncpy(AddEffectNode.m_Name,strTextureName,49);
// strcpy(AddEffectNode.m_EffName,eff);
AddLandscapeEffect->m_LandscapeEffect.push_back(AddEffectNode);
m_LandscapeEffectMap.push_back(AddLandscapeEffect);
}
}
CSectorLandscapeEffectMap* CMapStorage::FindLandscapeEffect(float fFindx, float fFindy)
{
int indexx=(int)(fFindx/SECTORSIZE);
int indexy=(int)(fFindy/SECTORSIZE);
int iNode = indexx * 11 + indexy;
if(iNode <0 || iNode >= MAXSECTOR)
return NULL;
if(m_LandscapeEffectMapTable[iNode])
{
return m_LandscapeEffectMapTable[iNode];
}
/*
for(int cStorage=0;cStorage<m_LandscapeEffectMap.num;cStorage++)
{
if( m_LandscapeEffectMap[cStorage]->m_IndexX==indexx &&
m_LandscapeEffectMap[cStorage]->m_IndexY==indexy)
{
return m_LandscapeEffectMap[cStorage];
}
}
*/
return NULL;
}