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

📄 factset.h

📁 网络游戏魔域的服务端与客户端完整源代码 包括详细的说明文档与开发日志
💻 H
字号:
// FactSet.h: interface for the CFactSet class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_FACTSET_H__C444973E_E282_4312_81CF_A23CFDA0660B__INCLUDED_)
#define AFX_FACTSET_H__C444973E_E282_4312_81CF_A23CFDA0660B__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "mycom.h"
#include "T_SingleMap.h"
#include "GameObjSet.h"
#include "VarType.h"
#include "I_AiCenter.h"	// Added by ClassView
#include "TickOver.h"
#include "autoptr.h"
#include "myheap.h"
#include "basetype.h"
#include "Fact.h"
#include "t_myqueue.h"

//////////////////////////////////////////////////////////////////////
enum FACTDATA{
		FACTDATA_ID_,
		FACTDATA_OWNERID,
		FACTDATA_FACT,
		FACTDATA_PRIORITY,
		FACTDATA_DATETIME,
		FACTDATA_DURABLE,
};

//////////////////////////////////////////////////////////////////////
class IDatabase;
class CSymbolTable;
class CFactObj
{
	COM_STYLE(CFactObj)
public:
	CFactObj()	{}
	MYHEAP_DECLARATION(s_heap)
public:
	bool		Create(CSymbolTable* pSymbolTable, OBJID id, OBJID idRecord, StringRef strFact, int nPriority, DWORD dwDateTime, int nDurable);
	bool		Create(CSymbolTable* pSymbolTable, OBJID id, StringRef strFact, int nPriority, int nNow, int nDurable, CFact* pModelFact);		// return pModelFact
	bool		Create(CSymbolTable* pSymbolTable, OBJID id, CFactRef cFact, int nPriority, int nNow, int nDurable);

public: // interface
	OBJID		GetID()				{ return m_id; }

public: // const
	OBJID		GetRecordID()		{ return m_idRecord; }
	OBJID		GetType()			const	{ return m_cFact.GetType(); }
	VarTypeSetRef	GetParamSet()	const	{ return m_cFact.GetParamSet(); }
	int			GetPriority()		{ return m_nPriority; }
	DWORD		GetDateTime()		{ return m_tDurable.GetBegin(); }

	void		GetFactString(String& strFact, CSymbolTable* pSymbolTable);
	bool		IsLikeModel(CFactRef cModelFact);
	bool		IsDirty()			{ return m_bDirty; }
	bool		IsAlive(int nNow)	{ return m_tDurable.GetDurable(nNow) > 0; }
	bool		IsLogicNot()		{ return m_cFact.IsLogicNot(); }
	CFactRef	QueryFact()			{ return m_cFact; }
	bool		IsValid();

public: // modify
	void		SetRecordID(OBJID id)		{ ASSERT(m_idRecord == ID_NONE); m_idRecord = id; }

public: // dump
	String		Dump()	const		{
										String	str("CFactObj:");
										str += ::DumpString(m_cFact);
										str	+= " life:";
										str += String().FormatLong(m_tDurable.GetEnd());

										return str;
									}


protected:
	OBJID		m_id;				// serial
	OBJID		m_idRecord;
	bool		m_bDirty;

//	bool		m_bLogicNot;
//	OBJID		m_idType;
//	VarTypeSet	m_setParam;
	CFact		m_cFact;

	int			m_nPriority;
	CTickOver	m_tDurable;
};
template<>
struct dump_traits<CFactObj> { static String Dump(const T& obj)		{ return obj.Dump(); } };


//////////////////////////////////////////////////////////////////////
class IDatabase;
class CAiCenter;
class CFactSet  
{
	COM_STYLE(CFactSet)
protected:
	CFactSet();
	/*virtual*/ ~CFactSet();

public: // construct
	bool	Create(CAiCenter* pOwner, IDatabase* pDb, int nNow);
	bool	Persistent(IDatabase *pDb, int nNow);

public:
//	bool	AddFact(CFactRef cFact, int nPriority, int nNow, int nDurable);
	bool	AddFact(StringRef strFact, int nPriority, int nNow, int nDurable);
protected:
	void	ClearAlikeFact(CFactRef cModelFact);
	bool	AddFact(OBJID idRecord, StringRef strFact, int nPriority, DWORD dwDateTime, int nDurable);

public: // queue
	bool	AddFactQueue(CFactRef cFact, int nPriority, int nNow, int nDurable);
	void	CombineQueue();

public: // const
	CSymbolTable*	QuerySymbolTable();

public: // traversal
	typedef		CSingleMap<CFactObj>	FACT_SET;
	typedef		FACT_SET::Iterator		Iterator;
	Iterator	NewEnum		() 						{ return m_setFact->NewEnum(); }
	int			Size		() const				{ return m_setFact->Size(); }
	void		DelObj		(Iterator& iter)		{ m_setFact->DelObj(iter); }
protected:
	CAiCenter*		m_pOwner;
	CAutoPtr<FACT_SET>		m_setFact;

protected: // add fact queue
//	typedef		CMyQueue<CFactObj*>	FACT_QUEUE;
//	FACT_QUEUE	m_setFactQueue;

public:
	OBJID		SpawnFactID()						{ ++m_idLast; ASSERT(m_idLast != ID_NONE); return m_idLast; }

private: // id generator
	OBJID	m_idLast;
};

#endif // !defined(AFX_FACTSET_H__C444973E_E282_4312_81CF_A23CFDA0660B__INCLUDED_)

⌨️ 快捷键说明

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