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

161 lines
5.0 KiB
C++

#pragma once
#include "uibase.h"
#include "SCItemSlotContainer.h"
#include "DummySlotContainer.h"
class uiSocketComposite : public uiBase, public DummySlotContainer
{
static const int kMax_Animate_Count = 240;
static const int kMax_End_Count = 300;
int kMax_End_Tick;
enum DIALOG_POSITION
{
DIALOG_SOCKET_COMPOSITE_RESOURCE1,
DIALOG_SOCKET_COMPOSITE_RESOURCE2,
DIALOG_SOCKET_COMPOSITE_RESOURCE3,
DIALOG_SOCKET_COMPOSITE_ADD_RESOURCE,
DIALOG_SOCKET_COMPOSITE_RESULT_ITEM,
DIALOG_SOCKET_COMPOSITE_LIST,
DIALOG_SOCKET_COMPOSITE_EXIT,
DIALOG_SOCKET_COMPOSITE_TITTLE,
DIALOG_SOCKET_COMPOSITE_START,
DIALOG_SOCKET_COMPOSITE_CANCLE,
DIALOG_SOCKET_COMPOSITE_SUCCESS_AREA_BACKGROUND,
DIALOG_SOCKET_COMPOSITE_MOVE_STICK,
DIALOG_SOCKET_COMPOSITE_EFFECT_1,
DIALOG_SOCKET_COMPOSITE_EFFECT_2,
DIALOG_SOCKET_COMPOSITE_EFFECT_3,
DIALOG_SOCKET_COMPOSITE_EFFECT_4,
DIALOG_SOCKET_COMPOSITE_CONTROLS_MAX,
};
enum SOCKET_COMPOSITE_BUTTONS
{
RESOURCE1_BUTTON = 0,
RESOURCE2_BUTTON,
RESOURCE3_BUTTON,
ADD_RESOURCE_BUTTON,
RESULT_ITEM_BUTTON,
START_BUTTON,
CANCLE_BUTTON,
SOCKET_COMPOSITE_BUTTONS_MAX,
};
enum SOCKET_COMPOSITE_PICTURES
{
SUCCESS_AREA_BACKGROUND = 0,
MOVE_STICK,
EFFECT_1,
EFFECT_2,
EFFECT_3,
EFFECT_4,
SOCKET_COMPOSITE_PICTURES_MAX,
};
public:
enum SOCKET_COMPOSITE_SLOT
{
SOCKET_COMPOSITE_SLOT_RESOURCE1 = 0,
SOCKET_COMPOSITE_SLOT_RESOURCE2,
SOCKET_COMPOSITE_SLOT_RESOURCE3,
SOCKET_COMPOSITE_SLOT_RESOURCE_MAX,
SOCKET_COMPOSITE_SLOT_ADD_RESOURCE = SOCKET_COMPOSITE_SLOT_RESOURCE_MAX,
SOCKET_COMPOSITE_SLOT_RESULT_ITEM,
SOCKET_COMPOSITE_SLOT_RESULT_MAX,
};
enum SOCKET_COMPOSITE_INFORMATION
{
SOCKET_COMPOSITE_INFO_STRING1,
SOCKET_COMPOSITE_INFO_STRING2,
SOCKET_COMPOSITE_INFO_STRING3,
SOCKET_COMPOSITE_INFO_STRING4,
INFORMATION_MAX,
};
public:
uiSocketComposite(InterfaceManager* ui_manager);
~uiSocketComposite();
virtual void Init(CDrawBase* draw_base);
virtual void Release();
virtual void OnRenderSolarDialog();
virtual void Process(DWORD tick_count);
virtual void OnShowWindow(BOOL open_value);
virtual void MessageProc(SI_MESSAGE* message);
virtual void NetworkProc(MSG_BASE* message);
void MouseOver_MsgProc(SI_MESSAGE* message);
SCSlotContainer* GetSlotContainer();
RC::eSLOT_INSERT_RESULT InsertSlot(POSTYPE at_pos, SCSlot& slot);
BOOL DeleteSlot(POSTYPE at_pos, SCSlot* slotOut);
void DeleteAllSlot();
void DeleteResultSlot();
void DeleteResourceSlot();
void OnSocketComposite_InventoryRightClick(const SLOTIDX from_container_index,
const POSTYPE from_container_position);
void SetMessage(int index, TCHAR* message);
void ResetAnimation();
protected:
CControlWZ* get_control(POSTYPE AtPos);
POSTYPE get_control_id_to_pos(WzID wzID);
void SetGague(float ratio);
void AnimateEffect();
float RollGoalPosition(bool is_success);
private:
ItemUnitRenderer* item_unit_renderer_;
static WzID wz_control_id_[DIALOG_SOCKET_COMPOSITE_CONTROLS_MAX];
CCtrlListWZ* socket_composite_list_;
CCtrlButtonWZ* socket_composite_button_[SOCKET_COMPOSITE_BUTTONS_MAX];
CCtrlPictureWZ* socket_composite_picture_[SOCKET_COMPOSITE_PICTURES_MAX];
POSTYPE item_inventory_position_[SOCKET_COMPOSITE_SLOT_RESOURCE_MAX];
POSTYPE additional_item_position_;
int animate_frame_count_;
int success_sound_count_;
int fail_sound_count_;
//int animate_total_frame_;
DWORD animate_now_tick_;
DWORD animate_start_tick_;
DWORD animate_end_tick_;
DWORD animate_tick_gap_; //
int fail_number_;
bool socket_composite_lock_;
INVENTORY_TOTAL_INFO save_inventory_item_info;
int result_string_code_;
bool socket_composite_success_;
TCHAR message_[INFORMATION_MAX][INTERFACE_STRING_LENGTH];
float gague_left_; // 성공영역의 왼쪽 좌표
float gague_right_;// 성공영역의 오른쪽 좌표
float move_gap_x_; // 현재 막대의 총 이동 거리
float goal_position_; // 목표하는 좌표
//==========================================================
void InitAnimation();
void BaseAnimation();
void AddtionalAnimation();
void MoveEffect(RECT dialog_rect, RECT control_size, float position_x);
void MoveStick(RECT dialog_rect, RECT control_size, float position_x);
//void CompleteAnimation();
//void CompleteMessage(int string_code);
void ControlsStateInit();
};
inline CControlWZ* uiSocketComposite::get_control(POSTYPE AtPos)
{
assert(AtPos < DIALOG_SOCKET_COMPOSITE_CONTROLS_MAX);
return GetControlWZ(wz_control_id_[AtPos]);
}
inline POSTYPE uiSocketComposite::get_control_id_to_pos(WzID wzID)
{
for ( int i = 0; i < DIALOG_SOCKET_COMPOSITE_CONTROLS_MAX ; ++i)
{
if ( wz_control_id_[i] == wzID)
return i;
}
return DIALOG_SOCKET_COMPOSITE_CONTROLS_MAX;
}