ExpDunRouteItem = ExpDunRouteItem or BaseClass(BaseItem) local ExpDunRouteItem = ExpDunRouteItem local SetImageGray = SetImageGray function ExpDunRouteItem:__init(parent_wnd,prefab_asset,layer_name) self.base_file = "expDun" self.layout_file = "ExpDunRouteItem" self.parent_wnd = parent_wnd self.layer_name = layer_name self.is_selected = false self.show_reward = false self.limit_page = 0 self.wave_node_list = {} self.model = ExpDunModel:getInstance() self.dun_model = BaseDungeonModel:getInstance() self:Load() end function ExpDunRouteItem:Load_callback() local nodes = { "bg:img", "bg/box:obj:img", "bg/selected:obj:img", "bg/selected/route_exp:tmp", "bg/selected/route_exp_bg:img", "bg/box_red:img", -- 星星节点 "bg/light_con:obj", "bg/route_name:obj:tmp", } self:GetChildren(nodes) self.ori_arrow_posy = 45 self.up_arrow_posy = self.ori_arrow_posy + 5 self.down_arrow_posy = self.ori_arrow_posy - 5 SetAnchoredPositionY(self.selected, self.up_arrow_posy) self:AddEvents() if self.need_refreshData then self:UpdateView() end end function ExpDunRouteItem:AddEvents( ) local function click_event(target) if target == self.box_obj then if self.receive_status == 0 then self.dun_model:Fire(BaseDungeonModel.REQUEST_CCMD_EVENT, 61045, BaseDungeonModel.EXP_DUN_ID, self.cur_ms_wave) else self.model:Fire(ExpDunModel.SHOW_MS_REWARD, self.data.ms_data, self.transform.anchoredPosition, self.index) end end end AddClickEvent(self.box_obj, click_event) -- 领取成功后要更新领取状态 local function update_receive_flag() self:UpdateReceiveData() end self:BindEvent(self.dun_model, BaseDungeonModel.UPDATE_EXP_ROUTE_DATA, update_receive_flag) end -- cur_wave:当前进行中的波次 function ExpDunRouteItem:SetData(data, cur_wave, index, limit_page_min_wave) self.data = data self.cur_wave = cur_wave self.index = index self.limit_page_min_wave = limit_page_min_wave self.cur_ms_wave = self.data.ms_data.wave if self.is_loaded then self.need_refreshData = false self:UpdateView() else self.need_refreshData = true end end function ExpDunRouteItem:UpdateView( ) if self.data then local is_lower_index = self.index % 2 == 1 -- 是否是处于下侧的item SetAnchoredPosition(self.bg, 64, is_lower_index and -33.5 or 33.5) SetAnchoredPositionY(self.light_con, is_lower_index and 0 or -56) -- 是否还没开始打 local still_unlock = self.cur_ms_wave > self.cur_wave + 1 lua_resM:setImageSprite(self, self.bg_img, "expDun_asset", still_unlock and "exp_dun_ms_point1" or "exp_dun_ms_point2") local is_limit = self.limit_page_min_wave and self.cur_ms_wave >= self.limit_page_min_wave or false SetImageGray(self.bg_img, is_limit) SetImageGray(self.box_img, is_limit) self.route_name_tmp.text = string.format("第%s波", self.cur_ms_wave) -- 提前获取下一波可以获得的经验值 local next_wave = self.cur_wave < TableSize(Config.Expdunwave) and self.cur_wave + 1 or self.cur_wave local wave_cfg = self.dun_model:GetDunWaveCfg(BaseDungeonModel.EXP_DUN_ID, next_wave) local exp_num = 0 if wave_cfg and wave_cfg.first_reward and TableSize(wave_cfg.first_reward) > 0 then for k, v in ipairs(wave_cfg.first_reward) do if v[1] == 5 then -- 经验 exp_num = exp_num + v[3] end end end local next_wave_exp_str = string.format("经验%s", WordManager:ConvertNum1(exp_num)) -- 加载波数节点点亮 for k, v in ipairs(self.wave_node_list) do v:SetVisible(false) v:ShowLight(false) end local normal_node_num = #self.data.normal_data local item_gap_x = (self.light_con.sizeDelta.x - 30 * normal_node_num) / (normal_node_num + 1) local item_gap_y = 36 / (normal_node_num - 1) for k, v in ipairs(self.data.normal_data) do -- 普通的路线节点 self.wave_node_list[k] = self.wave_node_list[k] or ExpDunRouteWaveItem.New(self.light_con) self.wave_node_list[k]:ShowLight(v.wave <= self.cur_wave) self.wave_node_list[k]:SetSelected(v.wave == self.cur_wave + 1, next_wave_exp_str) self.wave_node_list[k]:SetVisible(true) self.wave_node_list[k]:SetAnchoredPosition( (k - 1) * (30 + item_gap_x) + item_gap_x + 2, 36 * (is_lower_index and 1 or -1) + (is_lower_index and -1 or 1) * item_gap_y * k ) end -- 本节点是不是下一次挑战要继续的节点 local is_next = self.cur_ms_wave == self.cur_wave + 1 self.selected_obj:SetActive(is_next) self.route_exp_bg_img.enabled = is_next self.route_exp_tmp.text = is_next and next_wave_exp_str or "" self:StartNextWaveArrowAnim(is_next) self:UpdateReceiveData() end end function ExpDunRouteItem:StartNextWaveArrowAnim(show) self:StopArrowAnim() if show then local move_up_func = function () local function repeat_func() self:StartNextWaveArrowAnim(true) end self.arrow_move_up_id = TweenLite.to(self, self.selected, TweenLite.UiAnimationType.POSY, self.up_arrow_posy, 1.2, repeat_func) end self.arrow_con_move_down_id = TweenLite.to(self, self.selected, TweenLite.UiAnimationType.POSY, self.down_arrow_posy, 1.2, move_up_func) end end function ExpDunRouteItem:StopArrowAnim() if self.arrow_con_move_down_id then TweenLite.Stop(self.arrow_con_move_down_id) self.arrow_con_move_down_id = nil end if self.arrow_move_up_id then TweenLite.Stop(self.arrow_move_up_id) self.arrow_move_up_id = nil end end function ExpDunRouteItem:UpdateReceiveData( ) -- 加载领取信息 0为未领取,1为已领取 没有的为空记-1 self.receive_status = self.dun_model:GetDunWaveRewardData(BaseDungeonModel.EXP_DUN_ID, self.cur_ms_wave) or -1 lua_resM:setImageSprite(self, self.box_img, "expDun_asset", self.receive_status == 1 and "exp_route_box2" or "exp_route_box1", true) self.box_red_img.enabled = self.receive_status == 0 end function ExpDunRouteItem:__delete( ) for k, v in pairs(self.wave_node_list) do v:DeleteMe() v = nil end self.wave_node_list = nil self:StopArrowAnim() end