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

📄 actormanager.h

📁 大型3D游戏设计制作详析及源代码对于想了解游戏设计的程序来说
💻 H
字号:
/********************************************************************
	created:	2004/06/24
	created:	23:55
	filename: 	d:\Works\GameLib_sdk\ActorManager.h
	file path:	d:\Works\GameLib_sdk
	file base:	ActorManager
	file ext:	h
	author:		lazybug
	
	purpose:	人物管理器类的定义
*********************************************************************/


#pragma once
#include "./stdafx.h"
#include "GameObj.h"
#include <functional>

class CGameLogic ;

/*
 *	人物管理器,管理游戏中所有的人物和简单物品
 */
class CActorManager
{
public:
	/*
	 *	构造函数
	 *  参数:
	 *  context		- 环境变量,LogicEngine对象的指针,用于互操作
	 */
	CActorManager( CGameLogic* context );

	/*
	 *	析构函数,销毁所有的人物和简单物品
	 */
	~CActorManager(void);

	/*
	 *	创建默认人物和简单物品
	 */
	void CreateActors() ;

   /*
	*	 取某个人物的引用
	*    参数:
	*    name	- 人物名
	*    返回值:
	*    对应人物的引用,如果人物不存在,抛出std标准异常
	*/
	CPlayer&	GetActor(const std::string& name ) ;

	/*
	 *	取简单物品的引用,参见CActorManager::GetActor
	 */
	CSimpleObj& GetSimpleObj(const std::string& name) ;

	/*
	 *	取当前用户控制的人物的引用
	 *  返回值:
	 *  返回引用,如果没有用户控制的人物,抛出std标准异常
	 */
	CPlayer&	GetActiveActor() ;

	/*
	 *	对人物根据Y坐标排序,用于画图的覆盖
	 */
	void SortActors() ;

	/*
	 *	枚举人物
	 *  返回值:
	 *  依次返回游戏中所有人物对象的指针,如果枚举结束,返回NULL
	 */
	CPlayer*	enumActor() ;

	/*
	 *	枚举状态压栈,嵌套调用枚举时使用
	 */
	void	push_enum_state() ;
	/*
	 *	枚举状态出栈,嵌套调用结束时使用
	 */
	void	pop_enum_state() ;

	/*
	 *	关闭场景里的所有人物
	 */
	void	DisableAllActors() ;

	/*
	 *	设定用户控制的人物
	 *  参数:
	 *  name	- 人物名
	 */
	void	SetActiveActor( const std::string& name ) ;

	/*
	 *	刷新用户关注的npc
	 */
	void	RefreshUserAttention() ;

	/*
	 *	返回用户关注的npc
	 *  返回值:
	 *  用户关注的npc人物对象的指针,如果没有,则返回NULL
	 */
	CPlayer* GetUserAttention() ;

private:
	/* 简单物品列表,比如萝卜*/
	std::vector< std::pair<std::string, CSimpleObj*> >			m_simple_data ;

	/* 人物列表 */
	std::vector< std::pair<std::string, CPlayer*> >				m_enum_data ;

	/* 枚举人物列表的指针 */
	std::vector< std::pair<std::string, CPlayer*> >::iterator	m_enum_pos ;  

	/* 嵌套枚举的保存栈 */
	std::list< std::vector< std::pair<std::string, CPlayer*> >::iterator > m_enum_stack ;

	/* 用户控制的人物 */
	CPlayer*	m_activePlayer ;

	/* 用户所关注的npc的指针,可以引发调查菜单 */
	CPlayer*	m_user_attention_player ;

	/* 环境变量 */
	CGameLogic*	m_context ;
};
/*
 *	函数对象,用于人物对象的Y坐标比较
 */struct BaseYcomp{	/*
	 *	函数对象()重载,比较CPlayer的Y坐标
	 */	bool operator()(const std::pair<std::string, CPlayer*>& a, const std::pair<std::string, CPlayer*>& b) const 	{ 		return ( ((a.second)->y) < ((b.second)->y) ) ;	}};

⌨️ 快捷键说明

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