DragonNest/Server/DNVillageServer/DNFieldDataManager.cpp
2024-12-19 09:48:26 +08:00

127 lines
3 KiB
C++

#include "StdAfx.h"
#include "DNFieldDataManager.h"
#include "DNFieldData.h"
#include "Log.h"
CDNFieldDataManager* g_pFieldDataManager;
CDNFieldDataManager::CDNFieldDataManager(void)
{
CEtWorld::SetIgnoreInvalidFile( true );
m_FieldDatas.clear();
}
CDNFieldDataManager::~CDNFieldDataManager(void)
{
m_FieldDatas.clear();
}
CDNFieldData* CDNFieldDataManager::AddFieldData(char *pszMapName, int nMapIndex)
{
CDNFieldData *pFieldData = NULL;
pFieldData = FindFieldData(pszMapName);
if (pFieldData){
g_Log.Log( LogType::_FILELOG, L"MapName:%S AddFieldData Duplicated\r\n", pszMapName);
return pFieldData; // ÀÌ¹Ì ÀÖ´Ù.
}
pFieldData = new CDNFieldData;
if (!pFieldData)
return NULL;
if (!pFieldData->Init(pszMapName, nMapIndex))
{
SAFE_DELETE( pFieldData );
return NULL;
}
m_FieldDatas.insert(make_pair(pszMapName, pFieldData));
return pFieldData;
}
bool CDNFieldDataManager::DelFieldData(char *pszMapName)
{
if (m_FieldDatas.empty()) return false;
TMapFieldDatas::iterator iter = m_FieldDatas.find(pszMapName);
if (iter != m_FieldDatas.end()){
m_FieldDatas.erase(iter);
return true;
}
return false;
}
CDNFieldData* CDNFieldDataManager::FindFieldData(char *pszMapName)
{
if (m_FieldDatas.empty()) return NULL;
TMapFieldDatas::iterator iter = m_FieldDatas.find(pszMapName);
if (iter != m_FieldDatas.end()){
return iter->second;
}
return NULL;
}
CDNFieldData* CDNFieldDataManager::FindFieldDataByMapIndex(int nMapIndex)
{
if (m_FieldDatas.empty()) return NULL;
TMapFieldDatas::iterator iter;
for (iter = m_FieldDatas.begin(); iter != m_FieldDatas.end(); ++iter){
if (iter->second->GetMapIndex() == nMapIndex){
return iter->second;
}
}
return NULL;
}
char CDNFieldDataManager::GetRandomGateNo(int nMapIndex)
{
CDNFieldData *pFieldData = FindFieldDataByMapIndex(nMapIndex);
if (!pFieldData) return -1;
return pFieldData->GetRandomGateNo();
}
int CDNFieldDataManager::CheckGateArea(int nMapIndex, TPosition &Position)
{
CDNFieldData *pFieldData = FindFieldDataByMapIndex(nMapIndex);
if (!pFieldData) return -1;
return pFieldData->CheckGateArea(Position);
}
bool CDNFieldDataManager::GetStartPosition(int nMapIndex, char cGateNo, TPosition &Pos)
{
CDNFieldData *pFieldData = FindFieldDataByMapIndex(nMapIndex);
if (!pFieldData) return false;
return pFieldData->GetStartPosition(cGateNo, Pos);
}
void CDNFieldDataManager::GetRandomStartPosition(int nMapIndex, TPosition &Pos)
{
CDNFieldData *pFieldData = FindFieldDataByMapIndex(nMapIndex);
if (!pFieldData) return;
pFieldData->GetRandomStartPosition(Pos);
}
void CDNFieldDataManager::GetStartPositionAngle( int nMapIndex, char cGateNo, float &fAngle )
{
CDNFieldData *pFieldData = FindFieldDataByMapIndex(nMapIndex);
if (!pFieldData) return;
pFieldData->GetStartPositionAngle(cGateNo, fAngle);
}
int CDNFieldDataManager::GetGateType(int nMapIndex, TPosition &Position)
{
CDNFieldData *pFieldData = FindFieldDataByMapIndex(nMapIndex);
if (!pFieldData) return -1;
return pFieldData->GetGateType(Position);
}