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

474 lines
13 KiB
C++

#ifndef _uiAutobotConditionBattle_h_
#define _uiAutobotConditionBattle_h_
#if _MSC_VER > 1000
#pragma once
#endif
#ifdef _YMS_AUTOBOT_GAME
#include "uiAutobotDialog.h"
#include "SCItemSlotContainer.h"
#include "QuickSlotContainer.h"
#include "Mouse.h"
struct BASE_AutomaticComboInfo;
class cInputEditControlContainer
{
private:
class cInputEditControl
{
public:
CCtrlDxEditBox* m_pEdit;
CCtrlStaticWZ* m_pText;
cInputEditControl( CCtrlDxEditBox* pEdit, CCtrlStaticWZ* pText )
{
m_pEdit = pEdit;
m_pText = pText;
}
};
CDialogWZ* m_pDialog;
std::vector<cInputEditControl*> m_EditControlArray;
protected:
cInputEditControlContainer(){}
virtual CDialogWZ* GetDialog() PURE;
bool ReleaseInputMode()
{
for( size_t i=0;i!=m_EditControlArray.size();++i)
{
if( IsInputMode(i) == true )
{
CHAR buffer[INTERFACE_STRING_LENGTH];
m_EditControlArray[i]->m_pEdit->GetTextWZA( buffer, INTERFACE_STRING_LENGTH );
m_EditControlArray[i]->m_pText->SetTextWZA( buffer, false );
m_EditControlArray[i]->m_pEdit->ShowWindowWZ(WZ_HIDE);
m_EditControlArray[i]->m_pText->ShowWindowWZ(WZ_SHOW);
return true;
}
}
return false;
}
void SetInputMode( size_t index )
{
for( size_t i=0;i!=m_EditControlArray.size();++i)
{
if( index == i )
{
CHAR buffer[INTERFACE_STRING_LENGTH];
m_EditControlArray[i]->m_pText->GetTextWZA( buffer, INTERFACE_STRING_LENGTH );
m_EditControlArray[i]->m_pEdit->SetTextWZA( buffer, false );
m_EditControlArray[i]->m_pEdit->ShowWindowWZ(WZ_SHOW);
m_EditControlArray[i]->m_pText->ShowWindowWZ(WZ_HIDE);
GetDialog()->RequestFocus(m_EditControlArray[i]->m_pEdit);
break;
}
}
}
bool IsInputMode( size_t index )
{
if( index >= m_EditControlArray.size() )
return false;
return m_EditControlArray[index]->m_pEdit->GetState() != WZ_HIDE;
}
bool ProcessEditControlMessage(SI_MESSAGE* message )
{
if( message->eResultMsg == RT_MSG_LBUTTONCLICK )
{
for (size_t i=0;i!=m_EditControlArray.size();++i)
{
CCtrlDxEditBox* pEdit = m_EditControlArray[i]->m_pEdit;
RECT rect = pEdit->GetSizeRect();
int mouse_x = Mouse::Instance()->GetMouseX();
int mouse_y = Mouse::Instance()->GetMouseY();
if (mouse_x > rect.left && mouse_x < rect.right
&& mouse_y > rect.top && mouse_y < rect.bottom)
{
if( IsInputMode(i) == false )
{
ReleaseInputMode();
SetInputMode(i);
return true;
}
else
{
return true;
}
}
}
if( ReleaseInputMode() == true )
return true;
return false;
}
return false;
}
void RegisterEditControl( CCtrlDxEditBox* pEdit, CCtrlStaticWZ* pText )
{
m_EditControlArray.push_back(new cInputEditControl(pEdit, pText));
}
size_t GetEditCount()
{
return m_EditControlArray.size();
}
CCtrlDxEditBox* GetEditControlWZ( size_t index )
{
if( index >= m_EditControlArray.size() )
return NULL;
return m_EditControlArray[index]->m_pEdit;
}
void SetEditText( size_t index, int number )
{
static CHAR buffer[INTERFACE_STRING_LENGTH];
wsprintf(buffer, "%d", number );
SetEditText( index, buffer );
}
void SetEditText( size_t index, const std::string& text )
{
if( index >= m_EditControlArray.size() )
return;
m_EditControlArray[index]->m_pText->SetTextWZA(text.c_str(), false );
}
std::string GetEditText( size_t index )
{
static CHAR buffer[INTERFACE_STRING_LENGTH];
GetEditText(index, buffer, INTERFACE_STRING_LENGTH);
return buffer;
}
void GetEditText( size_t index, LPTSTR buffer, DWORD bufferlength )
{
if( index >= m_EditControlArray.size() )
return;
m_EditControlArray[index]->m_pText->GetTextWZA( buffer, bufferlength);
}
void InitEditStateViewState()
{
for( size_t i=0;i!=m_EditControlArray.size();++i)
{
m_EditControlArray[i]->m_pEdit->ShowWindowWZ(WZ_HIDE);
m_EditControlArray[i]->m_pText->ShowWindowWZ(WZ_SHOW);
}
}
};
//------------------------------------------------------------------------------
class uiAutobotConditionBattle : public QuickSlotContainer, public uiAutobotDialog
, public cInputEditControlContainer
{
friend class uiAutobotMan;
enum UIControlPos
{
kControl_CheckBT_C001 = 0,
kControl_CheckBT_C005,
kControl_CheckBT_C006,
kControl_CheckBT_C007,
kControl_CheckBT_C009,
kControl_CheckBT_C010,
kControl_CheckBT_C011,
kControl_CheckBT_C012,
kControl_CheckBT_C013,
kControl_CheckBT_C014,
kControl_CheckBT_C015,
kControl_CheckBT_C016,
kControl_CheckBT_C017,
kControl_CheckBT_C018,
kControl_CheckBT_C024,
kControl_CheckBT_C025,
kControl_CheckBT_C026,
kControl_CheckBT_C027,
kControl_CheckBT_C030,
kControl_CheckBT_C000,
kControl_Button_B000,
kControl_Button_B999,
kControl_Button_B003,
kControl_Button_B004,
kControl_Button_B005,
kControl_Button_B006,
kControl_Button_B007,
kControl_Button_B008,
kControl_Button_B009,
kControl_Button_B010,
kControl_Button_B011,
kControl_Button_B013,
kControl_Button_B012,
kControl_Button_B015,
kControl_Button_B014,
kControl_Button_B016,
kControl_Button_B017,
kControl_Button_B018,
kControl_Button_B019,
kControl_Button_B020,
kControl_Button_B021,
kControl_Button_B022,
kControl_Button_B023,
kControl_Button_B024,
kControl_Button_B025,
kControl_Button_B026,
kControl_Button_B027,
kControl_Button_B028,
kControl_Button_B029,
kControl_Button_B030,
kControl_Button_B031,
kControl_Button_B032,
kControl_Button_B033,
kControl_Text_T101,
kControl_Text_T999,
kControl_Text_T006,
kControl_Text_S000,
kControl_Text_S001,
kControl_Text_S002,
kControl_Text_S003,
kControl_Text_S004,
kControl_Text_S010,
kControl_Text_S005,
kControl_Text_S006,
kControl_Text_S007,
kControl_Text_S008,
kControl_Text_S009,
kControl_Text_S012,
kControl_Text_S019,
kControl_Text_S020,
kControl_Text_S021,
kControl_Text_S022,
kControl_Text_S025,
kControl_Text_S026,
kControl_Text_S035, //!< hp회복 물약먹기
kControl_Text_S047, //!< mp/sp회복 물약먹기
kControl_Text_S048, //!< 즉시회복
kControl_Text_S049, //!< 사료먹기
kControl_Text_S050, //!< 휴식 앉기(hp)
kControl_Text_S051, //!< 휴식 앉기(mp)
kControl_Text_S011,
kControl_Text_S013,
kControl_Text_S014,
kControl_Text_S015,
kControl_Text_S016,
kControl_Text_S017,
kControl_Text_S018,
kControl_Text_S023,
kControl_Text_S024,
kControl_Text_S027,
kControl_Text_S028,
kControl_Text_S029,
kControl_Text_S030,
kControl_Text_S031,
kControl_Text_S032,
kControl_Text_T021,
kControl_Text_S036,
kControl_Text_S037,
kControl_Text_S038,
kControl_Text_S039,
kControl_Text_S040,
kControl_Text_S041,
kControl_Text_S042,
kControl_Text_S043,
kControl_Text_S044,
kControl_Text_S045,
kControl_Text_S046,
kControl_Text_S034, //!< 범위
kControl_Text_S033, //!< 파티원
kControl_Edit_E000, // 쿨타임 입력용 에디트박스
kControl_Edit_E001,
kControl_Edit_E003,
kControl_Edit_E002,
kControl_Edit_E004,
kControl_Edit_E005,
kControl_Edit_E006,
kControl_Edit_E007,
kControl_Edit_E008,
kControl_Edit_E009,
kControl_Edit_E010,
kControl_Edit_E011,
kControl_List_L000, //! 휴식 앉기(hp)
kControl_List_L001, //! 회복(즉시회복)
kControl_List_L002, //! 회복(hp 물약)
kControl_List_L003, //! 휴식 앉기(mp)
kControl_List_L004, //! 회복(사료)
kControl_List_L005, //! 회복(mp 물약)
kControl_List_L006, //! 범위 지정
kControl_List_L007, //! 파티원
kControl_Picture_P013, //!< 픽쳐
kControl_Picture_P015,
kControl_Picture_P017,
kControl_Picture_P018,
kControl_Picture_P019,
kControl_Picture_P020,
kControl_Picture_P021,
kControl_Picture_P000,
kControl_Picture_P001,
kControl_Picture_P002,
kControl_Picture_P003,
kControl_Picture_P004,
kControl_Picture_P005,
kControl_Picture_P006,
kControl_Picture_P007,
kControl_Picture_P008,
kControl_Picture_P009,
kControl_Picture_P010,
kControl_Picture_P011,
kControl_Picture_P012,
kControl_Picture_P023,
kControl_Picture_P024,
kControl_Picture_P025,
kControl_Picture_P026,
kControl_Picture_P027,
kControl_Picture_P028,
kControl_Picture_P029,
kControl_Picture_P014,
kControl_Picture_P022,
kControl_Picture_P030,
kControl_Picture_P031,
kControl_Picture_P043,
kControl_Picture_P042,
kControl_Picture_P041,
kControl_Picture_P040,
kControl_Picture_P039,
kControl_Picture_P038,
kControl_Picture_P037,
kControl_Picture_P036,
kControl_Picture_P035,
kControl_Picture_P034,
kControl_Picture_P033,
kControl_Picture_P032,
kControl_Picture_PI04, //!< 앚기 휴식 hp
kControl_Picture_P044, //!< 즉시 회복 물약 먹기
kControl_Picture_P045, //!< hp 회복 물약 먹기
kControl_Picture_P046, //!< 앚기 휴식 mp
kControl_Picture_P047, //!< 사료
kControl_Picture_P048, //!< mp 회복 물약 먹기
kControl_Picture_P050,
kControl_Picture_P052, //!< 사냥범위
kControl_Picture_P053, //!< 파티원
kControl_Picture_P016, //!< 그래이(disable) 판
kControl_Picture_P049,
kControl_Picture_P051,
kControl_Picture_P054,
kControl_Picture_P055,
kControl_TextImage_TI07,
kControl_TextImage_TI06,
kControl_Size,
};
public:
enum SkillType
{
kSkill_Attack = 0, //!< 공격형 스킬
kSkill_Defense, //!< 방어형 스킬
kSkill_Max,
};
public:
static const DWORD kDialog_ID;
static const int kSlotSize;
static const int kDefaultCooltimeSecond;
private:
CDialogWZ* GetDialog() { return GetDialogWZ(); }
int is_mouse_overed_on_button_;
int mouse_overed_control_;
public:
uiAutobotConditionBattle(InterfaceManager* ui_man);
virtual ~uiAutobotConditionBattle(void);
virtual void Init(CDrawBase* drawbase);
virtual void Release(void);
virtual void OnUpdateSolarDialog();
virtual void OnRenderSolarDialog();
virtual void OnShowWindow(BOOL val);
virtual void NetworkProc(MSG_BASE* msgbase);
virtual void MessageProc(SI_MESSAGE* message);
virtual RC::eSLOT_INSERT_RESULT InsertSlot(POSTYPE at_pos, SCSlot & slot);
virtual BOOL DeleteSlot(POSTYPE at_pos, SCSlot * slotOut);
virtual void DeleteAllSlots(void);
SCSlotContainer* GetSlotContainer();
ItemUnitRenderer* GetItemUnitRender() const { return m_pItemUnitRenderer; }
bool CanLinkSlot(const SCSlot* slot, POSTYPE to_pos);
protected:
void DefaultUI();
bool UpdateCondition();
bool UpdateUI();
eAUTO_HUNTING_TYPE GetHuntingTypeFromControlIndex(DWORD control_index);
private:
bool OnLButtonClick(SI_MESSAGE* message);
void OnDropdownEnable();
void OnDropdownShow(UIControlPos list_index, UIControlPos picture_index);
//------------------------------------------------------------------------------
//! Returns:
//! Qualifier: 공격스킬 등록 가능한지 여부
//! Parameter: POSTYPE at_pos
//------------------------------------------------------------------------------
bool IsAttackSkillSlot(POSTYPE at_pos);
SkillType GetSkilType(SLOTCODE skill_code);
//------------------------------------------------------------------------------
//! Returns: int : second
//! Qualifier: 해당슬롯(아이템/스킬)의 쿨타임을 얻어 온다.
//! Parameter: SCSlot * slot
//------------------------------------------------------------------------------
int GetCoolTime(SCSlot* slot);
ItemUnitRenderer* m_pItemUnitRenderer;
};
#endif //_YMS_AUTOBOT_GAME
#endif