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

📄 gdialog.h

📁 五行MMORPG引擎系统V1.0
💻 H
字号:
//GDialog.h
/*/////////////////////////////////////////////////////////////////
对话管理


   李亦
	liease@163.com 4040719
	2006-7-13
/*/////////////////////////////////////////////////////////////////
#ifndef _RPG__GDIALOG_H_
#define _RPG__GDIALOG_H_

//#ifndef _TOBJDICTIONARY_H_
//#include "rpg/core/tObjDictionary.h"
//#endif

#ifndef _RPG__RPGDEFINE_H_
#include "rpg/RPGDefine.h"
#endif

#ifndef _RPG__GIDOBJECT_H_
#include "GIDObject.h"
#endif

#ifndef _RPG__GOBJECT_H_
#include "GObject.h"
#endif

#ifndef _RPG__GEFFICACY_H_
#include "GEfficacy.h"
#endif



//#ifndef _RPGSETTING_H_
//#include "rpg/RPGSetting.h"
//#endif


namespace RPG
{
typedef	const char*		DSTR;

class		GCharacter;
class		GEfficacy;
struct	tagGDlgPiece;
struct	tagGDlgAnswer;




//#define DECLARE_GDIALOG_ID(CLASS,TYPE)\
//protected:\
//	OBJDictionary<G##TYPE>		m_dict##TYPE##s;\
//public:\
//	G##TYPE*	New##TYPE()	{return m_dict##TYPE##s.New();}\
//	G##TYPE*	Insert##TYPE(U32 dwID)	{return m_dict##TYPE##s.Insert(dwID);}\
//	G##TYPE*	Reg##TYPE(U32 dwID)		{return m_dict##TYPE##s.Reg(dwID);}\
//	void		Unreg##TYPE(U32 dwID)	{m_dict##TYPE##s.Unreg(dwID);	}\
//	G##TYPE*	Get##TYPE(U32 dwID)		{return m_dict##TYPE##s.Get(dwID);}\
//	void		Remove##TYPE(G##TYPE* pObject){m_dict##TYPE##s.Remove(pObject);}
//
//
//
//#define INIT_GDIALOG(CLASS,TYPE,SIZE)	m_dict##TYPE##s(SIZE)
//#define IMPLEMENT_GDIALOG(CLASS,TYPE)





/////////////////////////////////////////////////////////////////
//DlgAnswer封装管理
typedef struct tagGDlgAnswer
{
	U32		dwType;	//类型
	DSTR		sContent;//内容
}GDLGANSWER;


class GDlgAnswer : public GIDObject
{
	friend class RPGDatabase;
	//friend class GDialog;
	//friend class RPGDialog;
	friend class GDlgPiece;
protected:
	GEfficacy*	m_pCmd;
	GDLGANSWER	m_data;
public:
	GDlgAnswer();

	inline bool ExecuteCmd(GCharacter* pChar)
	{
		if(!m_pCmd) return false;
		return m_pCmd->ApplyTo(pChar);
	}
	inline CSTR GetCmdEffText(GCharacter* pChar)
	{
		if(!m_pCmd) return "";
		return m_pCmd->GetEfficacyText(pChar);
	}


#define DECLARE_DLGANSWER_PRY(Name,NAME)\
	inline BOOL Is##Name(){return m_data.dwType & GDAT_##NAME;}

	DECLARE_DLGANSWER_PRY(Normal,NORMAL);
	DECLARE_DLGANSWER_PRY(End,END);
	DECLARE_DLGANSWER_PRY(Abort,ABORT);
	DECLARE_DLGANSWER_PRY(Yes,YES);
	DECLARE_DLGANSWER_PRY(No,NO);
};


/////////////////////////////////////////////////////////////////
//对话片段封装管理
typedef struct tagGDlgPiece
{
	//U32			dwID;
	EGDlgPieceTypes	dwType;	//类型
	DSTR					sContent;//内容

}GDLGPIECE;


class GDlgPiece : public GIDObject
{
	friend class RPGDatabase;
	friend class GDialog;
	friend class RPGDialog;
protected:
	GDLGPIECE		m_data;
	GEfficacy*		m_pCmd;
	GDlgAnswer*		m_arAnswers[GDLG_ANSWER_NUM];
	GDlgPiece*		m_arNexts[GDLG_ANSWER_NUM];
	GDlgPiece*		m_arNext2s[GDLG_ANSWER_NUM];

public:
	GDlgPiece();

