⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 viewportmanager.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -