nodemanager.cpp

来自「3D游戏展示程序」· C++ 代码 · 共 93 行

CPP
93
字号
//--------------------------------------------------
//  Desc: 节点指针管理
//  Author: artsylee/2007.3.22
//--------------------------------------------------

#include "NodeManager.h"
#include "GNode.h"

//--------------------------------------------------
// 关于节点指针管理
// 1, 为了在游戏中能调出控制台动态调整指定节点属性, 
//    需要保存游戏中所有的节点指针.
// 2, 指针的获取在节点GNode的构造函数中.
// 3, 指针的消失在节点GNode的析构函数中.
// 4, 指针有栈指针和堆指针, 此类不负责申请和释放, 只
//    是记录当前会用到的节点.
//--------------------------------------------------

CNodeManager::CNodeManager()
{
	m_NodeVec.clear();
}

CNodeManager::~CNodeManager()
{
	m_NodeVec.clear();
}

void CNodeManager::AddNode(GNode* pNode)
{
	std::vector<GNode*>::iterator itor = m_NodeVec.begin();
	while(itor != m_NodeVec.end())
	{
		if(*itor == pNode)
			return;
		itor++;
	}
	m_NodeVec.push_back(pNode);
}

void CNodeManager::RemoveNode(GNode* pNode)
{
	std::vector<GNode*>::iterator itor = m_NodeVec.begin();
	while(itor != m_NodeVec.end())
	{
		if(*itor == pNode)
		{
			m_NodeVec.erase(itor);
			return;
		}
		itor++;
	}
}

void CNodeManager::RemoveAll(void)
{
	m_NodeVec.clear();
}

GNode* CNodeManager::GetNode(char *pName)
{
	_strlwr(pName);
	std::vector<GNode*>::iterator itor = m_NodeVec.begin();
	while(itor != m_NodeVec.end())
	{
		char szName[256];
		(*itor)->GetName(szName);
		_strlwr(szName);
		if(strcmp(szName, pName)==0)
		{
			return (*itor);
		}
		itor++;
	}
	return NULL;
}

GNode* CNodeManager::GetNodeByPos(int pos)
{
	std::vector<GNode*>::iterator itor = m_NodeVec.begin()+pos;
	if(itor != m_NodeVec.end())
	{
		return (*itor);
	}
	else
		return NULL;
}


size_t CNodeManager::GetSize(void)
{
	return m_NodeVec.size();
}

⌨️ 快捷键说明

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