📄 viewportmanager.cpp
字号:
#endif
m_hDll3DTerrain = Load3DTerrainLibrary( lpszDLL, &m_fnContactTerrain);
if ( !m_hDll3DTerrain)
{
MessageOut( eCRITICAL_LOG, "dll loading failed.\n" );
return FALSE;
}
*/
// 甘 沥焊 肺靛
MapInfoParser *pParser = MapInfoParser::Instance();
// pParser->Init( 100 );
// pParser->Load( "data\\",
// "World.txt", "Field.txt" );
// 付阑 甘牢 版快父 角力肺 佬绰促
sMAPINFO *pMapInfo = NULL;
FieldInfo *pFieldInfo = NULL;
MAPINFO_HASH& HashMap = pParser->GetMapInfoHash();
if( HashMap.GetDataNum() == 0 )
{
MessageOut( eCRITICAL_LOG, "MapInfoParser Error - No Data" );
return FALSE;
}
MAPINFO_HASH_ITR iter;
for( iter = HashMap.begin(); iter != HashMap.end(); iter++ )
{
// MapInfoLoader *pMapInfoLoader = new MapInfoLoader;
pMapInfo = *iter;
if( pMapInfo->byMKind == eZONETYPE_VILLAGE )
{
// 甘 佬绢~!
MapInfo *pVillageInfo = new MapInfo;
pVillageInfo->SetMapInfo(pMapInfo);
// pMapInfoLoader->GetMapInfo(pMapInfo->MapCode);
for(int i=0;i<sMAPINFO::MAX_FIELD_NUM;++i)
{
if( 0 != pMapInfo->FCode[i])
{
pFieldInfo = new FieldInfo;
pFieldInfo->Create( MapInfoParser::Instance()->GetFieldInfo( pMapInfo->FCode[i] ) );
pFieldInfo->Load();
pFieldInfo->EstablishSectorInfo( VILLAGE_SECTOR_SIZE, TRUE );
//捞 鞘靛 沥焊甫 历厘
ChatField *pChatField = m_pChatFieldPool->Alloc();
pChatField->Init(pFieldInfo);
m_mapChatField.insert( FIELDINFO_MAP_PAIR(pFieldInfo->GetFieldCode(), pChatField) );
MessageOut( eCRITICAL_LOG, "FieldInfo[%u] Add Completed", pFieldInfo->GetFieldCode() );
// 历厘 场唱搁 开规氢栏肺 促矫 皋葛府 昏力
// pFieldInfo->Destroy();
// delete pFieldInfo;
}
}
delete pVillageInfo;
}
}
return TRUE;
}
VOID ViewPortManager::Release()
{
FIELDINFO_MAP_ITER iter;
ChatField *pChatField;
while(!m_mapChatField.empty())
{
iter = m_mapChatField.begin();
pChatField = (*iter).second;
m_pChatFieldPool->Free(pChatField);
m_mapChatField.erase(iter);
}
m_pChatFieldPool->Release();
// delete m_pChatFieldPool;
// MapInfoParser *pParser = MapInfoParser::Instance();
// pParser->Release();
// MapInfoParser::DestroyInstance();
}
BOOL ViewPortManager::AddUser( User *pUser, DWORD dwField, DWORD dwSector )
{
// 秦寸窍绰 鞘靛 茫酒辑 持绰促
FIELDINFO_MAP_ITER iter = m_mapChatField.find( dwField );
if( iter == m_mapChatField.end() )
{
// 捞 版快绰 付阑捞 酒囱 镑俊辑 焊陈芭唱 肋给等 沥焊
MessageOut( eCRITICAL_LOG, "ViewPort AddUser Error - No Village Field!![Guid:%u][CharGuid:%u][Field:%u][Sector:%u]",
pUser->GetGUID(), pUser->GetCharGuid(), dwField, dwSector );
return FALSE;
}
ChatField *pChatField = (*iter).second;
return pChatField->AddUser( pUser, dwSector );
}
BOOL ViewPortManager::MoveUser( User *pUser, DWORD dwField, DWORD dwSector )
{
FIELDINFO_MAP_ITER iter = m_mapChatField.find( dwField );
if( iter == m_mapChatField.end() )
{
MessageOut(eCRITICAL_LOG, "ViewPortManager MoveUser Error - No Field %u", dwField );
return FALSE;
}
ChatField *pChatField = (*iter).second;
if( pUser->GetFieldCode() != dwField )
{
// 鞘靛 掳肺 捞悼窍绰 巴捞骨肺 捞傈 鞘靛俊辑 瘤况霖促
RemoveUser( pUser );
}
return pChatField->MoveViewPort( pUser, dwField, dwSector );
}
VOID ViewPortManager::RemoveUser( User *pUser )
{
// 捞 蜡历啊 绢恫 鞘靛俊 乐绰绊?
if(!pUser)
{
MessageOut(eCRITICAL_LOG, "ViewPortManager Release User Error - No User" );
return;
}
FIELDINFO_MAP_ITER iter = m_mapChatField.find( pUser->GetFieldCode() );
ChatField *pChatField;
if(iter == m_mapChatField.end())
{
// MessageOut( eCRITICAL_LOG, "ViewPortManager Release User Error - No User %s[%u]", pUser->GetCharName().c_str(), pUser->GetFieldCode() );
return;
}
MessageOut( eFULL_LOG, "ViewPortManager Remove User %s[Guid:%u][F:%u]", pUser->GetCharName().c_str(), pUser->GetGUID(),
pUser->GetFieldCode() );
pChatField = (*iter).second;
pChatField->RemoveUser( pUser );
}
// 秦寸 蜡历狼 轰器飘 茫酒辑 焊辰促
BOOL ViewPortManager::SendViewPort( User *pUser, BYTE *pMsg, WORD wSize )
{
FIELDINFO_MAP_ITER iter = m_mapChatField.find( pUser->GetFieldCode() );
if(iter == m_mapChatField.end())
{
MessageOut(eCRITICAL_LOG, "SendViewPort Error[%s] - No Field %u", pUser->GetCharName().c_str(), pUser->GetFieldCode() );
return FALSE;
}
ChatField *pChatField = (*iter).second;
if( !pChatField )
{
MessageOut(eCRITICAL_LOG, "SendViewPort Error[%s] - No ChatField[Field:%u]", pUser->GetCharName().c_str(), pUser->GetFieldCode() );
return FALSE;
}
return pChatField->SendToNeighbors( pUser->GetSectorIndex(), pMsg, wSize );
}
BOOL ViewPortManager::SendToAll( DWORD dwFieldCode, BYTE *pMsg, WORD wSize )
{
FIELDINFO_MAP_ITER iter = m_mapChatField.find( dwFieldCode );
if(iter == m_mapChatField.end())
{
MessageOut(eCRITICAL_LOG, "ViewPort SendToAll Error - No Field %u", dwFieldCode );
return FALSE;
}
ChatField *pChatField = (*iter).second;
if( !pChatField )
{
MessageOut(eCRITICAL_LOG, "ViewPort SendToAll Error - No ChatField[Field:%u]", dwFieldCode );
return FALSE;
}
return pChatField->SendToAll( pMsg, wSize );
}
/*
ViewPortManager::ViewPortManager(void)
{
}
ViewPortManager::~ViewPortManager(void)
{
assert( m_pViewPortPool == NULL );
}
VOID ViewPortManager::Init( DWORD dwIndex, DWORD dwTotalSectorNum )
{
m_pViewPortPool = new CMemoryPoolFactory<Zone>;
m_pViewPortPool->Initialize( 5000, 150 );
}
BOOL ViewPortManager::TestLoadMap()
{
// 甘 肺爹 傈 券版 汲沥
#ifndef _DEBUG
// DLL 肺爹
char *lpszDLL = "3DTerrain_s.dll";
#else
// DLL 肺爹
char *lpszDLL = "3DTerrain_sd.dll";
#endif
m_hDll3DTerrain = Load3DTerrainLibrary( lpszDLL, &m_fnContactTerrain);
if ( !m_hDll3DTerrain)
{
MessageOut( eCRITICAL_LOG, "dll loading failed.\n" );
return FALSE;
}
// 甘 沥焊 肺靛
MapInfoParser *pParser = MapInfoParser::Instance();
pParser->Init( 100 );
pParser->Load( "data\\",
"World.txt", "Field.txt" );
// 付阑 甘牢 版快父 角力肺 佬绰促
sMAPINFO *pMapInfo = NULL;
FieldInfo *pFieldInfo = NULL;
DWORD dwSectorXNum, dwSectorYNum, dwSectorTotalNum;
pParser->SetFirst();
while( (pMapInfo = pParser->GetNext()) != NULL )
{
// MapInfoLoader *pMapInfoLoader = new MapInfoLoader;
if( pMapInfo->byMKind == eZONETYPE_VILLAGE )
{
// 甘 佬绢~!
MapInfo *pVillageInfo = new MapInfo;
pVillageInfo->SetMapInfo(pMapInfo);
// pMapInfoLoader->GetMapInfo(pMapInfo->MapCode);
// 绢瞒乔 付阑篮 鞘靛 窍唱 挥捞瘤父 趣矫唱 隔扼辑
for(int i=0;i<sMAPINFO::MAX_FIELD_NUM;++i)
{
if( 0 != pMapInfo->FCode[i])
{
pFieldInfo = new FieldInfo;
pFieldInfo->Create( MapInfoParser::Instance()->GetFieldInfo( pMapInfo->FCode[i] ) );
pFieldInfo->Load();
pFieldInfo->EstablishSectorInfo( VILLAGE_SECTOR_SIZE, TRUE );
dwSectorXNum = pFieldInfo->GetSectorXNum(); // 冀磐狼 啊肺 俺荐
dwSectorYNum = pFieldInfo->GetSectorYNum(); // 冀磐狼 技肺 俺荐
dwSectorTotalNum = pFieldInfo->GetTotalSectorNum(); // 傈眉 冀磐 俺荐
// 捞巴栏肺 捞 鞘靛狼 沥焊 肯己! 捞力 历厘茄促!!
// 捞吧 粮栏肺 且 荐啊 绝匙-_-;
// 历厘 场唱搁 开规氢栏肺 促矫 皋葛府 昏力
pFieldInfo->Destroy();
delete pFieldInfo;
}
}
delete pVillageInfo;
}
}
return TRUE;
}
VOID ViewPortManager::Release()
{
ZONE_MAP_ITER it;
Zone *pZone;
ZONE_MAP mapClone = m_mapViewPort;
for( it = mapClone.begin(); it != mapClone.end(); ++it )
{
pZone = it->second;
RemoveViewPort( pChannel->GetChannelID() );
}
mapClone.clear();
}
VOID ViewPortManager::Update()
{
}
Channel* ViewPortManager::AllocChannel()
{
Channel *pChannel = m_pChannelPool->Alloc();
pChannel->Init();
return pChannel;
}
VOID ViewPortManager::FreeViewPort( Zone *pZone )
{
pZone->Release();
m_pViewPortPool->Free( pZone );
}
VOID ViewPortManager::AddChannel( DWORD dwChannelID )
{
ZONE_MAP_ITER it = m_mapChannels.find( dwChannelID );
assert( it == m_mapChannels.end() );
Channel *pChannel = AllocChannel();
pChannel->SetChannelID( dwChannelID );
m_mapChannels.insert( ZONE_MAP_PAIR( dwChannelID, pChannel ) );
MessageOut(eCRITICAL_LOG, "盲澄(%d) 眠啊", dwChannelID );
}
VOID ViewPortManager::RemoveViewPort( DWORD dwZoneID )
{
ZONE_MAP_ITER it = m_mapViewPort.find( dwZoneID );
ViewPort *pZone;
if( it != m_mapViewPort.end() )
{
pChannel = it->second;
m_mapChannels.erase( it );
FreeViewPort( pZone );
}
}
Zone* ViewPortManager::GetViewPort( DWORD dwZoneID )
{
ZONE_MAP_ITER it = m_mapViewPort.find( dwZoneID );
if( it == m_mapViewPort.end() )
{
return NULL;
}
else
{
return it->second;
}
}
VOID ViewPortManager::SendToNeighbors( BYTE *pMsg, WORD wSize )
{
ZONE_MAP_ITER it;
Zone *pZone;
for( it = m_mapViewPort.begin(); it != m_mapViewPort.end(); ++it )
{
pZone = it->second;
pZone->SendToAll( pMsg, wSize );
}
}
VOID ViewPortManager::SendToBattleZones( BYTE *pMsg, WORD wSize )
{
ZONE_MAP_ITER it;
Channel *pChannel;
for( it = m_mapChannels.begin(); it != m_mapChannels.end(); ++it )
{
pChannel = it->second;
pChannel->SendToBattleZones( pMsg, wSize );
}
}
VOID ViewPortManager::DisplayChannelInfo()
{
ZONE_MAP_ITER it;
Channel *pChannel;
if( m_mapChannels.empty() )
{
MessageOut(eCRITICAL_LOG, "劝己拳等 盲澄捞 绝嚼聪促." );
return;
}
for( it = m_mapChannels.begin(); it != m_mapChannels.end(); ++it )
{
pChannel = it->second;
pChannel->DisplayInfo();
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -