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