📄 gdialog.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 + -