|
|
- 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
|