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

📄 objectidmanager.cpp

📁 骨骼动画....把魔兽模型解出的代码..
💻 CPP
字号:
//+-----------------------------------------------------------------------------
//| Included files
//+-----------------------------------------------------------------------------
#include "ObjectIdManager.h"


//+-----------------------------------------------------------------------------
//| Global objects
//+-----------------------------------------------------------------------------
OBJECT_ID_MANAGER ObjectIdManager;


//+-----------------------------------------------------------------------------
//| Constructor
//+-----------------------------------------------------------------------------
OBJECT_ID_MANAGER::OBJECT_ID_MANAGER()
{
	NextObjectId = 0;
}


//+-----------------------------------------------------------------------------
//| Destructor
//+-----------------------------------------------------------------------------
OBJECT_ID_MANAGER::~OBJECT_ID_MANAGER()
{
	ClearAllObjectIds();
}


//+-----------------------------------------------------------------------------
//| Clears all object IDs
//+-----------------------------------------------------------------------------
VOID OBJECT_ID_MANAGER::ClearAllObjectIds()
{
	NextObjectId = 0;
	FreeObjectIdList.clear();
}


//+-----------------------------------------------------------------------------
//| Generates a new object ID
//+-----------------------------------------------------------------------------
INT OBJECT_ID_MANAGER::GetNewObjectId()
{
	INT NewObjectId;
	std::map<INT, INT>::iterator i;

	if(FreeObjectIdList.size() > 0)
	{
		i = FreeObjectIdList.begin();
		NewObjectId = i->first;
		FreeObjectIdList.erase(i);
	}
	else
	{
		NewObjectId = NextObjectId;
		NextObjectId++;
	}

	return NewObjectId;
}


//+-----------------------------------------------------------------------------
//| Adds an existing object ID
//+-----------------------------------------------------------------------------
VOID OBJECT_ID_MANAGER::AddObjectId(INT ObjectId)
{
	INT i;
	std::map<INT, INT>::iterator j;

	j = FreeObjectIdList.find(ObjectId);
	if(j != FreeObjectIdList.end())
	{
		FreeObjectIdList.erase(j);
		return;
	}

	if(ObjectId < NextObjectId) return;

	for(i = NextObjectId; i < ObjectId; i++)
	{
		FreeObjectIdList.insert(std::make_pair(i, i));
	}

	NextObjectId = ObjectId + 1;
}


//+-----------------------------------------------------------------------------
//| Removes an existing object ID
//+-----------------------------------------------------------------------------
VOID OBJECT_ID_MANAGER::RemoveObjectId(INT ObjectId)
{
	INT i;

	if(ObjectId == INVALID_INDEX) return;

	FreeObjectIdList.insert(std::make_pair(ObjectId, ObjectId));

	if(ObjectId < NextObjectId) return;

	for(i = NextObjectId; i < ObjectId; i++)
	{
		FreeObjectIdList.insert(std::make_pair(i, i));
	}
}


//+-----------------------------------------------------------------------------
//| Checks if an object ID exists
//+-----------------------------------------------------------------------------
BOOL OBJECT_ID_MANAGER::ValidObjectId(INT ObjectId) CONST
{
	std::map<INT, INT>::const_iterator i;

	if(ObjectId >= NextObjectId) return FALSE;

	i = FreeObjectIdList.find(ObjectId);
	if(i != FreeObjectIdList.end()) return FALSE;

	return TRUE;
}

⌨️ 快捷键说明

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