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

📄 objectgroupmanager.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
字号:
#include "StdAfx.h"
#include "ObjectGroup.h"
#include "ObjectGroupManager.h"
#include "GroupParser.h"


ObjectGroupManager::ObjectGroupManager()
{
	m_pGroupPool = new CMemoryPoolFactory<ObjectGroup>;
	m_pGroupList = new util::SolarHashTable<ObjectGroup *, DWORD64>;
}


ObjectGroupManager::~ObjectGroupManager()
{
	SAFE_DELETE( m_pGroupPool );
	SAFE_DELETE( m_pGroupList );
}


VOID ObjectGroupManager::Release()
{
	if( m_pGroupPool )
	{
		m_pGroupPool->Release();
	}
}

VOID ObjectGroupManager::Init( DWORD dwMaxPoolSize )
{
	m_pGroupPool->Initialize( dwMaxPoolSize, dwMaxPoolSize/2+1 );
	m_pGroupList->Initialize( dwMaxPoolSize );
}

ObjectGroup* ObjectGroupManager::AllocGroup( DWORD dwAreaID, DWORD dwGroupID )
{
	// Group Key 积己
	DWORD64 dw64Key;
	memcpy( &dw64Key, &dwAreaID, sizeof(DWORD) );		dw64Key <<= 32;
	memcpy( &dw64Key, &dwGroupID, sizeof(DWORD) );

	// 捞固 鞍篮 Key狼 Group捞 粮犁窍绰瘤 八荤
	ObjectGroup *pObjectGroup = FindGroup( dw64Key );
	if( pObjectGroup )
	{
		return pObjectGroup;
	}

	// 秦寸窍绰 弊缝捞 绝栏搁 货肺积己
	pObjectGroup = (ObjectGroup*)m_pGroupPool->Alloc();
	
	if( !pObjectGroup )
	{
		SUNLOG( eCRITICAL_LOG,  "[ObjectGroupManager::AllocGroup] Can't Allocate ObjectGroup " );
		return NULL;
	}

	// ObjectGroup 檬扁拳
	BASE_GROUPINFO* pBaseGroupInfo = GroupParser::Instance()->GetGroupInfo( dwGroupID );
	if( !pBaseGroupInfo ) 
	{
		SUNLOG( eFULL_LOG,  "[ObjectGroupManager::GetGroupInfo] Can't Get ObjectGroup %u", dwGroupID );
		ASSERT( pBaseGroupInfo && "[ObjectGroupManager::GetGroupInfo] Can't Get ObjectGroup" );
		return NULL;
	}
	pObjectGroup->Init( pBaseGroupInfo, dw64Key );

	// Group Manager俊 殿废
	if( m_pGroupList->Add( pObjectGroup, dw64Key ) )
	{
		return pObjectGroup;
	}
	else
	{
		SUNLOG( eCRITICAL_LOG,  "[ObjectGroupManager::AllocGroup] AddGroup Fail! " );
		m_pGroupPool->Free( pObjectGroup );
		return NULL;
	}
}

BOOL ObjectGroupManager::RemoveGroup( ObjectGroup *pGroup )
{
	if( NULL == m_pGroupList->GetData( pGroup->GetGroupKey() ) )
	{
		SUNLOG( eMIDDLE_LOG,  "[ObjectGroupManager::RemoveGroup] Can't Remove Group  " );
		return FALSE;
	}

	m_pGroupList->Remove( pGroup->GetGroupKey() );
	m_pGroupPool->Free( pGroup );

	return TRUE;
}

ObjectGroup* ObjectGroupManager::FindGroup( DWORD dwAreaID, DWORD dwGroupID )
{
	// Group Key 积己
	DWORD64 dw64Key;
	memcpy( &dw64Key, &dwAreaID, sizeof(DWORD) );		dw64Key <<= 32;
	memcpy( &dw64Key, &dwGroupID, sizeof(DWORD) );

	return m_pGroupList->GetData( dw64Key );
}















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -