#include "SunClientPrecompiledHeader.h" #include "uiCharacterStatusMan/uiCharacterStatusMan.h" #include "uiCharaterAccumulatePointDialog/uiCharaterAccumulatePointDialog.h" #include "uiSystemMan/uiSystemMan.h" #include "InterfaceManager.h" #include "ItemUnitRenderer.h" #include "SCItemSlot.h" #include "SlotKeyGenerator.h" #include "Mouse.h" #include "Hero.h" #include "ItemManager.h" #include "uiToolTipMan/uiToolTipMan.h" #include "Application.h" #include "SoundEffect.h" #include "GlobalFunc.h" #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD #include "GameFunc.h" #include "ResourceManager.h" #endif const DWORD kLastStep = 5; const DWORD kTimeForBlink = 166; const DWORD KInitTimeForMove = 80; const DWORD KMaxTimeForMove = 800; const DWORD KGapTimeForMove = KMaxTimeForMove - KInitTimeForMove; const DWORD kVelocityStepTime1 = 3000; const DWORD KCloseTimeAfterOrder = 2500; const DWORD KDisplayQuestionTime = 800; #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD const int KMaxRepeatCount = 30; #else const int KMaxRepeatCount = 18; #endif const DWORD KRewardMessageHeight = 142; WzID uiCharaterAccumulatePointDialog::controls_id_[DIALOG_POS_MAX] = { StrToWzID("BT18"),//ACCUMULATEPOINT_REWARD_BUTTON, StrToWzID("ST00"),//ACCUMULATEPOINT_COIN_TEXT, StrToWzID("B999"),//ACCUMULATEPOINT_CLOSE_BUTTON, StrToWzID("BT01"),//ACCUMULATEPOINT_INCREASE_BUTTON, //<- ¹Ýº¹È½¼ö Áõ°¡¹öư StrToWzID("BT02"),//ACCUMULATEPOINT_DECREASE_BUTTON, //<- ¹Ýº¹È½¼ö °¨¼Ò¹öư StrToWzID("ST01"),//ACCUMULATEPOINT_REPEAT_TEXT, //<- ¹Ýº¹È½¼ö // ItemSlot Render°ü·Ã StrToWzID("BT00"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT0, //<- ¼±ÅÃµÈ ¾ÆÀÌÅÛ ½½·Ô #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD StrToWzID("B001"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT1, //<- 30°³ÀÇ ¼¼ÆÃµÈ ¾ÆÀÌÅÛ½½·Ôi StrToWzID("B002"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT2, StrToWzID("B003"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT3, StrToWzID("B004"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT4, StrToWzID("B005"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT5, StrToWzID("B018"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT6, StrToWzID("B000"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT7, StrToWzID("B019"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT8, StrToWzID("B020"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT9, StrToWzID("B006"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT10, StrToWzID("B017"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT11, StrToWzID("B021"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT12, StrToWzID("B022"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT13, StrToWzID("B023"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT14, StrToWzID("B007"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT15, StrToWzID("B016"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT16, StrToWzID("B027"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT17, StrToWzID("B028"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT18 StrToWzID("B029"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT1, StrToWzID("B008"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT2, StrToWzID("B015"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT3, StrToWzID("B024"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT4, StrToWzID("B025"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT5, StrToWzID("B026"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT6, StrToWzID("B009"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT7, StrToWzID("B014"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT8, StrToWzID("B013"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT9, StrToWzID("B012"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT10, StrToWzID("B011"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT11, StrToWzID("B010"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT12, // º¸»ó¿¬Ãâ °ü·Ã StrToWzID("PI18"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC1, StrToWzID("PI19"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC2, StrToWzID("PI38"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC3, StrToWzID("PI39"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC4, StrToWzID("PI58"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC5, StrToWzID("PI71"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC6, StrToWzID("P019"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC7, StrToWzID("P020"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC8, StrToWzID("P022"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC9, StrToWzID("PI59"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC10, StrToWzID("PI70"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC11, StrToWzID("P023"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC12, StrToWzID("P024"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC13, StrToWzID("P025"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC14, StrToWzID("PI60"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC15, StrToWzID("PI69"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC16, StrToWzID("P026"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC17, StrToWzID("P027"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC18, StrToWzID("P028"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC1, StrToWzID("PI61"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC2, StrToWzID("PI68"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC3, StrToWzID("P029"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC4, StrToWzID("P030"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC5, StrToWzID("P031"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC6, StrToWzID("PI62"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC7, StrToWzID("PI67"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC8, StrToWzID("PI66"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC9, StrToWzID("PI65"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC10, StrToWzID("PI64"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC11, StrToWzID("PI63"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC12, // º¸»ó¿¬Ãâ °ü·Ã StrToWzID("P032"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC1, StrToWzID("P096"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC2, StrToWzID("P097"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC3, StrToWzID("P098"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC4, StrToWzID("P099"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC5, StrToWzID("P100"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC6, StrToWzID("P101"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC7, StrToWzID("P102"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC8, StrToWzID("P103"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC9, StrToWzID("P104"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC10, StrToWzID("P105"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC11, StrToWzID("P106"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC12, StrToWzID("P107"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC13, StrToWzID("P108"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC14, StrToWzID("P109"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC15, StrToWzID("P110"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC16, StrToWzID("P111"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC17, StrToWzID("P112"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC18, StrToWzID("P113"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC1, StrToWzID("P114"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC2, StrToWzID("P115"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC3, StrToWzID("P116"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC4, StrToWzID("P117"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC5, StrToWzID("P118"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC6, StrToWzID("P119"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC7, StrToWzID("P120"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC8, StrToWzID("P121"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC9, StrToWzID("P122"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC10, StrToWzID("P123"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC11, StrToWzID("P124"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC12, #else StrToWzID("B001"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT1, //<- 18°³ÀÇ ¼¼ÆÃµÈ ¾ÆÀÌÅÛ½½·Ôi StrToWzID("B002"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT2, StrToWzID("B003"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT3, StrToWzID("B004"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT4, StrToWzID("B005"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT5, StrToWzID("B006"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT6, StrToWzID("B007"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT7, StrToWzID("B008"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT8, StrToWzID("B009"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT9, StrToWzID("B010"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT10, StrToWzID("B011"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT11, StrToWzID("B012"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT12, StrToWzID("B013"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT13, StrToWzID("B014"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT14, StrToWzID("B015"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT15, StrToWzID("B016"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT16, StrToWzID("B017"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT17, StrToWzID("B018"),//ACCUMULATEPOINT_REWARD_ITEM_SLOT18, // º¸»ó¿¬Ãâ °ü·Ã StrToWzID("PI20"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC1, StrToWzID("PI21"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC2, StrToWzID("PI22"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC3, StrToWzID("PI23"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC4, StrToWzID("PI24"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC5, StrToWzID("PI25"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC6, StrToWzID("PI26"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC7, StrToWzID("PI27"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC8, StrToWzID("PI28"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC9, StrToWzID("PI29"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC10, StrToWzID("PI30"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC11, StrToWzID("PI31"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC12, StrToWzID("PI32"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC13, StrToWzID("PI33"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC14, StrToWzID("PI34"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC15, StrToWzID("PI35"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC16, StrToWzID("PI36"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC17, StrToWzID("PI37"),//ACCUMULATEPOINT_SELECT1_ITEM_PIC18, StrToWzID("PI40"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC1, StrToWzID("PI41"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC2, StrToWzID("PI42"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC3, StrToWzID("PI43"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC4, StrToWzID("PI44"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC5, StrToWzID("PI45"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC6, StrToWzID("PI46"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC7, StrToWzID("PI47"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC8, StrToWzID("PI48"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC9, StrToWzID("PI49"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC10, StrToWzID("PI50"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC11, StrToWzID("PI51"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC12, StrToWzID("PI52"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC13, StrToWzID("PI53"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC14, StrToWzID("PI54"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC15, StrToWzID("PI55"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC16, StrToWzID("PI56"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC17, StrToWzID("PI57"),//ACCUMULATEPOINT_SELECT2_ITEM_PIC18, StrToWzID("PI18"),//ACCUMULATEPOINT_QUESTION_ITEM_PIC1, StrToWzID("PI19"),//ACCUMULATEPOINT_QUESTION_ITEM_PIC2, StrToWzID("PI38"),//ACCUMULATEPOINT_QUESTION_ITEM_PIC3, StrToWzID("PI39"),//ACCUMULATEPOINT_QUESTION_ITEM_PIC4, StrToWzID("PI58"),//ACCUMULATEPOINT_QUESTION_ITEM_PIC5, StrToWzID("PI59"),//ACCUMULATEPOINT_QUESTION_ITEM_PIC6, StrToWzID("PI60"),//ACCUMULATEPOINT_QUESTION_ITEM_PIC7, StrToWzID("PI61"),//ACCUMULATEPOINT_QUESTION_ITEM_PIC8, StrToWzID("PI62"),//ACCUMULATEPOINT_QUESTION_ITEM_PIC9, StrToWzID("PI63"),//ACCUMULATEPOINT_QUESTION_ITEM_PIC10, StrToWzID("PI64"),//ACCUMULATEPOINT_QUESTION_ITEM_PIC11, StrToWzID("PI65"),//ACCUMULATEPOINT_QUESTION_ITEM_PIC12, StrToWzID("PI66"),//ACCUMULATEPOINT_QUESTION_ITEM_PIC13, StrToWzID("PI67"),//ACCUMULATEPOINT_QUESTION_ITEM_PIC14, StrToWzID("PI68"),//ACCUMULATEPOINT_QUESTION_ITEM_PIC15, StrToWzID("PI69"),//ACCUMULATEPOINT_QUESTION_ITEM_PIC16, StrToWzID("PI70"),//ACCUMULATEPOINT_QUESTION_ITEM_PIC17, StrToWzID("PI71"),//ACCUMULATEPOINT_QUESTION_ITEM_PIC18, #endif }; uiCharaterAccumulatePointDialog::uiCharaterAccumulatePointDialog(InterfaceManager* pUIMan) :uiBase(pUIMan), reward_item_info_(NULL), reward_message_manager_(KRewardMessageHeight, StrToWzID("mi17")), item_unit_renderer_(NULL), reward_button_(NULL), coin_text_(NULL), reward_slot_button_(NULL), reward_step_(NONE_STEP), confirm_dialog_key_(0), tooltip_position_(0), is_initialize(false) { SCItemSlotContainer::Init(SLOT_TOTAL_COUNT, 0); } uiCharaterAccumulatePointDialog::~uiCharaterAccumulatePointDialog() { Release(); SAFE_DELETE(reward_item_info_); } void uiCharaterAccumulatePointDialog::Init( CDrawBase * pDrawBase ) { uiBase::Init(pDrawBase); reward_button_ = static_cast(GetControlWZ(controls_id_[ACCUMULATEPOINT_REWARD_BUTTON])); SUN_ASSERT(reward_button_); coin_text_ = static_cast(GetControlWZ(controls_id_[ACCUMULATEPOINT_COIN_TEXT])); SUN_ASSERT(coin_text_); reward_slot_button_ = static_cast(GetControlWZ(controls_id_[ACCUMULATEPOINT_REWARD_ITEM_SLOT0])); SUN_ASSERT(reward_slot_button_); #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD for (int index = 0; index < IMAGE_SLOT_COUNTER; ++index) { blink_pictures_[index] = static_cast(GetControlWZ(controls_id_[ACCUMULATEPOINT_SELECT1_ITEM_PIC1+index])); SUN_ASSERT(blink_pictures_[index]); blink_pictures_[index+IMAGE_SLOT_COUNTER] = static_cast(GetControlWZ(controls_id_[ACCUMULATEPOINT_SELECT2_ITEM_PIC1+index])); SUN_ASSERT(blink_pictures_[index+REWARD_ITEM_GROUP_COUNT]); } #else for (int index = 0; index < REWARD_ITEM_GROUP_COUNT; ++index) { blink_pictures_[index] = static_cast(GetControlWZ(controls_id_[ACCUMULATEPOINT_SELECT1_ITEM_PIC1+index])); SUN_ASSERT(blink_pictures_[index]); blink_pictures_[index+REWARD_ITEM_GROUP_COUNT] = static_cast(GetControlWZ(controls_id_[ACCUMULATEPOINT_SELECT2_ITEM_PIC1+index])); SUN_ASSERT(blink_pictures_[index+REWARD_ITEM_GROUP_COUNT]); blink_pictures_[index+(REWARD_ITEM_GROUP_COUNT * 2)] = static_cast(GetControlWZ(controls_id_[ACCUMULATEPOINT_QUESTION_ITEM_PIC1+index])); SUN_ASSERT(blink_pictures_[index+(REWARD_ITEM_GROUP_COUNT * 2)]); } #endif repeat_button_[0] = static_cast(GetControlWZ(controls_id_[ACCUMULATEPOINT_INCREASE_BUTTON])); SUN_ASSERT(repeat_button_[0]); repeat_button_[1] = static_cast(GetControlWZ(controls_id_[ACCUMULATEPOINT_DECREASE_BUTTON])); SUN_ASSERT(repeat_button_[1]); repeat_text_ = static_cast(GetControlWZ(controls_id_[ACCUMULATEPOINT_REPEAT_TEXT])); SUN_ASSERT(repeat_text_); item_unit_renderer_ = new ItemUnitRenderer; SUN_ASSERT(item_unit_renderer_); if (item_unit_renderer_) { item_unit_renderer_->Init(GetDrawBase(), SLOT_TOTAL_COUNT); item_unit_renderer_->SetOverLap(FALSE); } display_timer_.Clear(); reward_item_info_ = NULL; #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD render_slot_icon_vector_.clear(); Render_slot_Ctrl_.clear(); list_refresh_timer_.Off(); list_refresh_timer_.On(1); list_refresh_timer_2.Off(); list_refresh_timer_2.On(1); #endif is_initialize = true; is_close_reserve_ = false; } void uiCharaterAccumulatePointDialog::Release() { render_slot_icon_vector_.clear(); SAFE_RELEASENDELETE(item_unit_renderer_); } void uiCharaterAccumulatePointDialog::OnShowWindow(BOOL val) { if (val) { //MoveDefaultWindowPos(); reward_sound_handle_ = 0; #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD #else HideAllBlinkPictureControls(); #endif g_InterfaceManager.LockDlgs(IM_CHARACTERSTATUS_MANAGER::CHARACTER_ACCUMULATEPOINT_DLG); keyMsg msg; ZeroMemory(&msg, sizeof(msg)); msg.dwType = eDoType_Accumulate_Dialog; msg.wParam = IM_CHARACTERSTATUS_MANAGER::CHARACTER_ACCUMULATEPOINT_DLG; msg.DoSomething = uiCharaterAccumulatePointDialog::ESCProcess; g_KeyQueueManager.PushBack(msg); } else { ClearItemContainer(); g_InterfaceManager.UnLockDlgs(); if (reward_item_info_) { ItemManager::Instance()->InsertInventoryTotalInfo(POINT_REWARD, (*reward_item_info_)); SAFE_DELETE(reward_item_info_); } #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD Render_slot_Ctrl_.clear(); render_slot_icon_vector_.clear(); save_repect_count_ = 0; #endif repeat_count_ = 1; reward_step_ = NONE_STEP; is_close_reserve_ = false; g_KeyQueueManager.DeleteMsg(eDoType_Accumulate_Dialog); } } void uiCharaterAccumulatePointDialog::Process(DWORD dwTick) { reward_message_manager_.Process(dwTick); } void uiCharaterAccumulatePointDialog::OnUpdateSolarDialog() { if ( ( reward_step_ == NONE_STEP || reward_step_ == WAIT_STEP || reward_step_ == PREPARE_STEP ) && is_close_reserve_ == true ) { ShowInterface(FALSE); } #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD for (int index = 0; index < IMAGE_SLOT_COUNTER; ++index) { blink_pictures_[index+IMAGE_SLOT_COUNTER]->ShowWindowWZ(WZ_HIDE); } #endif uiCharacterStatusMan* ui_manager = static_cast(GetMan()); if (ui_manager) { DWORD accumulate_point = ui_manager->accumulate_point(); TCHAR point_text[INTERFACE_STRING_LENGTH] = {0, }; Snprintf(point_text, INTERFACE_STRING_LENGTH, _T("%d"), accumulate_point); coin_text_->SetTextWZ(point_text); Snprintf(point_text, INTERFACE_STRING_LENGTH, _T("%d"), repeat_count_); repeat_text_->SetTextWZ(point_text); } #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD for (int i = 0 ; i < repeat_count_ ; ++i) { blink_pictures_[i+IMAGE_SLOT_COUNTER]->ShowWindowWZ(WZ_SHOW); } #endif #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD #else if (reward_step_ == DISPLAY_REWARD_STEP) { DWORD progress_time = display_timer_.GetProcessTime(); DWORD step_move = 0; int sound_index = 0; time_for_move_ = KInitTimeForMove; if (progress_time > kVelocityStepTime1) { if (remain_step_ == -1) { int remain_step = static_cast(order_item_position_) - static_cast(display_item_position_ % REWARD_ITEM_GROUP_COUNT); remain_step += REWARD_ITEM_GROUP_COUNT; remain_step %= REWARD_ITEM_GROUP_COUNT; if (remain_step == kLastStep + last_step_) { remain_step_ = kLastStep + last_step_; } } if (remain_step_ > -1) { float progress_ratio = static_cast(remain_step_) / (kLastStep + last_step_); progress_ratio = 1.0f - progress_ratio; time_for_move_ += static_cast(progress_ratio * progress_ratio * (KGapTimeForMove)); } } step_move = (progress_time - previous_step_time_) / time_for_move_; if (remain_step_ == 0) { reward_step_ = ORDER_REWARD_STEP; display_timer_.Clear(); display_timer_.SetTimer(KCloseTimeAfterOrder); g_SoundEffect.Play(STOP_SOUND_INDEX, Sound::Instance()->GetEffectVolume()); wzsnd_stop(reward_sound_handle_); reward_sound_handle_ = 0; if (reward_item_info_) { ItemManager::Instance()->InsertInventoryTotalInfo(POINT_REWARD, *reward_item_info_); SAFE_DELETE(reward_item_info_); } } if (remain_step_ >= 0) { float volume = static_cast(remain_step_) / (kLastStep + last_step_); if (volume > 1.0f) { volume = 1.0f; } wzsnd_set_volume(reward_sound_handle_, volume * Sound::Instance()->GetEffectVolume()); } DWORD blink_position = display_item_position_ % 18; blink_pictures_[blink_position]->ShowWindowWZ(WZ_HIDE); blink_pictures_[blink_position+REWARD_ITEM_GROUP_COUNT]->ShowWindowWZ(WZ_HIDE); if (step_move > 0) { previous_step_time_ += (step_move * time_for_move_); display_item_position_ += step_move; if (time_for_move_ <= KInitTimeForMove) { sound_index = EFFECT_SOUND1_INDEX; } else if (time_for_move_ <= KInitTimeForMove + (KGapTimeForMove / 2)) { sound_index = EFFECT_SOUND2_INDEX; } else if (time_for_move_ > KInitTimeForMove + (KGapTimeForMove / 2)) { sound_index = EFFECT_SOUND3_INDEX; } g_SoundEffect.Play(sound_index, Sound::Instance()->GetEffectVolume()); if (remain_step_ > 0) { remain_step_ -= step_move; if (remain_step_ < 0) { remain_step_ = 0; } } } blink_position = display_item_position_ % 18; if ((progress_time / kTimeForBlink) % 2) { blink_pictures_[blink_position]->ShowWindowWZ(WZ_SHOW); } else { blink_pictures_[blink_position+REWARD_ITEM_GROUP_COUNT]->ShowWindowWZ(WZ_SHOW); } } if (reward_step_ == ORDER_REWARD_STEP) { // ¾ÆÀÌÅÛ °áÁ¤ ¿¬Ãâ DWORD progress_time = display_timer_.GetProcessTime(); DWORD blink_position = display_item_position_ % 18; if ((progress_time / kTimeForBlink) % 2) { blink_pictures_[blink_position]->ShowWindowWZ(WZ_SHOW); blink_pictures_[blink_position+REWARD_ITEM_GROUP_COUNT]->ShowWindowWZ(WZ_HIDE); } else { blink_pictures_[blink_position]->ShowWindowWZ(WZ_HIDE); blink_pictures_[blink_position+REWARD_ITEM_GROUP_COUNT]->ShowWindowWZ(WZ_SHOW); } if (display_timer_.IsExpired() == TRUE) { if (repeat_count_ > 0) { repeat_count_--; reward_step_ = REPEAT_PREPARE_STEP; display_timer_.Clear(); display_timer_.SetTimer(KDisplayQuestionTime); HideAllBlinkPictureControls(); // Question Ç¥½Ã for (int index = 0; index < REWARD_ITEM_GROUP_COUNT; ++index) { blink_pictures_[index+(REWARD_ITEM_GROUP_COUNT * 2)]->ShowWindowWZ(WZ_SHOW); } } #ifdef _DEV_VER GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT, "AccumulatePoint OrderItemPosition(%d)", display_item_position_%18); #endif } } // ¹Ýº¹ ¿¬Ãâ if (reward_step_ == REPEAT_PREPARE_STEP) { if (display_timer_.IsExpired() == TRUE) { display_timer_.Clear(); uiCharacterStatusMan* ui_manager = static_cast(GetMan()); if (ui_manager) { ui_manager->SEND_MSG_CG_ITEM_QUERY_ACCUMULATE_POINT_ITEM_SYN(false); if (repeat_count_ == 0) { DWORD repeat_count = min(1, ui_manager->accumulate_point()); repeat_count_ = max(0, repeat_count); reward_step_ = WAIT_STEP; reward_button_->EnableWindowWZ(true); repeat_button_[0]->EnableWindowWZ(true); repeat_button_[1]->EnableWindowWZ(true); } } } } if (confirm_dialog_key_) { uiBase* confirm_dialog = GET_DIALOG(confirm_dialog_key_); if (confirm_dialog == NULL) { confirm_dialog_key_ = 0; g_InterfaceManager.LockDlgs(IM_CHARACTERSTATUS_MANAGER::CHARACTER_ACCUMULATEPOINT_DLG); } } if (g_Input.GetState(DIK_ESCAPE, KS_UP, TRUE) || g_Input.GetState(DIK_ESCAPE, IKS_UP, TRUE)) { if (IsVisible() == TRUE) { if ((reward_step_ == NONE_STEP) || (reward_step_ == WAIT_STEP) || (reward_step_ == PREPARE_STEP)) { ShowInterface(FALSE); } } } #endif } void uiCharaterAccumulatePointDialog::OnRenderSolarDialog() { RECT rc; POINT pt = g_pApplication->Get2DModeMapping(); SetRect(&rc, 0, 0, pt.x, pt.y); g_pSunRenderer->ColorFill(WzColor_RGBA(0,0,0,128), 0, 0, static_cast(rc.right), static_cast(rc.bottom)); GetDialogWZ()->OnDraw(true); #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD if(reward_step_ != REPEAT_PREPARE_STEP) { if ((reward_step_ == DISPLAY_REWARD_STEP) || (reward_step_ == ORDER_REWARD_STEP)) { static int Next_Item = 0; CCtrlButtonWZ* control_button = static_cast(GetControlWZ(controls_id_[ACCUMULATEPOINT_REWARD_ITEM_SLOT1 + save_repect_count_])); uiCharacterStatusMan* ui_manager = static_cast(GetMan()); DWORD time = list_refresh_timer_.SpentTime(); if(time > 40) { Next_Item++; if(Next_Item >= MSG_CG_ITEM_QUERY_ACCUMULATE_POINT_ITEM_ACK::ACCUMULATE_POINT_ITEM_COUNT) Next_Item = 0; Image_list_[Next_Item]->Render(&control_button->GetSizeRect()); list_refresh_timer_.Off(); list_refresh_timer_.On(1); } time = list_refresh_timer_2.SpentTime(); if(time > 500) { reward_step_ = REPEAT_PREPARE_STEP; Next_Item = 0; if (reward_item_info_) { ItemManager::Instance()->InsertInventoryTotalInfo(POINT_REWARD, *reward_item_info_); SAFE_DELETE(reward_item_info_); } Render_slot_Ctrl_.push_back(ACCUMULATEPOINT_REWARD_ITEM_SLOT1 + save_repect_count_); SCItemSlot& item_slot = (SCItemSlot&)GetSlot(order_item_position_); SCItemSlot temp_slot; memcpy(&temp_slot, &item_slot, sizeof(item_slot)); render_slot_icon_vector_.push_back(temp_slot); if ( is_close_reserve_ == true ) { is_close_reserve_ = false; repeat_count_ = 1; } save_repect_count_++; if(repeat_count_ > save_repect_count_) ui_manager->SEND_MSG_CG_ITEM_QUERY_ACCUMULATE_POINT_ITEM_SYN(false); list_refresh_timer_2.Off(); list_refresh_timer_2.On(1); } if(save_repect_count_ >= repeat_count_) { g_SoundEffect.StopUI(reward_sound_handle_); reward_sound_handle_ = g_SoundEffect.PlayUI(EFFECT_SOUND_NEW2); ui_manager->SEND_MSG_CG_ITEM_QUERY_ACCUMULATE_POINT_ITEM_SYN(false); DWORD repeat_count = min(1, ui_manager->accumulate_point()); repeat_count_ = max(0, repeat_count); reward_step_ = WAIT_STEP; reward_button_->EnableWindowWZ(true); repeat_button_[0]->EnableWindowWZ(true); repeat_button_[1]->EnableWindowWZ(true); } } } for (int i = 0 ; i < (int)Render_slot_Ctrl_.size() ; ++i) { SCItemSlot& item_slot = render_slot_icon_vector_[i]; CODETYPE image_code = GameFunc::GetImagecode(&item_slot, item_slot.GetCode()); BOOL is_limited = GameFunc::IsLimitedItem(&item_slot, item_slot.GetCode()); RESOURCECODE resourceCode = ResourceManager::Instance()->GetItemSlotImageResourceCode(image_code, is_limited); IconImage* SlotIconImage = ICONMGR()->Add(resourceCode); CCtrlButtonWZ* control_button = static_cast(GetControlWZ(controls_id_[Render_slot_Ctrl_[i]])); SlotIconImage->Render(&control_button->GetSizeRect()); uiToolTipMan* tooltip_manager = GET_DIALOG_MANAGER(uiToolTipMan, UIMAN_TOOLTIP); if (tooltip_manager) { int iMouseX = Mouse::Instance()->GetMouseX(); int iMouseY = Mouse::Instance()->GetMouseY(); RECT rc = control_button->GetSizeRect(); if (rc.left <= iMouseX && rc.right >= iMouseX) { if (rc.top <= iMouseY && rc.bottom >= iMouseY) { tooltip_manager->RegisterTooltipItem(&item_slot, FALSE); tooltip_manager->SetTooltipDialogID(GetDialogKey()); } } } } reward_message_manager_.Render(); #else POSTYPE item_position = static_cast(display_item_position_ % 18); if (item_unit_renderer_ && reward_step_ != REPEAT_PREPARE_STEP) { item_unit_renderer_->Render(); if ((reward_step_ == DISPLAY_REWARD_STEP) || (reward_step_ == ORDER_REWARD_STEP)) { SCItemSlot& item_slot = static_cast(GetSlot(item_position)); ItemUnitRenderer::RenderUnit* render_unit = item_unit_renderer_->GetItemUnit(item_slot.GetSerial()); RECT control_rect = reward_slot_button_->GetSizeRect(); render_unit->m_pIconImage->Render(&control_rect); } } reward_message_manager_.Render(); uiToolTipMan* tooltip_manager = GET_DIALOG_MANAGER(uiToolTipMan, UIMAN_TOOLTIP); if (tooltip_manager) { int iMouseX = Mouse::Instance()->GetMouseX(); int iMouseY = Mouse::Instance()->GetMouseY(); POSTYPE slot_pos = ACCUMULATEPOINT_REWARD_ITEM_SLOT0; for( ; slot_pos <= ACCUMULATEPOINT_REWARD_ITEM_SLOT18; ++slot_pos ) { CControlWZ* ctrl_ptr = GetControlWZ(controls_id_[slot_pos]); RECT rc = ctrl_ptr->GetSizeRect(); if (rc.left <= iMouseX && rc.right >= iMouseX) { if (rc.top <= iMouseY && rc.bottom >= iMouseY) { if (slot_pos == ACCUMULATEPOINT_REWARD_ITEM_SLOT0) { if (reward_step_ == ORDER_REWARD_STEP) { SCSlot& item_slot = GetSlot(item_position); tooltip_manager->RegisterTooltipItem(&item_slot, FALSE); tooltip_manager->SetTooltipDialogID(GetDialogKey()); } } else { if ((reward_step_ == PREPARE_STEP) || (reward_step_ == DISPLAY_REWARD_STEP) || (reward_step_ == ORDER_REWARD_STEP)) { POSTYPE item_pos = static_cast((slot_pos - ACCUMULATEPOINT_REWARD_ITEM_SLOT1) % 18); SCSlot& item_slot = GetSlot(item_pos); tooltip_manager->RegisterTooltipItem(&item_slot, FALSE); tooltip_manager->SetTooltipDialogID(GetDialogKey()); } } } } } } #endif } void uiCharaterAccumulatePointDialog::MessageProc( SI_MESSAGE * pMessage ) { POSTYPE control_position = 0xFF; tooltip_position_ = 0; for( POSTYPE index = 0 ; index < DIALOG_POS_MAX; ++index ) { if( controls_id_[index] == pMessage->dwCtrlID ) { control_position = index; break; } } if (control_position == 0xFF) { return; } switch (pMessage->eResultMsg) { case RT_MSG_LBUTTONCLICK: { switch(control_position) { case ACCUMULATEPOINT_REWARD_BUTTON: { #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD Render_slot_Ctrl_.clear(); render_slot_icon_vector_.clear(); save_repect_count_ = 0; #endif ClickRewardButton(); } break; case ACCUMULATEPOINT_CLOSE_BUTTON: { if ((reward_step_ == NONE_STEP) || (reward_step_ == WAIT_STEP) || (reward_step_ == PREPARE_STEP)) { ShowInterface(FALSE); } } break; case ACCUMULATEPOINT_INCREASE_BUTTON: { #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD Render_slot_Ctrl_.clear(); render_slot_icon_vector_.clear(); #endif uiCharacterStatusMan* ui_manager = static_cast(GetMan()); if (ui_manager) { int accumulate_point = static_cast(ui_manager->accumulate_point()); repeat_count_++; if ((repeat_count_ > KMaxRepeatCount) || (repeat_count_ > accumulate_point)) { repeat_count_ = min(KMaxRepeatCount, accumulate_point); } } } break; case ACCUMULATEPOINT_DECREASE_BUTTON: { #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD Render_slot_Ctrl_.clear(); render_slot_icon_vector_.clear(); #endif uiCharacterStatusMan* ui_manager = static_cast(GetMan()); if (ui_manager) { int accumulate_point = static_cast(ui_manager->accumulate_point()); repeat_count_--; if (repeat_count_ < 1) { repeat_count_ = min(KMaxRepeatCount, accumulate_point); } } } break; } } break; case RT_MSG_MOUSEOVER: { } break; default: { SolarDialog::MessageProc(pMessage); } break; } } void uiCharaterAccumulatePointDialog::ClearItemContainer() { DWORD item_serial = 0; for (POSTYPE index = 0; index < GetMaxSlotNum(); ++index) { SCItemSlot& item_slot = (SCItemSlot&)GetSlot(index); item_serial = (DWORD)item_slot.GetSerial(); if (item_serial != 0) { g_SlotKeyGenerator.Restore(item_serial); if (item_unit_renderer_) { item_unit_renderer_->RemoveItemUnit(item_serial); } } } ClearAll(); } void uiCharaterAccumulatePointDialog::PrepareRewardItemGroup(SLOTCODE* itemcode_array) { ClearItemContainer(); #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD itemcode_array_ = itemcode_array; Image_list_.clear(); #endif SCItemSlot temp_slot; DWORD item_serial; CCtrlButtonWZ* control_button; RECT control_rect; for (POSTYPE index = 0; index < MSG_CG_ITEM_QUERY_ACCUMULATE_POINT_ITEM_ACK::ACCUMULATE_POINT_ITEM_COUNT; ++index) { control_button = static_cast(GetControlWZ(controls_id_[ACCUMULATEPOINT_REWARD_ITEM_SLOT1+index])); SUN_ASSERT(control_button); if (control_button) { temp_slot.SetCode(itemcode_array[index]); item_serial = g_SlotKeyGenerator.GetKey(); temp_slot.SetSerial(item_serial); control_rect = control_button->GetSizeRect(); SCSlotContainer::InsertSlot(index, temp_slot); SCItemSlot& item_slot = (SCItemSlot&)GetSlot(index); #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD CODETYPE image_code = GameFunc::GetImagecode(&item_slot, item_slot.GetCode()); BOOL is_limited = GameFunc::IsLimitedItem(&item_slot, item_slot.GetCode()); RESOURCECODE resourceCode = ResourceManager::Instance()->GetItemSlotImageResourceCode(image_code, is_limited); IconImage* SlotIconImage = ICONMGR()->Add(resourceCode); Image_list_.push_back(SlotIconImage); #else if (item_unit_renderer_) { item_unit_renderer_->AddItemUnit(item_slot.GetSerial(), item_slot.GetCode(), &control_rect, &item_slot, control_button); } #endif } } if (reward_step_ == NONE_STEP || reward_step_ == WAIT_STEP) { reward_button_->EnableWindowWZ(true); repeat_button_[0]->EnableWindowWZ(true); repeat_button_[1]->EnableWindowWZ(true); #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD #else for (int index = 0; index < REWARD_ITEM_GROUP_COUNT; ++index) { blink_pictures_[index+(REWARD_ITEM_GROUP_COUNT * 2)]->ShowWindowWZ(WZ_HIDE); } #endif reward_step_ = PREPARE_STEP; } else if (reward_step_ == REPEAT_PREPARE_STEP) { reward_button_->EnableWindowWZ(false); repeat_button_[0]->EnableWindowWZ(false); repeat_button_[1]->EnableWindowWZ(false); ClickRewardButton(); reward_step_ = WAIT_FOR_ITEMGROUP; } } void uiCharaterAccumulatePointDialog::ClickRewardButton() { uiCharacterStatusMan* ui_manager = static_cast(GetMan()); if (ui_manager) { if ((reward_step_ == NONE_STEP) || (reward_step_ == WAIT_STEP)) { ui_manager->SEND_MSG_CG_ITEM_QUERY_ACCUMULATE_POINT_ITEM_SYN(false); } else if ((reward_step_ == PREPARE_STEP) || (reward_step_ == REPEAT_PREPARE_STEP)) { repeat_button_[0]->EnableWindowWZ(false); repeat_button_[1]->EnableWindowWZ(false); ui_manager->SEND_MSG_CG_ITEM_USE_ACCUMULATE_POINT_SYN(); reward_step_ = WAIT_FOR_ITEMGROUP; } } } void uiCharaterAccumulatePointDialog::DisplayRewardItem(MSG_CG_ITEM_USE_ACCUMULATE_POINT_ACK* recv_msg) { if (NULL == recv_msg) { SUN_ASSERT(recv_msg); return; } uiCharacterStatusMan* ui_manager = static_cast(GetMan()); if (ui_manager) { ui_manager->set_accumulate_point(recv_msg->m_wAccumulatePoint); } SAFE_DELETE(reward_item_info_); reward_item_info_ = new INVENTORY_TOTAL_INFO; memcpy(reward_item_info_, &(recv_msg->m_ItemInfo), recv_msg->m_ItemInfo.GetSize()); reward_step_ = DISPLAY_REWARD_STEP; order_item_position_ = recv_msg->m_byDropItemOrder; display_item_position_ = 0; time_for_move_ = KInitTimeForMove; remain_step_ = -1; last_step_ = kLastStep + GlobalFunc::GetRandom(kLastStep); g_SoundEffect.StopUI(reward_sound_handle_); reward_sound_handle_ = g_SoundEffect.PlayUI(EFFECT_SOUND_NEW1); // reward_sound_handle_ = g_SoundEffect.Play(BGM_INDEX, Sound::Instance()->GetEffectVolume(), TRUE); // g_SoundEffect.Play(START_SOUND_INDEX, Sound::Instance()->GetEffectVolume()); #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD list_refresh_timer_2.Off(); list_refresh_timer_2.On(1); list_refresh_timer_.Off(); list_refresh_timer_.On(1); #else display_timer_.Clear(); display_timer_.SetTimer(0); #endif previous_step_time_ = 0; reward_button_->EnableWindowWZ(false); #ifdef _DEV_VER GlobalFunc::DebugOutputMsg(eOUTPUT_MSG_CHAT, "MSG_CG_ITEM_USE_ACCUMULATE_POINT_ACK::m_byDropItemOrder(%d)", order_item_position_); #endif //_DEV_VER } void uiCharaterAccumulatePointDialog::HideAllBlinkPictureControls() { for (int index = 0; index < REWARD_ITEM_GROUP_COUNT; ++index) { blink_pictures_[index]->ShowWindowWZ(WZ_HIDE); blink_pictures_[index+REWARD_ITEM_GROUP_COUNT]->ShowWindowWZ(WZ_HIDE); } } void uiCharaterAccumulatePointDialog::InserRewardMessage(TCHAR* reward_message) { TEXT_MEMBER_SHARED_PTR_TYPE message_data(new Text_Member(reward_message, WzColor_RGB(0,255,0))); reward_message_manager_.Insert(message_data); } void uiCharaterAccumulatePointDialog::ProcessErrorCode(DWORD error_code) { switch (error_code) { case RC::RC_ACCUMULATE_POINT_FAILED: case RC::RC_ACCUMULATE_POINT_NOSPACEININVENTORY: case RC::RC_ACCUMULATE_POINT_HAVENOTPOINT: { if (is_initialize) { reward_step_ = NONE_STEP; reward_button_->EnableWindowWZ(true); repeat_button_[0]->EnableWindowWZ(true); repeat_button_[1]->EnableWindowWZ(true); #ifdef _NA_000000_20130726_RENEWAL_POINT_REWARD #else HideAllBlinkPictureControls(); display_timer_.Clear(); ClearItemContainer(); #endif SAFE_DELETE(reward_item_info_); } } break; } } void uiCharaterAccumulatePointDialog::ESCProcess( DWORD wParam, DWORD lParam ) { uiCharaterAccumulatePointDialog* dialog_ptr = GET_CAST_DIALOG(uiCharaterAccumulatePointDialog, IM_CHARACTERSTATUS_MANAGER::CHARACTER_ACCUMULATEPOINT_DLG); if (dialog_ptr == NULL) { return; } dialog_ptr->set_is_close_reserve_(true); } void uiCharaterAccumulatePointDialog::set_is_close_reserve_( const bool& is_close_reserve ) { is_close_reserve_ = is_close_reserve; } bool uiCharaterAccumulatePointDialog::get_is_close_reserve_() { return is_close_reserve_; } void uiCharaterAccumulatePointDialog::set_repeat_count_( const int& repeat_count ) { repeat_count_ = repeat_count; }