TaskAnnounceView = TaskAnnounceView or BaseClass(BaseView) local TaskAnnounceView = TaskAnnounceView function TaskAnnounceView:__init() self.base_file = "taskAnnounce" self.layout_file = "TaskAnnounceView" self.layer_name = "UI" self.destroy_imm = true self.use_background = true self.hide_maincancas = false self.change_scene_close = true self.cur_select = false self.data_list = false -- self.use_local_view = true self.is_set_zdepth = false self.blur_activity_bg = true self.use_show_anim = true self.use_hide_anim = true self.item_list = false self.reward_item_list = {} self.model = TaskAnnounceModel:getInstance() self.mainVo = RoleManager:getInstance():GetMainRoleVo() self.loop_mgr = LoopScrowViewMgr.New() self.column_num = 1 --一行多少个图标 self.show_count = 7 self.data_list_num = false self.ui_effect = false self.open_id = false self.load_callback = function() self:LoadSuccess() self:InitEvent() end self.open_callback = function() self:UpdateView() end self.close_callback = function( ) end self.destroy_callback = function() self:Clear() end end function TaskAnnounceView:Open(open_id) self.open_id = open_id BaseView.Open(self) end function TaskAnnounceView:LoadSuccess() local nodes = { "bg:raw", "reward_con/jum_btn:obj", "right_red_dot:obj", "rt_item:raw:obj", "desc:tmp", "right:obj", "reward_con/tips:tmp", "title_img:img", "left_red_dot:obj", "reward_con/get_btn:obj", "ScrollView/Viewport:img", "ScrollView/Viewport/Content", "ScrollView/Viewport/Content/parent", "reward_con/item_con:obj", "left:obj", "close_btn:obj", "ScrollView:scroll:obj", "icon:img:obj", "reward_con/get_btn/get_btn_red_dot:obj", "reward_con/get_done:obj", "continue_btn:obj", "continue_btn/continue_btn_txt:tmp", "continue_tips:tmp:obj", "reward_con:obj", } self:GetChildren(nodes) self.task_tip_table = {} for i=1,2 do self.task_tip_table[i] = {} self.task_tip_table[i].dot = self:GetChild("task_con/task_dot_" .. i).gameObject self.task_tip_table[i].txt = self:GetChild("task_con/task_tps_" .. i):GetComponent("TMPro.TextMeshProUGUI") end self.continue_btn_txt_tmp.text = "立即开启" self.continue_tips_tmp.text = HtmlColorTxt("产出大量高级战魂", "#2cf86f") self.right_obj:SetActive(true) self.right_red_dot_obj:SetActive(true) self.left_obj:SetActive(true) self.left_red_dot_obj:SetActive(true) self.ScrollView_obj:SetActive(true) 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) lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("task_announce_bg_988_458")) end if self.background_wnd then bg_back_func() else self.bg_back_func = bg_back_func end self.mask_id = self:RegisterMask(self.Viewport_img) end function TaskAnnounceView:InitEvent() local function onBtnClickHandler(target) if target == self.left_obj then self:OnClickLeft() elseif target == self.right_obj then self:OnClickRight() elseif target == self.close_btn_obj then self:Close() elseif target == self.continue_btn_obj then self:Close() elseif target == self.get_btn_obj then if self.data then self.model:Fire(TaskAnnounceModel.REQUEST_CCMD_EVENT, 18201, self.data.id) end elseif target == self.jum_btn_obj then if self.data then local jump_info = self.data and self.data.jump or "" local jump_info = stringtotable(jump_info) if jump_info and jump_info[1] and jump_info[2] then self:Close() OpenFun.Open(tonumber(jump_info[1]), tonumber(jump_info[2])) end end end end AddClickEvent(self.close_btn_obj,onBtnClickHandler) AddClickEvent(self.left_obj,onBtnClickHandler) AddClickEvent(self.right_obj,onBtnClickHandler) AddClickEvent(self.get_btn_obj,onBtnClickHandler) AddClickEvent(self.jum_btn_obj,onBtnClickHandler) AddClickEvent(self.continue_btn_obj,onBtnClickHandler) local function onUpdateView() if self._use_delete_method then return end self.has_open = false self:UpdateView() self:UpdateCenter() self.model:GetRewardByIndexSide(nil,nil, true) end self.update_view_id = self.model:Bind(TaskAnnounceModel.UPDATE_ANNOUNCE_VIEW, onUpdateView) end function TaskAnnounceView:UpdateView() self.model:GetRewardByIndexSide(nil,nil, true) local list = self.model:GetTaskAnnounceListInView() local open_day = ServerTimeModel:getInstance():GetOpenServerDay() self.continue_btn_obj:SetActive(false) self.continue_tips_obj:SetActive(false) self.reward_con_obj:SetActive(true) --只展示一个特殊的样式 if self.open_id and list and #list > 0 then local t = false for i,v in ipairs(list) do if v.id == self.open_id then t = v break end end if t then self.data_list = {[1] = t} self.data_list_num = 1 self.right_obj:SetActive(false) self.right_red_dot_obj:SetActive(false) self.left_obj:SetActive(false) self.left_red_dot_obj:SetActive(false) self.ScrollView_obj:SetActive(false) self.reward_con_obj:SetActive(false) self.continue_btn_obj:SetActive(true) self.continue_tips_obj:SetActive(true) else self.data_list = list self.data_list_num = #list or 0 end else self.data_list = list self.data_list_num = #list or 0 end -- self.data_list = list -- self.data_list_num = #list or 0 if list then if not self.item_list then self.item_list = {} local click_call_back = function (idx) self:SelectItem(idx) end for i = 1, self.show_count do local item = self.item_list[i] if item == nil then item = TaskAnnounceItem.New(self.parent) item:SetClickCallBack(click_call_back) self.item_list[i] = item end end end local function wrap_callback() self:WrapContent() end self.loop_mgr:Init(self.ScrollView, self.Content, self.column_num, 230 , 130, function(item,index,realIndex) if item and realIndex > 0 and realIndex <= #list then item:SetData(realIndex, list[realIndex], self.mask_id) item:SetSelect(realIndex == self.cur_select) end end, nil,nil,nil, wrap_callback) if not self.has_open then self.loop_mgr:InitChildren(self.item_list, #list) self.loop_mgr:RestToBeginning() self.loop_mgr:SetContentSizeData() local index local is_open = false for k,v in pairs(list) do if v and v.has_open and ((not index) or (index and k >= index)) then index = k if self.model:GetRewardData(v.id) == 1 then break end end if v and not v.has_open then index = k break else is_open = true end end if not index then index = is_open and #self.data_list_num - 3 or 1 end if index then index = index > (self.data_list_num - 3) and self.data_list_num - 3 or index index = index < 1 and 1 or index self.loop_mgr:JumpToChild(index - 1) self:SelectItem(index) end else self.loop_mgr:InitChildren(self.item_list, #list) self.loop_mgr:ForceUpdateCurrentItems() self.loop_mgr:SetContentSizeData() end self.has_open = true end end function TaskAnnounceView:Clear() if self.item_list then for k,v in pairs(self.item_list) do v:DeleteMe() v = nil end self.item_list = false end for k,v in pairs(self.reward_item_list) do v:ReleaseObj() end self.reward_item_list = {} if self.loop_mgr then self.loop_mgr:DeleteMe() self.loop_mgr = nil end if self.update_view_id then self.model:UnBind(self.update_view_id) self.update_view_id = nil end self:ClearUIEffect(self.rt_item) lua_resM:clearRoleMode(self) end function TaskAnnounceView:SelectItem(idx) if self.cur_select ~= idx then self.cur_select = idx for i,v in ipairs(self.item_list) do v:SetSelect(v:GetItemIdx() == self.cur_select) end self:UpdateCenter() end end function TaskAnnounceView:WrapContent() if self.data_list_num and self.data_list_num >= 4 then local x = GetAnchoredPosition(self.Content) local left_b = x < -229 local right_b = x > -229 * (self.data_list_num - 5) self.left_obj:SetActive(left_b) self.right_obj:SetActive(right_b) local idx = math.ceil(math.abs( x / 229)) local left_idx = idx local right_idx = idx + 4 self.left_red_dot_obj:SetActive(left_b and self.model:GetRewardByIndexSide(left_idx, true)) self.right_red_dot_obj:SetActive(right_b and self.model:GetRewardByIndexSide(right_idx)) end end function TaskAnnounceView:OnClickLeft() local x = GetAnchoredPosition(self.Content) if x >= -229 * 4 then self.loop_mgr:JumpToChild(1) else local index = math.ceil(- x / 229 ) index = index - 4 self.loop_mgr:JumpToChild(index) end end function TaskAnnounceView:OnClickRight() local x = GetAnchoredPosition(self.Content) if x <= -229 * (self.data_list_num - 4) then self.loop_mgr:JumpToChild((self.data_list_num - 4)) else local index = math.floor(- x / 229 ) index = index + 5 self.loop_mgr:JumpToChild(index) end end function TaskAnnounceView:CancelHide() BaseView.CancelHide(self) self:UpdateCenter() end function TaskAnnounceView:UpdateCenter() if self.data_list and self.cur_select then self.data = self.data_list[self.cur_select] self:StopOpenFunTweenAnimation() if self.data then self.desc_tmp.text = Trim(self.data.func_desc) self.tips_tmp.text = self.data.has_open and HtmlColorTxt("已开放", "#2cf86f") or Trim(self.data.con_desc) local task_tip = {} task_tip[1] = Trim(self.data.mod_desc1) task_tip[2] = Trim(self.data.mod_desc2) for i,v in ipairs(task_tip) do if v == "" then self.task_tip_table[i].dot:SetActive(false) self.task_tip_table[i].txt.text = "" else self.task_tip_table[i].dot:SetActive(true) self.task_tip_table[i].txt.text = v end end local icon_res = Trim(self.data.title_pic) lua_resM:setOutsideImageSprite(self, self.title_img_img, GameResPath.GetTaskAnnounce(icon_res), true) if self.data.reward and self.data.reward ~= "" then local reward = ErlangParser:GetInstance():Parse(self.data.reward) for k,v in pairs(reward) do local item = self.reward_item_list[k] if item == nil then item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.item_con, nil, self.layer_name) self.reward_item_list[k] = item end item:SetData(v[2], v[3], nil, nil, nil, nil, nil, self.mask_id) item:SetVisible(true) item:SetItemSize(62,62) end else for k,v in pairs(self.reward_item_list) do if v then v:SetVisible(false) end end end if self.data.icon and self.data.icon ~= 0 then self:StartOpenFunTweenAnimation() local call_back = function ( ... ) local size_x, size_y = GetSizeDeltaXY(self.icon.transform) if size_x < 100 or size_y < 100 then SetLocalScale(self.icon.transform, 1.4, 1.4, 1.4) else --SetLocalScale(self.icon.transform, 1, 1, 1) SetLocalScale(self.icon.transform, 0.7, 0.7, 0.7) end end -- SetAnchoredPosition(self.icon.transform, -144, 39) self.icon.gameObject:SetActive(true) lua_resM:setOutsideImageSprite(self, self.icon_img, GameResPath.GetTaskAnnounce("task_announce_icon_" .. self.data.icon), true, call_back) else self.icon.gameObject:SetActive(false) end self:ClearUIEffect(self.rt_item) lua_resM:clearRoleMode(self) local fashion_type if self.data.model_res and self.data.model_res ~= 0 and Trim(self.data.model_res) ~= "" then self.rt_item_obj:SetActive(true) local model_data = stringtotable(Trim(self.data.model_res)) fashion_type = tonumber(model_data[1]) local figure_id = tonumber(model_data[2]) local position = Vector3(0,0,0) local scale = 1 local action_name_list = {"show"} if fashion_type == 1004 then -- 武器 action_name_list = {"show3"} end local style --武器要根据每个职业自己的位置 if fashion_type == 1004 then local career = RoleManager.Instance.mainRoleInfo.career style = TaskAnnounceModel.WeaponUIStyle[career] --如果是龙神宝库,虽然也是坐骑类型,但是这个坐骑比较大,特殊设置把 elseif self.data.id == 47 then style = TaskAnnounceModel.TAViewUIStyle[9999] else style = TaskAnnounceModel.TAViewUIStyle[fashion_type] end if style then scale = tonumber(style[1]) position = Vector3(style[2],style[3],style[4]) else print("功能预告没有设置模型展示参数 类型 ", fashion_type) scale = 300 position = Vector3(0,0, 0) end if fashion_type == 1301 then self.rt_item.localRotation = Quaternion.Euler(-25, 0, 0) else self.rt_item.localRotation = Quaternion.Euler(0, 0, 0) end SetLocalPositionZ(self.rt_item, -2000) local res_data = { father_node = self, transform = self.rt_item, fashion_type = fashion_type, figure_id = figure_id, action_name_list = action_name_list, size = Vector2(1280,720), scale = scale, position = position, show_shadow = true, rotate = 0, ui_model_type = UIModelCommon.ModelType.BackModel, } FuncOpenModel:getInstance():SetModelRes(res_data) else self.rt_item_obj:SetActive(false) end self:UpdateState() end end end function TaskAnnounceView:StartOpenFunTweenAnimation() local call_fun = function () local function onCompleted() self:StartOpenFunTweenAnimation() end self.oepn_func_tween_id2 =TweenLite.to(self, self.icon.transform,TweenLite.UiAnimationType.POSY, 73+ 10,1,onCompleted) end self.oepn_func_tween_id1 =TweenLite.to(self, self.icon.transform,TweenLite.UiAnimationType.POSY, 73 - 10, 1, call_fun) end function TaskAnnounceView:StopOpenFunTweenAnimation() if self.oepn_func_tween_id1 then TweenLite.Stop(self.oepn_func_tween_id1) self.oepn_func_tween_id1 = nil end if self.oepn_func_tween_id2 then TweenLite.Stop(self.oepn_func_tween_id2) self.oepn_func_tween_id2 = nil end end function TaskAnnounceView:UpdateState() if self.data then local state = self.model:GetRewardData(self.data.id) self.get_btn_red_dot_obj:SetActive(state == 1) self.get_btn_obj:SetActive(state == 1) self.get_done_obj:SetActive(state == 2) self.jum_btn_obj:SetActive(state == 2) -- for i,v in ipairs(self.reward_item_list) do -- v:SetGray(not self.data.has_open or state ~= 1) -- end -- if state and self.item_list[1] then -- local callback = function() -- self.model:Fire(TaskAnnounceModel.REQUEST_CCMD_EVENT, 18201, self.data.id) -- end -- if state == 0 or not has_open then --不可领取 -- self.item_list[1]:SetEnableClick(false) -- self.item_list[1]:SetRedDot(false) -- self.item_list[1]:SetCallBack(nil) -- elseif state == 1 then --未领取 -- self.item_list[1]:SetEnableClick(true) -- self.item_list[1]:SetRedDot(true) -- self.item_list[1]:SetCallBack(callback) -- elseif state == 2 then --已领取 -- self.item_list[1]:SetEnableClick(true) -- self.item_list[1]:SetStatueTips(true, "tyui_ylq", nil, true) -- self.item_list[1]:SetRedDot(false) -- self.item_list[1]:SetCallBack(nil) -- end -- else -- end end end function TaskAnnounceView:Close() BaseView.Close(self) end