SevenDayTargetMainView = SevenDayTargetMainView or BaseClass(BaseView) local SevenDayTargetMainView = SevenDayTargetMainView local table_insert = table.insert local table_sort = table.sort function SevenDayTargetMainView:__init() self.base_file = "sevenDayTarget" self.layout_file = "SevenDayTargetMainView" self.layer_name = "UI" self.destroy_imm = true self.use_background = true --全屏界面默认使用这个参数 self.hide_maincancas = true --全屏界面需要放开隐藏主UI self.change_scene_close = true self.append_to_ctl_queue = false --是否要添加进界面堆栈 self.need_show_money = false --是否要显示顶部的金钱栏 self.is_show_bet_view = false --是否在显示投注界面 self.score_item_list = {} self.close_fog = true self.day_item_list = {} self.item_list = {} self.model = SevenDayTargetModel:getInstance() self.is_first_open = true self.cur_select_day = 1 self.mainVo = RoleManager.Instance.mainRoleInfo self.model:Fire(SevenDayTargetModel.REQUEST_SEVEN_DAY_TARGET_SCMD, 17600) self.item_index_cache = {} -- 记录当前每个成就对应的位置索引 self.load_callback = function () self:LoadSuccess() end self.open_callback = function ( ) self:OpenSuccess() end self.switch_callback = function(index) self:SwitchTab(index) end self.destroy_callback = function ( ) self:DestroySuccess() end self.ReOpen_callback = function () self:UpdateView() end end function SevenDayTargetMainView:Open( ) BaseView.Open(self) end function SevenDayTargetMainView:LoadSuccess() local nodes = { "task_progress_text:tmp", "con_skill_icon", "con_skill_icon/skill_icon:img", "bg:raw", "skill_desc_text:tmp","bg2:img", "skill_name_text:tmp", "item_scroll:scroll", "item_scroll/Viewport/item_con", "day_con", "score_progress:img", "btn/btn_red:obj", "btn:obj", "score_con", "score_text:tmp", "get_image:obj", "time_text:tmp", "btn/btn_text:obj", "btn/btn_text_gray:obj", "close_btn:obj","role_con", -- 2021.7.22新增 "icon_skill_name:img", "btn_get_pet:obj:imgex", "btn_get_pet/btn_get_pet_red:obj", "btn_get_pet/btn_get_pet_gray:obj", "btn_get_pet/btn_get_pet_text:obj", "get_pet_image:obj", } self:GetChildren(nodes) self:AddEvent() self.btn_img = self.btn:GetComponent('ImageExtend') self.item_scroll_scroll.vertical = false SetAnchoredPosition(self.bg, 3.5, 14.5) SetSizeDelta(self.bg, 1203, 633) lua_resM:setOutsideRawImage(self,self.bg_raw,GameResPath.GetViewBigBg("seven_day_target_bg_1203_633"),false) local x, y = GetAnchoredPosition(self.con_skill_icon) self.pos_data_y = y self.awardItem = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem,self.score_con) self.awardItem:SetItemSize(62, 62) local function bg_back_func( ... ) if self.background_wnd and self.background_wnd:GetComponent("RawImageExtend") then self:MoveUIToBack(self.background_wnd:GetComponent("RawImageExtend")) end self:MoveUIToBack(self.bg_raw) -- self:MoveUIToBack(self.bg2_img) end if self.background_wnd then bg_back_func() else self.bg_back_func = bg_back_func end self:UpdateModel() end function SevenDayTargetMainView:AddEvent() local function on_click( target ) if self.btn_obj == target then self.model:Fire(SevenDayTargetModel.REQUEST_SEVEN_DAY_TARGET_SCMD, 17602, 2, self.cur_select_day) elseif self.btn_get_pet_obj == target then if not self.is_receive then self.model:Fire(SevenDayTargetModel.REQUEST_SEVEN_DAY_TARGET_SCMD, 17602, 1, self.score_cfg[1].score) end elseif self.close_btn_obj == target then self:Close() end end AddClickEvent(self.btn_obj, on_click) AddClickEvent(self.close_btn_obj, on_click) AddClickEvent(self.btn_get_pet_obj, on_click) local function on_update_view( is_get_award ) self:UpdateView() self.update_need_anim = is_get_award self:UpdateTaskInfo() self:UpdateTime() end self.on_update_view_id = self.model:Bind(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO, on_update_view) local function on_close( ) self:Close() end self.on_close_id = self.model:Bind(SevenDayTargetModel.CLOSE_SEVEN_DAY_TARGET_MAIN_VIEW, on_close) end function SevenDayTargetMainView:OpenSuccess() self:UpdateView() end function SevenDayTargetMainView:ReOpen( ) end function SevenDayTargetMainView:UpdateView( ) self:UpdateTab() self:UpdateLeftInfo() self:UpdateTime() end function SevenDayTargetMainView:UpdateLeftInfo( ) local cfg = Config.Sevengoalscore local cur_score, server_data = self.model:GetSevenDayTargetScoreInfo() if not self.score_cfg then self.score_cfg = {} for k,v in pairsByKeys(cfg) do table_insert(self.score_cfg, v) end local sort_func = function ( a, b ) return a.score < b.score end table_sort(self.score_cfg, sort_func) end local cur_cfg = self.score_cfg[1] local reward_data = stringtotable(cur_cfg.reward) -- if not self.reward_item then -- self.reward_item = SevenDayTargetScoreItem.New(self.score_con) -- end -- self.reward_item:SetData(1, self.score_cfg[1], server_data[self.score_cfg[1].score], cur_score) self.awardItem:SetData(reward_data[1][2]) -- 按钮状态 if server_data[self.score_cfg[1].score] then -- 领了 self.is_receive = true else self.is_receive = false local can_get = false if cur_score >= self.score_cfg[1].score then -- 可以领 can_get = true end self.btn_get_pet_imgex.gray = not can_get self.btn_get_pet_red_obj:SetActive(can_get) self.btn_get_pet_gray_obj:SetActive(not can_get) end self.btn_get_pet_obj:SetActive(not self.is_receive) self.get_pet_image_obj:SetActive(self.is_receive) self.score_progress_img.fillAmount = cur_score/cur_cfg.score self.score_text_tmp.text = string.format("%s/%s", cur_score, cur_cfg.score) -- --积分和进度 -- if not self.score_mapping then -- self.score_mapping = { -- [0] = 0, -- [1] = 0.1, -- [2] = 0.30, -- [3] = 0.5, -- [4] = 0.7, -- [5] = 1, -- } -- end --找到现在属于哪个段 -- local cur_index = 0 -- for i,v in ipairs(self.score_cfg) do -- if cur_score >= v.score then -- cur_index = i -- end -- end -- if cur_index ~= #self.score_cfg then -- local last_score = cur_index == 0 and 0 or self.score_cfg[cur_index].score -- self.score_progress_img.fillAmount = (cur_score - last_score) / (self.score_cfg[cur_index+1].score - last_score) * (self.score_mapping[cur_index + 1] - self.score_mapping[cur_index] ) + self.score_mapping[cur_index] -- else -- self.score_progress_img.fillAmount = 1 -- end -- self.score_text_tmp.text = string.format("已获得积分:%s", cur_score) -- local y_space = 94 -- local y_offset = 20 -- local len = #self.score_cfg -- for i,v in ipairs(self.score_cfg) do -- local item = self.score_item_list[i] -- if not item then -- item = SevenDayTargetScoreItem.New(self.score_con) -- item:SetPosition(10, -y_space * (len -i) + y_offset ) -- self.score_item_list[i] = item -- end -- item:SetData(i, v, server_data[v.score], cur_score) -- end end function SevenDayTargetMainView:UpdateTab( ) local cur_day = self.model:GetSevenDayTargetLoginDay() or 1 cur_day = cur_day > 7 and 7 or cur_day if self.is_first_open then self.cur_select_day = cur_day end local x_space = 77 local x_offset = 0 local function on_click_day( day ) self:SetSelectDay(day) end for i=1,7 do local item = self.day_item_list[i] if not item then item = SevenDayTargetDayItem.New(self.day_con) item:SetPosition(111 * (i-1), 0) item:SetCallBackFunc(on_click_day) self.day_item_list[i] = item end item:SetData(i, cur_day, self.cur_select_day) end if self.is_first_open then self.cur_select_day = cur_day self.is_first_open = false self:UpdateTaskInfo() end end function SevenDayTargetMainView:SetSelectDay( day ) if self.cur_select_day == day then return end self.cur_select_day = day for i,v in ipairs(self.day_item_list) do v:SetSelect(day == i) end self:UpdateTaskInfo() end function SevenDayTargetMainView:UpdateTaskInfo( ) local cfg = self.model:GetSevenDayTargetTaskCFGByDay(self.cur_select_day) local server_data = self.model:GetSevenDayTargetInfo(self.cur_select_day) or {} --print('=======Msh:SevenDayTargetMainView.lua[223] ===TABLE====') --PrintTable(server_data) --排序 for i,v in ipairs(cfg) do if server_data[self.model:GetKeyValve(v.days, v.mod_id, v.sub_id)] then if server_data[self.model:GetKeyValve(v.days, v.mod_id, v.sub_id)].is_receive == 1 then--领取了的排最后 v.sort_id = 4 else local total_num = v.limit_times or 1 v.sort_id = server_data[self.model:GetKeyValve(v.days, v.mod_id, v.sub_id)].progress >= total_num and 1 or 2--完成了可领的在最上面 没完成没领的在中间 end else--没服务端数据的放中间 local data = stringtotable(v.jump_id) local cfg = OpenFun.LinkWin[data[1] .. "@" .. data[2]] local is_open, conf = false, false if cfg then is_open, conf = GetModuleIsOpen(cfg.winId, cfg.subId) else is_open, conf = GetModuleIsOpen(v.mod_id, v.sub_id) end -- local is_open, conf = GetModuleIsOpen(v.mod_id, v.sub_id) if is_open then v.sort_id = 2 else v.sort_id = 3 end end end local sort_func = function ( a, b ) if a.sort_id ~= b.sort_id then return a.sort_id < b.sort_id else return a.order_id < b.order_id end end table_sort(cfg, sort_func) ----------item位移动画-start--------- -- 2021.7.22 改版后只有四个任务 没动画了 --[[ self.task_creator = self.task_creator or self:AddUIComponent(UI.ItemListCreator) -- 停止一下动画 self.model:SetTaskItemAnimState(false) -- 默认设置没有动画 self.item_scroll_scroll.vertical = true self.task_creator:IterateItems(function ( item, i ) item:StopAnim(i) end) if need_top then -- 置顶 self.task_creator:Reset() end -- 更新完全部item后回调(动画可能还在播) local update_cache_func = function ( ) self.update_need_anim = false end -- 使用的item数目 local ITEM_NUM = 8 -- 播完动画的回调 self.animing_item_count = ITEM_NUM local anim_call_back = function () self.animing_item_count = self.animing_item_count - 1 if self.animing_item_count <= 0 then self.model:SetTaskItemAnimState(false) -- 动画完毕 self.item_scroll_scroll.vertical = true self.update_need_anim = false end end -- 找出一次性位移 很多索引 的数据(超出了item_num的范围) local down_item_new_index = false local down_item_data = false if self.update_need_anim then self.model:SetTaskItemAnimState(true) -- 动画中 self.item_scroll_scroll.vertical = false for new_index, v in ipairs(cfg) do local key = v.mod_id * 1000000 + v.sub_id * 1000 + v.difficulty local old_index = self.item_index_cache[key] if old_index and new_index - old_index >= ITEM_NUM then down_item_data = v down_item_new_index = new_index end end end local tag_all_info = { data_list = cfg, item_con = self.item_con, item_class = SevenDayTargetTaskItem, item_height = 86, start_x = 3, start_y = -2.5, space_y = 0, scroll_view = self.item_scroll, create_frequency = 0.01, reuse_item_num = ITEM_NUM, on_update_item = function(item, i, v) if i == ITEM_NUM and down_item_data and self.update_need_anim then -- 拿一下这个平时看不到的item用一用 local key = down_item_data.mod_id * 1000000 + down_item_data.sub_id * 1000 + down_item_data.difficulty local old_index = self.item_index_cache[key] local new_index = down_item_new_index -- 这个item是借用的 得还回去 所以单独给他刷一刷新 local anim_call_back_update = function ( ) self.task_creator:IterateItems(function ( item_temp, ii, vv ) if item_temp == item then item:SetData(vv, ii, (server_data[vv.mod_id] and server_data[vv.mod_id][vv.sub_id]) and server_data[vv.mod_id][vv.sub_id][vv.difficulty] or nil) item:SetIndexPos(ii) end end) anim_call_back() end local temp_server_data = (server_data[v.mod_id] and server_data[v.mod_id][v.sub_id]) and server_data[v.mod_id][v.sub_id][v.difficulty] or nil item:MoveNewIndexPosAnimAndUpdate(old_index, new_index, down_item_data, temp_server_data,anim_call_back_update) self.item_index_cache[key] = new_index down_item_data = nil else local key = v.mod_id * 1000000 + v.sub_id * 1000 + v.difficulty local need_anim = self.update_need_anim and self.item_index_cache[key] local old_index = need_anim and self.item_index_cache[key] or i local new_index = i if need_anim then local temp_server_data = (server_data[v.mod_id] and server_data[v.mod_id][v.sub_id]) and server_data[v.mod_id][v.sub_id][v.difficulty] or nil item:MoveNewIndexPosAnimAndUpdate(old_index, new_index, v, temp_server_data, anim_call_back) else if self.update_need_anim then anim_call_back() -- 这个item不走动画 直接回调 end item:SetData(v, new_index, (server_data[v.mod_id] and server_data[v.mod_id][v.sub_id]) and server_data[v.mod_id][v.sub_id][v.difficulty] or nil) end self.item_index_cache[key] = new_index end end, } self.task_creator:UpdateItems(tag_all_info)--]] ----------item位移动画-end----------- ----------新版创建-start--------- for i=1, 4 do self.item_list[i] = self.item_list[i] or SevenDayTargetTaskItem.New(self.item_con) local item = self.item_list[i] local temp_data = cfg[i] item:SetData(temp_data, i, server_data[self.model:GetKeyValve(temp_data.days, temp_data.mod_id, temp_data.sub_id)] or nil) item:SetAnchoredPosition(3, -2.5 - 86 * (i - 1)) end ----------新版创建-end----------- local cur_num = 0 for i,v in pairs(server_data) do -- for ii,vv in pairs(v) do -- for iii,vvv in pairs(vv) do local cfg = self.model:GetSevenDayTargetTaskOneCFG(v.days, v.mod_id, v.sub_id) if cfg then if v.progress >= cfg.limit_times then cur_num = cur_num + 1 end end -- end -- end end local total_num = TableSize(cfg) -- self.task_progress_img.fillAmount = cur_num/total_num local color = cur_num ~= total_num and ColorUtil.RED_DARK or ColorUtil.GREEN_DARK self.task_progress_text_tmp.text = string.format("%s %s/%s", HtmlColorTxt("当前进度", "#fdffc2"), HtmlColorTxt(cur_num, color),total_num) local skill_data = self.model:GetSevenDayTargetSkillInfo() -- 未达到领取条件时设置按钮变灰 local have_red = cur_num >= total_num and not skill_data[self.cur_select_day] SetImageGray(self.btn_img, not have_red) self.btn_text_obj:SetActive(have_red) self.btn_text_gray_obj:SetActive(not have_red) self.btn_red_obj:SetActive(have_red) self.btn_obj:SetActive(not skill_data[self.cur_select_day]) self.get_image_obj:SetActive(skill_data[self.cur_select_day]) local skill_reward_cfg = Config.Sevenskillreward if skill_reward_cfg[self.cur_select_day] then local skill_cfg = SkillManager:getInstance():getSkillFromConfig(skill_reward_cfg[self.cur_select_day].skill_reward) -- lua_resM:setOutsideImageSprite(self,self.skill_icon_img,GameResPath.GetSkillIcon(skill_reward_cfg[self.cur_select_day].skill_reward),false) lua_resM:setImageSprite(self, self.skill_icon_img, "sevenDayTarget_asset", "sevenDayTarget_skill_" .. skill_reward_cfg[self.cur_select_day].skill_reward , true) lua_resM:setImageSprite(self, self.icon_skill_name_img, "sevenDayTarget_asset", "sevenDayTarget_font_" .. skill_reward_cfg[self.cur_select_day].skill_reward , true) self.skill_name_text_tmp.text = skill_reward_cfg[self.cur_select_day].name self.skill_desc_text_tmp.text = skill_cfg.lvs[1].desc self:StartAction() end end function SevenDayTargetMainView:UpdateModel( ) local res_data = { father_node = self, transform = self.role_con, fashion_type = FuncOpenModel.TypeId.Pet, figure_id = 1003, scale = 300, ui_model_type = UIModelCommon.ModelType.BackModel, layer_name = self.layer_name, position = Vector2(-20 + 50, 108+(ScreenHeight-720)/2), } FuncOpenModel:getInstance():SetModelRes(res_data) end function SevenDayTargetMainView:UpdateTime( ) local server_data = self.model:GetSevenDayTargetInfo() if TableSize(server_data) > 0 then local time = server_data.left_time local function on_time_down() local rest_time = time - TimeUtil:getServerTime( ) if rest_time <= 0 then if self.count_time_id then GlobalTimerQuest:CancelQuest(self.count_time_id) self.count_time_id = nil end self.time_text_tmp.text = "" else self.time_text_tmp.text = string.format("距离活动结束还有%s", HtmlColorTxt(TimeUtil:timeConvert7(rest_time), ColorUtil.GREEN_DARK)) end end if not self.question_time_id then self.question_time_id = GlobalTimerQuest:AddPeriodQuest(on_time_down, 1, -1) end end end -- 动画 function SevenDayTargetMainView:StartAction( ) self:StopAction( ) -- 移动 local function move_down(percent) SetAnchoredPositionY(self.con_skill_icon, self.pos_data_y - 10 * percent) end local action1 = cc.CustomUpdate.New(2, move_down) local function move_up(percent) SetAnchoredPositionY(self.con_skill_icon, self.pos_data_y - 10 * (1-percent)) end local action2 = cc.CustomUpdate.New(2, move_up) ------------------------------------------------ local action9 = cc.Sequence.New( action1, action2) local action10 = cc.RepeatForever.New( action9 ) cc.ActionManager:getInstance():addAction(action10, self.con_skill_icon) end function SevenDayTargetMainView:StopAction( ) cc.ActionManager:getInstance():removeAllActionsFromTarget(self.con_skill_icon) SetAnchoredPositionY( self.con_skill_icon, self.pos_data_y ) end function SevenDayTargetMainView:DestroySuccess( ) if self.awardItem then UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.awardItem) self.awardItem = nil end for i,v in ipairs(self.score_item_list) do v:DeleteMe() v = nil end self.score_item_list = {} -- if self.reward_item then -- self.reward_item:DeleteMe() -- self.reward_item = nil -- end for i,v in ipairs(self.day_item_list) do v:DeleteMe() v = nil end self.day_item_list = {} if self.on_update_view_id then self.model:UnBind(self.on_update_view_id) self.on_update_view_id = nil end if self.on_close_id then self.model:UnBind(self.on_close_id) self.on_close_id = nil end if self.count_time_id then GlobalTimerQuest:CancelQuest(self.count_time_id) self.count_time_id = nil end for i,v in ipairs(self.item_list) do v:DeleteMe() v = nil end self.item_list = {} self:StopAction() end