	void	ToggleDlgPiece();
	DSTR	GetAnswerText(U32 nIndex);

	GDlgAnswer*	GetAnswer(U32 nIndex);
	bool ExecuteCmd(GCharacter* pChar);
	CSTR GetCmdEffText(GCharacter* pChar);


	inline const BOOL IsTaskRun()	const{return m_data.dwType&GDPT_TASKRUN;}
	inline const BOOL IsEntry()	const{return m_data.dwType&GDPT_ENTRY;}
};//GDlgPiece




/////////////////////////////////////////////////////////////////
/// 对话封装
typedef struct tagGDialog
{
	//U32			dwID;			//编号
	S32			nPriority;	//优先级数值,默认为0
	//UGDlgPiece	unDlgPiece;	//对话片段
	DSTR			sName;		//名称
	DSTR			sDesc;		//描述
}GDIALOG;



//////////////////////////////////////////
//对话
class GDialog: public GObject
{
	typedef  GObject Parent;
	friend class RPGDatabase;
protected:
	enum GDialogConstants
	{
		HASKSIZE = 8,
	};
	GDIALOG			m_data;
	GEfficacy*		m_pRequire;
	GDlgPiece*		m_pDlgPiece;
	//GDlgPiece*		m_pCurPiece;

	//DECLARE_GDIALOG_ID(GDialog, DlgPiece);
	//DECLARE_GDIALOG_ID(GDialog, DlgAnswer);
public:
	//构造/析构函数
	GDialog();
	~GDialog();

public:
	inline const S32	GetPriority() const{return m_data.nPriority;}
	inline const DSTR GetDlgName()  const{return m_data.sName;}
	inline const DSTR GetDlgDesc()  const{return m_data.sDesc;}

	inline GDlgPiece* GetDlgEntry(){return m_pDlgPiece;}
	inline void SetDlgEntry(GDlgPiece* pEntry){m_pDlgPiece = pEntry;}

	BOOL IsFitRequire(GCharacter* pChar);
	DSTR GetAnswerText(U32 dwPieceID, U32 nIndex);
	void ToggleDlgPiece(U32 dwPieceID);

	GDlgPiece* GetNextDlgPiece(GDlgPiece* pPiece,U32 nIndex,GCharacter* pChar);

public:

public:
	static void initPersistFields();
	//static void consoleInit();

	DECLARE_CONOBJECT(GDialog);
};//class GDialog
//////////////////////////////////////////////////////////////////////////////
extern GDialog*	g_pGDialog;




//////////////////////////////////////////////////////////////////////////////
inline GDlgAnswer*	GDlgPiece::GetAnswer(U32 nIndex)
{
	if(nIndex >= GDLG_ANSWER_NUM) return NULL;
	return m_arAnswers[nIndex];
}

inline bool GDlgPiece::ExecuteCmd(GCharacter* pChar)
{
	if(!m_pCmd) return true;
	return m_pCmd->ApplyTo(pChar);
}

inline CSTR GDlgPiece::GetCmdEffText(GCharacter* pChar)
{
	if(!m_pCmd) return "";
	return m_pCmd->GetEfficacyText(pChar);
}



//////////////////////////////////////////////////////////////////////////////
inline BOOL GDialog::IsFitRequire(GCharacter* pChar)	
{
	if(!m_pRequire) 
		return TRUE;
	return m_pRequire->CheckRequire(pChar); 
}


};//namespace RPG
#endif //_GGOODS_H_

⌨️ 快捷键说明

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