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

📄 ggoodsarray.h

📁 五行MMORPG引擎系统V1.0
💻 H
字号:
//GGoodsArray.h
/*/////////////////////////////////////////////////////////////////
物品阵列管理


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



#ifndef _RPG__GGOODS_H_
#include "GGoods.h"
#endif

#ifndef _TVECTOR_H_
#include "core/tvector.h"
#endif


namespace RPG
{


/////////////////////////////////////////////////////////////////
/// 物品封装
class GGoodsArray: public Vector<GGoods*>
{
	typedef  Vector<GGoods*> Parent;
	friend class RPGDatabase;
	friend class GCharacter;
	friend class GPlayer;

public:
	enum GoodsInfoStates
	{
		GAS_FAILED,
		GAS_OK,
		GAS_UPDATE
	};

	enum GoodsPutStates//须与GuiCellArrayControl::CellPutStates相一致
	{
		GPS_FAILED,
		GPS_OK,
		GPS_SWAP,
	};


	//图标在物品槽应用时,最多牵涉到3个槽,1个返回处理,2个参数传回
	struct GGoodsInfo
	{
		GGoodsArray*		pOwner;
		U32					nIndex;
		GoodsInfoStates	nState;
	};
public:
	//构造/析构函数
	GGoodsArray(ERPGGoodsArrayTypes type=GGAR_NONE);
	~GGoodsArray();

	/// @name 类型
	/// @{
protected:
	ERPGGoodsArrayTypes	m_nArrayType;

	void SetArrayType(ERPGGoodsArrayTypes type){m_nArrayType = type;}
public:
	ERPGGoodsArrayTypes GetArrayType(U32 nIndex);


	BOOL IsGoodsBag()		{return m_nArrayType >= GGAR_GOODSBAG0 && m_nArrayType <= GGAR_GOODSBAG2;}
	BOOL IsEquipSlot()	{return m_nArrayType == GGAR_EQUIPARMING || m_nArrayType == GGAR_EQUIPADORN;}
	BOOL IsActionBar()	{return m_nArrayType >= GGAR_ACTIONBASE && m_nArrayType <= GGAR_ACTIONMOTION;}
	BOOL IsKeyCellBar()	{return m_nArrayType == GGAR_FUNCKEYBAR || m_nArrayType == GGAR_NUMBERKEYBAR;}
	/// @}

public:
	U32 AddGoods(GGoods* pGGoods);
	U32 SearchBlankCell(U32 nAmount=1);
	U32 SearchCell(GGoods* pGGoods);

	U32 RemoveSameGoods(U32 nGoodsCode, EGGoodsKind kind, U32 nLevel,U32 nAmount);
	U32 RemoveSameGoods(const GGOODSREF& ref);
	//U32 RemoveSameGoods(const GEFFICACY& effData,GNpc* pNpc=NULL,GTaskBase* pTask=NULL);
	U32 CountSameGoods(U32 nGoodsCode, EGGoodsKind kind, U32 nLevel);
	U32 CountSameGoods(const GGOODSREF& ref);
	//U32 CountSameGoods(const GEFFICACY& effData,GNpc* pNpc=NULL,GTaskBase* pTask=NULL);


	U32 CountSameGoods(GGoods* pGGoods);
	U32 SearchSameGoods(GGoods* pGGoods);
	U32 SearchSameGoods(U32 nGoodsCode, EGGoodsKind kind, U32 nLevel);
	U32 SearchSameGoods(const GGOODSREF& ref);
	//U32 SearchSameGoods(const GEFFICACY& effData,GNpc* pNpc=NULL,GTaskBase* pTask=NULL);
public:
	/// @name 类型
	/// @{
	U32  SwapGoods(U32 uIndex,U32 uDest);
	U32  PutGoodsTo(U32 uIndex, GGoodsArray* pArray,U32 uTo);
	BOOL RemoveGoods(U32 uIndex);
	U32  DiscardGoods(U32 uIndex,GGoodsInfo arRet[]);

	StringTableEntry GetIconLabel(U32 uIndex);
	StringTableEntry GetToolTip(U32 uIndex);

	U32 OnGoodsApply(U32 uIndex,GGoodsInfo arRet[]);
	/// @}
public:
	//static void initPersistFields();

	//DECLARE_CONOBJECT(GGoodsArray);
};//class GGoodsArray



/////////////////////////////////////////////////////////////////////////
inline StringTableEntry GGoodsArray::GetIconLabel(U32 uIndex)
{
	AssertWarn(uIndex < size(), "uIndex超过Array范围了");
	if(mArray[uIndex])
		return mArray[uIndex]->GetIconLabel();
	else
		return StringTable->getBlank();
}

inline StringTableEntry GGoodsArray::GetToolTip(U32 uIndex)
{
	AssertWarn(uIndex < size(), "uIndex超过Array范围了");
	if(mArray[uIndex])
	{	
		StringTableEntry pText;
		pText = mArray[uIndex]->GetDesc();
		if(pText == 0 || pText[0] == 0)
			pText = mArray[uIndex]->GetGoodsName();
		return pText;
	}
	else
		return StringTable->getBlank();
}





inline ERPGGoodsArrayTypes GGoodsArray::GetArrayType(U32 nIndex)	
{
	if(IsKeyCellBar())
		return (nIndex < NUMBER_CELL_INDEX) ? GGAR_FUNCKEYBAR : GGAR_NUMBERKEYBAR ;
	else if(IsEquipSlot())
		return (nIndex < EQUIP_SLOTARMING_NUM) ? GGAR_EQUIPARMING : GGAR_EQUIPADORN ;
	else if(IsActionBar())
		return (nIndex < ACTION_TEAM_INDEX) ? GGAR_ACTIONBASE :(  (nIndex >= ACTION_MOTION_INDEX) ? GGAR_ACTIONMOTION : GGAR_ACTIONTEAM);

	//if(IsGoodsBag())
	return m_nArrayType;
}



};//namespace RPG
#endif //_RPG__GGOODSARRAY_H_

⌨️ 快捷键说明

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