Files
2022-10-26 12:25:11 +08:00

285 lines
6.9 KiB
Objective-C

#ifndef __USER_INTERFACE_VENDORBUY_H__
#define __USER_INTERFACE_VENDORBUY_H__
//------------------------------------------------------------------------------
/**
@class uiVendorBuy
personal vendor buy interface
(C) 2005 ckbang
*/
#include "uiBase.h"
#include "uiVendorBuy_def.h"
#include "SCItemSlotContainer.h"
class uiVendorMan;
class uiVendorBuy :
public uiBase,
public SCItemSlotContainer // server client shared container
{
enum eDIALOG_POS
{
#ifdef _NA_0_20101124_VENDOR_SLOT_COUNT_INCREASE
DIALOG_SLOT00=0,
DIALOG_SLOT01,
DIALOG_SLOT02,
DIALOG_SLOT03,
DIALOG_SLOT04,
DIALOG_SLOT05,
DIALOG_SLOT06,
DIALOG_SLOT07,
DIALOG_SLOT10,
DIALOG_SLOT11,
DIALOG_SLOT12,
DIALOG_SLOT13,
DIALOG_SLOT14,
DIALOG_SLOT15,
DIALOG_SLOT16,
DIALOG_SLOT17,
DIALOG_SLOT20,
DIALOG_SLOT21,
DIALOG_SLOT22,
DIALOG_SLOT23,
DIALOG_SLOT24,
DIALOG_SLOT25,
DIALOG_SLOT26,
DIALOG_SLOT27,
DIALOG_SLOT30,
DIALOG_SLOT31,
DIALOG_SLOT32,
DIALOG_SLOT33,
DIALOG_SLOT34,
DIALOG_SLOT35,
DIALOG_SLOT36,
DIALOG_SLOT37,
DIALOG_SLOT40,
DIALOG_SLOT41,
DIALOG_SLOT42,
DIALOG_SLOT43,
DIALOG_SLOT44,
DIALOG_SLOT45,
DIALOG_SLOT46,
DIALOG_SLOT47,
#else
DIALOG_SLOT00=0,
DIALOG_SLOT01,
DIALOG_SLOT02,
DIALOG_SLOT03,
DIALOG_SLOT04,
DIALOG_SLOT05,
DIALOG_SLOT10,
DIALOG_SLOT11,
DIALOG_SLOT12,
DIALOG_SLOT13,
DIALOG_SLOT14,
DIALOG_SLOT15,
DIALOG_SLOT20,
DIALOG_SLOT21,
DIALOG_SLOT22,
DIALOG_SLOT23,
DIALOG_SLOT24,
DIALOG_SLOT25,
DIALOG_SLOT30,
DIALOG_SLOT31,
DIALOG_SLOT32,
DIALOG_SLOT33,
DIALOG_SLOT34,
DIALOG_SLOT35,
#endif //_NA_0_20101124_VENDOR_SLOT_COUNT_INCREASE
DIALOG_TXT_SELLITEM,
DIALOG_EDIT_SELLMSG,
DIALOG_TXT_SELLMSG,
DIALOG_TXT_ITEMCOUNTS,
DIALOG_TXT_ITEMVALUE,
DIALOG_TXTVALUE_ITEMCOUNTS,
DIALOG_TXTVALUE_ITEMVALUTE,
DIALOG_TXT_ITEM_UNIT_PRICE,
DIALOG_BTN_ITEMBUY,
DIALOG_EXIT,
DIALOG_MAX,
};
enum
{
#ifdef _NA_0_20101124_VENDOR_SLOT_COUNT_INCREASE
POS_MAX_SLOT = DIALOG_SLOT47+1,
#else
POS_MAX_SLOT = DIALOG_SLOT35+1,
#endif //_NA_0_20101124_VENDOR_SLOT_COUNT_INCREASE
POS_SLOT_BEGIN = DIALOG_SLOT00,
POS_SLOT_END = POS_MAX_SLOT,
};
public:
uiVendorBuy(InterfaceManager *pUIMan);
virtual ~uiVendorBuy();
//--------------------------------------------------------------------------
// init/release
//
public:
virtual SCSlot * CreateSlot();
virtual VOID Init(POSTYPE MaxSlotSize); // SCItemSlotContainer 함수 재정의
virtual void Init(CDrawBase* pDrawBase);
virtual void Release();
//--------------------------------------------------------------------------
// helper/comms.
//
public:
ItemUnitRenderer * GetItemUnitRender() const;
virtual SCSlotContainer * GetSlotContainer();
uiVendorMan * GetManager() { return m_pVendorMan; }
//--------------------------------------------------------------------------
// functions
//
public:
#ifdef _JBH_MOD_VENDOR_SELECT_BUY_NUM
void SendItemBuySync(POSTYPE pos , int num = NULL);
#else
void SendItemBuySync(POSTYPE pos );
#endif
void ItemSub(POSTYPE pos);
void QueryView(DWORD key);
void QueryViewEnd();
// item unit renderer
void InitItemRender();
void ResetItemRenderer();
void FlushUnitDraw();
void ReFreshRenderSlot();
void SetBuyItemsSearchFoucs(POSTYPE pos,DURATYPE count ,MONEY price);
//--------------------------------------------------------------------------
// dialog functions
//
public:
virtual RC::eSLOT_INSERT_RESULT InsertSlot( POSTYPE AtPos, SCSlot & IN rSlot ); // 슬롯에 객체 추가
virtual BOOL DeleteSlot( POSTYPE AtPos, SCSlot * pSlotOut );
//bitstream
virtual void Serialize( POSTYPE pos, BitStream & bitstream, eSLOT_SERIALIZE eType );
void Exit();
protected:
virtual void OnShowWindow( BOOL val );
virtual void OnRenderSolarDialog();
virtual void OnUpdateSolarDialog();
#ifdef _JBH_MOD_MONEY_OUTPUT
void updateToolTip();
DWORD m_dwPendingTick;
BOOL m_bClickMoney;
#endif
void updateVendingCurrentItemInfos();
protected:
CControlWZ * getControl( POSTYPE AtPos );
POSTYPE getCtrlIDToPos( WzID wzId );
static WzID m_wzId[DIALOG_MAX];
//--------------------------------------------------------------------------
// procedure
//
public:
virtual void NetworkProc( MSG_BASE * pMsg ); // Pure
virtual void MessageProc( SI_MESSAGE * pMessage ); // Pure
virtual void MouseOver_MsgProc( SI_MESSAGE * pMessage );
//--------------------------------------------------------------------------
// member vars
//
private:
inline void ClearCheckItem();
inline void SetCheckItem(POSTYPE pos, bool check);
inline bool GetCheckItem(POSTYPE pos);
void RenderCheckItem();
ItemUnitRenderer * m_pItemUnitRenderer;
uiVendorMan * m_pVendorMan;
TCHAR m_szVendorMsg[MAX_VENDOR_TITLE_LENGTH + 1];
DURATYPE m_curAmouts; // 현재 수량
MONEY m_curMoney; // 현재 값
POSTYPE m_curPos; // 현재 슬롯 포지션
DWORD m_dwSalerKey; // 판매자의 오브젝트키
bool check_item_[POS_MAX_SLOT]; //check item !
};
//------------------------------------------------------------------------------
/**
*/
inline void uiVendorBuy::ClearCheckItem()
{
ZeroMemory (&check_item_, sizeof (check_item_));
}
//------------------------------------------------------------------------------
/**
*/
inline bool uiVendorBuy::GetCheckItem(POSTYPE pos)
{
if ((pos >= 0) &&
(pos < POS_MAX_SLOT))
{
return check_item_[pos];
}
return false;
}
//------------------------------------------------------------------------------
/**
*/
inline void uiVendorBuy::SetCheckItem(POSTYPE pos, bool check)
{
if ((pos >= 0) &&
(pos < POS_MAX_SLOT))
{
check_item_[pos] = check;
}
}
//------------------------------------------------------------------------------
/**
*/
inline
POSTYPE
uiVendorBuy::getCtrlIDToPos( WzID wzId )
{
for( POSTYPE i = 0 ; i < DIALOG_MAX ; ++i )
{
if( m_wzId[i] == wzId )
{
return i;
}
}
return DIALOG_MAX;
}
//------------------------------------------------------------------------------
/**
*/
inline
CControlWZ *
uiVendorBuy::getControl( POSTYPE AtPos )
{
assert( AtPos < DIALOG_MAX );
return GetControlWZ( m_wzId[AtPos] );
}
//------------------------------------------------------------------------------
#endif // __USER_INTERFACE_VENDORBUY_H__