FuliLimitPackageView = FuliLimitPackageView or BaseClass(BaseView) local FuliLimitPackageView= FuliLimitPackageView function FuliLimitPackageView:__init() self.base_file = "fuli" self.layout_file = "FuliLimitPackageView" self.layer_name = "Top" self.use_background = true self.click_bg_toClose = false self.change_scene_close = true self.destroy_imm = true self.is_set_zdepth = true self.limit_num = false self.model = FuliModel:getInstance() self.mainVo = RoleManager.Instance.mainRoleInfo self.reward_item_list = {} self.num_item_list = {} self.item_list = {} self.list_item_animation = false self.open_callback = function() self:InitData() end self.load_callback = function() self:LoadSuccess() self:InitEvent() self.model:Fire(FuliConst.REQ_FULI_SCMD, 16011) end self.close_callback = function () end self.destroy_callback = function() self:Remove() end self.ReOpen_callback = function () end end function FuliLimitPackageView:Open() BaseView.Open(self) GlobalEventSystem:Fire(SceneEventType.CLOSE_DIALOGUE_VIEW) GlobalEventSystem:Fire(EventName.STOP_AUTO_DO_TASK) GlobalEventSystem:Fire(EventName.STOPAUTOFIGHT) end function FuliLimitPackageView:Remove() for i,item in pairs(self.reward_item_list) do item:ReleaseObj() end self.reward_item_list = {} for i,item in pairs(self.item_list) do item:DeleteMe() end self.item_list = {} for i,item in pairs(self.num_item_list) do item:DeleteMe() end self.num_item_list = {} if self.is_do_action then MainUIController.Instance.MainRoleHeadInfoView:SetLimitPackageBtnVisible(true) end if self.tween_id then TweenLite.Stop(self.tween_id) self.tween_id = nil end --完成引导 local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.TYPE_LIMIT_PACKAGE,2) if helpVo then GlobalEventSystem:Fire(EventName.FINISH_CURRENT_HELP_STEP,helpVo) GlobalEventSystem:Fire(EventName.FORCE_TO_DO_TASK) GlobalEventSystem:Fire(EventName.START_AUTO_DO_TASK) end if self.timer_countdown then TimerQuest.CancelQuest(GlobalTimerQuest, self.timer_countdown) self.timer_countdown = nil end self:StopAnimationList() end function FuliLimitPackageView:LoadSuccess() local nodes = { "center/title_text:txt", "center/close:obj", "center/bg1:raw", "center/count_text:txt", "center/bg:raw", "center/bg2:raw", "center/continue:obj:img", "center/reward_scroll", "center/reward_scroll/Viewport/reward_con", "center/icon:img:obj", "center/item_scroll/Viewport/item_con", "center/item_scroll", "icon_cont:obj", "center/time_text:txt", "center:obj", "center/num_ani_con", } self:GetChildren(nodes) lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("fuli_limit_package_bg1_1102_605"),false) lua_resM:setOutsideRawImage(self, self.bg1_raw, GameResPath.GetFuliImage("fuli_limit_package_text_1"),false) lua_resM:setOutsideRawImage(self, self.bg2_raw, GameResPath.GetFuliImage("fuli_limit_package_text_2"),false) self:InitEvent() end function FuliLimitPackageView:InitEvent() local function onBtnClickHandler(target) if target == self.close_obj then self:Continue() elseif target == self.continue_obj then self:Continue() end end AddClickEvent(self.close_obj,onBtnClickHandler) AddClickEvent(self.continue_obj,onBtnClickHandler) local function on_fuli_limit_update() self:UpdateInfo() end self:BindEvent(FuliModel:getInstance(), FuliConst.FULI_LIMIT_INFO_UPDATE, on_fuli_limit_update) end function FuliLimitPackageView:InitData() self.cfg = DeepCopy(self.model:GetFuliLevelCFG(self.mainVo.career)) if not self.cfg or not self.cfg[1] then return end local b = TaskModel:getInstance():IsTaskFinished(FuliConst.LIMIT_PACKAGE_TASK.CLOSE_TASK_ID) lua_resM:setImageSprite(self, self.continue_img,"fuli_asset",b and "fuli_item34" or "fuli_item29") self.limit_num = self.cfg[1].limit_num self.title_text_txt.text = string.format("%s ", HtmlColorTxt( self.cfg[1].worth, "#ffd633")) local reward_list = self.cfg[1].award_limit_list if #reward_list > 0 then for i,v in ipairs(reward_list) do local item = self.reward_item_list[i] if item == nil then item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.reward_con) self.reward_item_list[i] = item end if v.is_limit then item:SetNumLimitVisible( true, 4 ) item:SetData(v[2], 1, nil, nil) else item:SetNumLimitVisible( false ) item:SetData(v[2], v[3], nil, nil) end item:SetItemSize(50, 50) item:SetAnchoredPosition((i - 1) * 65 + 7.5,-8) end for i=#reward_list + 1,#self.reward_item_list do self.reward_item_list[i]:SetVisible(false) end end SetSizeDeltaX(self.reward_con, 65 * #reward_list) local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.TYPE_LIMIT_PACKAGE,2) if helpVo then self:CheckLeftTime() end end function FuliLimitPackageView:UpdateInfo() self.data = self.model.fuli_limit_package_info if self.data then if not self.limit_num then self.cfg = DeepCopy(self.model:GetFuliLevelCFG(self.mainVo.career)) if not self.cfg or not self.cfg[1] then return end self.limit_num = self.cfg[1].limit_num end local num = self.limit_num - self.data.number if num < FuliConst.LIMIT_PACKAGE_CONST.LIMIT_NUM then num = FuliConst.LIMIT_PACKAGE_CONST.LIMIT_NUM end self.count_text_txt.text = string.format("/%d", self.limit_num) local t_num = 10000 local t_num_list = {} local num_list = {} for i=1,5 do local m = num / t_num local n = num % t_num t_num_list[i] = math.floor(m) num = n t_num = t_num / 10 end for i,v in ipairs(t_num_list) do if v ~= 0 then for ii=i,#t_num_list do table.insert(num_list, t_num_list[ii]) end break end end for i,v in ipairs(num_list) do local item = self.num_item_list[i] if item == nil then item = FuliLimitPackageNumItem.New(self.num_ani_con,nil) self.num_item_list[i] = item end item:SetData(v, 0.5 * i, i) item:SetAnchoredPosition(85-(#num_list - i)*12, -8) end local packag_name = self.cfg[1].name or "至尊级限量礼包" local function LoadSuccessCallBack( ) self.load_item_idx = self.load_item_idx - 1 if self.load_item_idx == 0 then self:ResetPlayerInfo(packag_name) end end local list = self.data.list self.load_item_idx = #list if #list > 0 then for i,v in ipairs(list) do local item = self.item_list[i] if item == nil then item = FuliLimitPackageItem.New(self.item_con,nil) self.item_list[i] = item end item:SetLoadCallBack(LoadSuccessCallBack) end end end end function FuliLimitPackageView:ResetPlayerInfo(packag_name) self.list_item_animation = {} local total_w = 0 local scroll_width = GetSizeDeltaX(self.item_scroll) for i= 1,#self.item_list do local item = self.item_list[i] if item then local d = self.data.list[i] self.list_item_animation[i] = self.list_item_animation[i] or {} d.packag_name = packag_name item:SetData(d) item:SetAnchoredPosition(scroll_width + total_w,0) local w = item:GetWidth() self.list_item_animation[i].item = item self.list_item_animation[i].width = w total_w = total_w + w end end self.anim_end_pos = scroll_width SetSizeDeltaX(self.item_con, total_w) self:StartAnimationList() end function FuliLimitPackageView:InitActoin() self.image_obj = UiFactory.createChild(self.icon_cont, UIType.ImageExtend) self.image_obj.transform.sizeDelta = Vector2(72, 72) self.image_icon = self.image_obj:GetComponent("ImageExtend") SetLocalPosition(self.image_obj.transform, 0, 0, 0) lua_resM:setImageSprite(self, self.image_icon, "mainUI_asset", "limit_package_btn_bg", true) end --动画开始 function FuliLimitPackageView:PlayAction( ) local callback = function() MainUIController.Instance.MainRoleHeadInfoView:SetLimitPackageBtnVisible(true) self:Close() end self.is_do_action = true local pos = MainUIController.Instance.MainRoleHeadInfoView:GetLimitPackageBtnPos() if pos and self.image_obj then MainUIController.Instance.MainRoleHeadInfoView:SetLimitPackageBtnVisible(false) self.center_obj:SetActive(false) self.icon_cont_obj:SetActive(true) self.tween_id = TweenLite.to(self, self.image_obj.transform, TweenLite.UiAnimationType.POS, pos, 0.8, callback) else callback() end end function FuliLimitPackageView:Continue() if TaskModel:getInstance():IsTaskFinished(FuliConst.LIMIT_PACKAGE_TASK.CLOSE_TASK_ID) then self.model:Fire(FuliConst.REQ_FULI_SCMD, 16006, self.cfg[1].id) self:Close() else local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.TYPE_LIMIT_PACKAGE,2) if helpVo then self:InitActoin() self:PlayAction() else self:Close() GlobalEventSystem:Fire(EventName.START_AUTO_DO_TASK) GlobalEventSystem:Fire(EventName.FORCE_TO_DO_TASK) end end end function FuliLimitPackageView:CheckLeftTime() if self.timer_countdown then TimerQuest.CancelQuest(GlobalTimerQuest, self.timer_countdown) self.timer_countdown = nil end local leftTime = 15 local function timer_func() leftTime = leftTime - 1 if leftTime <= 0 then self:Continue() else self.time_text_txt.text = string.format("%s 秒后自动关闭界面", HtmlColorTxt( leftTime, "#0CE148") ) end end self.timer_countdown = TimerQuest.AddPeriodQuest(GlobalTimerQuest, timer_func, 1) timer_func() end function FuliLimitPackageView:StopAnimationList() if self.timer_anim_list then TimerQuest.CancelQuest(GlobalTimerQuest, self.timer_anim_list) self.timer_anim_list = nil end end function FuliLimitPackageView:StartAnimationList() if self.list_item_animation then local function timer_func() local end_pos_x = self.anim_end_pos for i,v in ipairs(self.list_item_animation) do local cur_pos_x = v.cur_pos_x if not cur_pos_x then local pos = v.item:GetAnchoredPosition() cur_pos_x = pos.x end cur_pos_x = cur_pos_x- 3 v.cur_pos_x = cur_pos_x v.item:SetAnchoredPosition(cur_pos_x, 0) end_pos_x = end_pos_x < cur_pos_x + v.width and cur_pos_x + v.width or end_pos_x end for i,v in ipairs(self.list_item_animation) do if v.cur_pos_x < - v.width then v.item:SetAnchoredPosition(end_pos_x, 0) v.cur_pos_x = end_pos_x end end end self.timer_anim_list = TimerQuest.AddPeriodQuest(GlobalTimerQuest, timer_func, 0.02) timer_func() end end