211 lines
5.9 KiB
C++
211 lines
5.9 KiB
C++
#pragma once
|
|
|
|
#include "PythonWindow.h"
|
|
|
|
namespace UI
|
|
{
|
|
enum
|
|
{
|
|
ITEM_WIDTH = 32,
|
|
ITEM_HEIGHT = 32,
|
|
|
|
SLOT_NUMBER_NONE = 0xffffffff,
|
|
};
|
|
|
|
enum ESlotStyle
|
|
{
|
|
SLOT_STYLE_NONE,
|
|
SLOT_STYLE_PICK_UP,
|
|
SLOT_STYLE_SELECT,
|
|
};
|
|
|
|
enum ESlotState
|
|
{
|
|
SLOT_STATE_LOCK = (1 << 0),
|
|
SLOT_STATE_CANT_USE = (1 << 1),
|
|
SLOT_STATE_DISABLE = (1 << 2),
|
|
SLOT_STATE_ALWAYS_RENDER_COVER = (1 << 3), // 현재 Cover 버튼은 슬롯에 무언가 들어와 있을 때에만 렌더링 하는데, 이 flag가 있으면 빈 슬롯이어도 커버 렌더링
|
|
};
|
|
|
|
class CSlotWindow : public CWindow
|
|
{
|
|
public:
|
|
static DWORD Type();
|
|
|
|
public:
|
|
class CSlotButton;
|
|
class CCoverButton;
|
|
class CCoolTimeFinishEffect;
|
|
|
|
friend class CSlotButton;
|
|
friend class CCoverButton;
|
|
|
|
typedef struct SSlot
|
|
{
|
|
DWORD dwState;
|
|
DWORD dwSlotNumber;
|
|
DWORD dwCenterSlotNumber; // NOTE : 사이즈가 큰 아이템의 경우 아이템의 실제 위치 번호
|
|
DWORD dwItemIndex; // NOTE : 여기서 사용되는 Item이라는 단어는 좁은 개념의 것이 아닌,
|
|
BOOL isItem; // "슬롯의 내용물"이라는 포괄적인 개념어. 더 좋은 것이 있을까? - [levites]
|
|
|
|
// CoolTime
|
|
float fCoolTime;
|
|
float fStartCoolTime;
|
|
|
|
// Toggle
|
|
BOOL bActive;
|
|
|
|
int ixPosition;
|
|
int iyPosition;
|
|
|
|
int ixCellSize;
|
|
int iyCellSize;
|
|
|
|
BYTE byxPlacedItemSize;
|
|
BYTE byyPlacedItemSize;
|
|
|
|
CGraphicImageInstance * pInstance;
|
|
CNumberLine * pNumberLine;
|
|
|
|
bool bRenderBaseSlotImage;
|
|
CCoverButton * pCoverButton;
|
|
CSlotButton * pSlotButton;
|
|
CImageBox * pSignImage;
|
|
CAniImageBox * pFinishCoolTimeEffect;
|
|
} TSlot;
|
|
typedef std::list<TSlot> TSlotList;
|
|
typedef TSlotList::iterator TSlotListIterator;
|
|
|
|
public:
|
|
CSlotWindow(PyObject * ppyObject);
|
|
virtual ~CSlotWindow();
|
|
|
|
void Destroy();
|
|
|
|
// Manage Slot
|
|
void SetSlotType(DWORD dwType);
|
|
void SetSlotStyle(DWORD dwStyle);
|
|
|
|
void AppendSlot(DWORD dwIndex, int ixPosition, int iyPosition, int ixCellSize, int iyCellSize);
|
|
void SetCoverButton(DWORD dwIndex, const char * c_szUpImageName, const char * c_szOverImageName, const char * c_szDownImageName, const char * c_szDisableImageName, BOOL bLeftButtonEnable, BOOL bRightButtonEnable);
|
|
void SetSlotBaseImage(const char * c_szFileName, float fr, float fg, float fb, float fa);
|
|
void AppendSlotButton(const char * c_szUpImageName, const char * c_szOverImageName, const char * c_szDownImageName);
|
|
void AppendRequirementSignImage(const char * c_szImageName);
|
|
|
|
void EnableCoverButton(DWORD dwIndex);
|
|
void DisableCoverButton(DWORD dwIndex);
|
|
void SetAlwaysRenderCoverButton(DWORD dwIndex, bool bAlwaysRender = false);
|
|
|
|
void ShowSlotBaseImage(DWORD dwIndex);
|
|
void HideSlotBaseImage(DWORD dwIndex);
|
|
BOOL IsDisableCoverButton(DWORD dwIndex);
|
|
BOOL HasSlot(DWORD dwIndex);
|
|
|
|
void ClearAllSlot();
|
|
void ClearSlot(DWORD dwIndex);
|
|
void SetSlot(DWORD dwIndex, DWORD dwVirtualNumber, BYTE byWidth, BYTE byHeight, CGraphicImage * pImage, D3DXCOLOR& diffuseColor);
|
|
void SetSlotCount(DWORD dwIndex, DWORD dwCount);
|
|
void SetSlotCountNew(DWORD dwIndex, DWORD dwGrade, DWORD dwCount);
|
|
void SetSlotCoolTime(DWORD dwIndex, float fCoolTime, float fElapsedTime = 0.0f);
|
|
void ActivateSlot(DWORD dwIndex);
|
|
void DeactivateSlot(DWORD dwIndex);
|
|
void RefreshSlot();
|
|
|
|
DWORD GetSlotCount();
|
|
|
|
void LockSlot(DWORD dwIndex);
|
|
void UnlockSlot(DWORD dwIndex);
|
|
BOOL IsLockSlot(DWORD dwIndex);
|
|
void SetCantUseSlot(DWORD dwIndex);
|
|
void SetUseSlot(DWORD dwIndex);
|
|
BOOL IsCantUseSlot(DWORD dwIndex);
|
|
void EnableSlot(DWORD dwIndex);
|
|
void DisableSlot(DWORD dwIndex);
|
|
BOOL IsEnableSlot(DWORD dwIndex);
|
|
|
|
// Select
|
|
void ClearSelected();
|
|
void SelectSlot(DWORD dwSelectingIndex);
|
|
BOOL isSelectedSlot(DWORD dwIndex);
|
|
DWORD GetSelectedSlotCount();
|
|
DWORD GetSelectedSlotNumber(DWORD dwIndex);
|
|
|
|
// Slot Button
|
|
void ShowSlotButton(DWORD dwSlotNumber);
|
|
void HideAllSlotButton();
|
|
void OnPressedSlotButton(DWORD dwType, DWORD dwSlotNumber, BOOL isLeft = TRUE);
|
|
|
|
// Requirement Sign
|
|
void ShowRequirementSign(DWORD dwSlotNumber);
|
|
void HideRequirementSign(DWORD dwSlotNumber);
|
|
|
|
// ToolTip
|
|
BOOL OnOverInItem(DWORD dwSlotNumber);
|
|
void OnOverOutItem();
|
|
|
|
// For Usable Item
|
|
void SetUseMode(BOOL bFlag);
|
|
void SetUsableItem(BOOL bFlag);
|
|
|
|
// CallBack
|
|
void ReserveDestroyCoolTimeFinishEffect(DWORD dwSlotIndex);
|
|
|
|
protected:
|
|
void __Initialize();
|
|
void __CreateToggleSlotImage();
|
|
void __CreateSlotEnableEffect();
|
|
void __CreateFinishCoolTimeEffect(TSlot * pSlot);
|
|
void __CreateBaseImage(const char * c_szFileName, float fr, float fg, float fb, float fa);
|
|
|
|
void __DestroyToggleSlotImage();
|
|
void __DestroySlotEnableEffect();
|
|
void __DestroyFinishCoolTimeEffect(TSlot * pSlot);
|
|
void __DestroyBaseImage();
|
|
|
|
// Event
|
|
void OnUpdate();
|
|
void OnRender();
|
|
BOOL OnMouseLeftButtonDown();
|
|
BOOL OnMouseLeftButtonUp();
|
|
BOOL OnMouseRightButtonDown();
|
|
BOOL OnMouseLeftButtonDoubleClick();
|
|
void OnMouseOverOut();
|
|
void OnMouseOver();
|
|
void RenderSlotBaseImage();
|
|
void RenderLockedSlot();
|
|
virtual void OnRenderPickingSlot();
|
|
virtual void OnRenderSelectedSlot();
|
|
|
|
// Select
|
|
void OnSelectEmptySlot(int iSlotNumber);
|
|
void OnSelectItemSlot(int iSlotNumber);
|
|
void OnUnselectEmptySlot(int iSlotNumber);
|
|
void OnUnselectItemSlot(int iSlotNumber);
|
|
void OnUseSlot();
|
|
|
|
// Manage Slot
|
|
BOOL GetSlotPointer(DWORD dwIndex, TSlot ** ppSlot);
|
|
BOOL GetSelectedSlotPointer(TSlot ** ppSlot);
|
|
virtual BOOL GetPickedSlotPointer(TSlot ** ppSlot);
|
|
void ClearSlot(TSlot * pSlot);
|
|
virtual void OnRefreshSlot();
|
|
|
|
// ETC
|
|
BOOL OnIsType(DWORD dwType);
|
|
|
|
protected:
|
|
DWORD m_dwSlotType;
|
|
DWORD m_dwSlotStyle;
|
|
std::list<DWORD> m_dwSelectedSlotIndexList;
|
|
TSlotList m_SlotList;
|
|
DWORD m_dwToolTipSlotNumber;
|
|
|
|
BOOL m_isUseMode;
|
|
BOOL m_isUsableItem;
|
|
|
|
CGraphicImageInstance * m_pBaseImageInstance;
|
|
CImageBox * m_pToggleSlotImage;
|
|
CAniImageBox * m_pSlotActiveEffect;
|
|
std::deque<DWORD> m_ReserveDestroyEffectDeque;
|
|
};
|
|
}; |