TaskAnnounceModel = TaskAnnounceModel or BaseClass(BaseModel) TaskAnnounceModel.OPEN_ANNOUNCE_VIEW = "TaskAnnounceModel.OPEN_ANNOUNCE_VIEW" TaskAnnounceModel.UPDATE_ANNOUNCE_VIEW = "TaskAnnounceModel.UPDATE_ANNOUNCE_VIEW" TaskAnnounceModel.REQUEST_CCMD_EVENT = "TaskAnnounceModel.REQUEST_CCMD_EVENT" TaskAnnounceModel.UPDATE_ANNOUNCE_VISIBLE = "TaskAnnounceModel.UPDATE_ANNOUNCE_VISIBLE" --更新右边功能提示界面是否显示 TaskAnnounceModel.UPDATE_ANNOUNCE_RED_DOT = "TaskAnnounceModel.UPDATE_ANNOUNCE_RED_DOT" --功能预告红点 function TaskAnnounceModel:__init() TaskAnnounceModel.Instance = self self.reward_list = {} self.show_menu = true--是否显示功能预告 self.red_dot = nil self.reward_red_idx_list = false end --主界面模型类展示的 缩放和位置 TaskAnnounceModel.MainUIStyle = { [1001] = {140, 14, 125, 0}, --坐骑 [1003] = {400, 0, 110,0},--宝具 [1004] = {200, 0, 80,0}, -- 武器 [1005] = {180, 0, 68, 0},--AI娘 [1301] = {2, 0, 100, 0},--幻光 [1002] = {250, 15, 150, -280},--炫翼 [1201] = {300, 0, 90, -280},--宠物, 宝宝 暂时也用这个 [1006] = {300, 0, 90, -280},--磁炮 [1008] = {400, -40, 45, -280},--幻甲 [1007] = {300, 12, 120, -280}, --星翼 } --功能预告界面模型类展示的 缩放和位置 TaskAnnounceModel.TAViewUIStyle = { [1301] = {3, 0, -820, 0},--幻光 [1001] = {180, -144, 250, 0}, --坐骑 [1004] = {250, -50, 155,0}, -- 武器(无效) [1003] = {600, -60, 110,0},--宝具 [1005] = {250, -60, 150, 0},--AI娘 / [1002] = {300,-65, 200, 0},--炫翼 [1201] = {300, -60, 220, 0},--宠物, [1601] = {300, -50, 220, 0},-- 孩子 [1006] = {400, -68, 162, 0},--磁炮 [1008] = {450, -77, 150, 0},--幻甲 [1007] = {400, -71, 167, 0},--星翼 [1009] = {800, -60, 300, 0},--星辰 [1401] = {400, -60, 240, 0},--装备 [1101] = {110, -60, 160, 0},--怪物 [1010] = {3, 45, -840, 0},--圣物 [1011] = {100, -70, 120, 0},-- 神座 [1701] = {400, -60, 200, 0},-- 战魂 [9999] = {100, -80, 220, 0}, --龙神宝库 } --功能预告界面模型类展示的 缩放和位置 TaskAnnounceModel.WeaponUIStyle = { [1] = {300, -50, 225,0}, -- 武器 男剑 [2] = {300, -50, 225,0}, -- 武器 女剑 [3] = {600, -50, 0,0}, -- 武器 男枪 [4] = {600, -50, 0,0}, -- 武器 女枪 } function TaskAnnounceModel:ResetData() self.red_dot = nil end function TaskAnnounceModel:getInstance() if TaskAnnounceModel.Instance == nil then TaskAnnounceModel.New() end return TaskAnnounceModel.Instance end function TaskAnnounceModel:SetRewardInfo(list) self.reward_list = list or {} self:Fire(TaskAnnounceModel.UPDATE_ANNOUNCE_VIEW) self:CheckTaskAnnounceRedDot() end function TaskAnnounceModel:SetRewardData(data) if self.reward_list then local is_find = false for k,v in pairs(self.reward_list) do if v.func_id == data.func_id then is_find = true v.reward_state = data.reward_state break end end if not is_find then table.insert(self.reward_list, data) end self:Fire(TaskAnnounceModel.UPDATE_ANNOUNCE_VIEW) self:CheckTaskAnnounceRedDot() end end --state --0 不可领取 --1, 可领取,但未领取 --2 已经领取 function TaskAnnounceModel:GetRewardData(id) local state = 0 if self.reward_list then for k,v in pairs(self.reward_list) do if v.func_id ==id then state = v.reward_state break end end end return state end --获取预告的vo function TaskAnnounceModel:GetTaskAnnounceVo() local cfg_list = self:GetTaskAnnounceList() local find = false local find_vo = nil local open_day = ServerTimeModel:getInstance():GetOpenServerDay() local level = RoleManager:getInstance():GetMainRoleVo().level for i,v in ipairs(cfg_list) do if not v.has_open then --如果此项没有开服天数,则说明是等级或者主线没有完成 if v.open_day == 0 then find = true find_vo = v break else --如果已经达到了开服天数,则和正常项目已于 if open_day >= v.open_day then find = true find_vo = v break else --如果此项依赖开服天数,并且没达到开服天数,如果超过了这个等级,就显示下一个 if level < v.open_lv then find = true find_vo = v break end end end end end return find,find_vo end --获取功能预告红点 function TaskAnnounceModel:GetTaskAnnounceRedDot() return self.red_dot end --刷新红点 function TaskAnnounceModel:CheckTaskAnnounceRedDot() local dot = self.red_dot self.red_dot = false self.reward_list = self.reward_list or {} for k,v in pairs(self.reward_list) do if v.reward_state == 1 then self.red_dot = true break end end if dot ~= self.red_dot then self:Fire(TaskAnnounceModel.UPDATE_ANNOUNCE_RED_DOT) end end function TaskAnnounceModel:GetTaskAnnounceList() local list = {} local cfg_list = {} local ori_cfg = Config.Moduleadvance local level = RoleManager:getInstance():GetMainRoleVo().level local open_day = ServerTimeModel:getInstance():GetOpenServerDay() for k,v in pairs(ori_cfg) do local open_data = stringtotable(v.condition) local has_open = MainUIModel:getInstance():GetFunOpenState(open_data[1] or 1, open_data[2] or 0) and v.open_day <= open_day local data = { id = v.id, name = v.name, open_lv = open_data[1] or 1, reward = v.reward, icon = v.icon, has_open = has_open, open_day = v.open_day, is_next = false, con_desc = v.con_desc, func_desc = v.func_desc, condition = v.condition, model_res = v.model_res, title_pic = v.title_pic, mod_desc1 = v.mod_desc1, mod_desc2 = v.mod_desc2, jump = v.jump, } table.insert(cfg_list, data) end table.sort(cfg_list, function(a,b) return a.open_lv < b.open_lv end) return cfg_list end --功能预告界面内排序规则 --已领取——已达成可领取——未达成不可领取(同梯度按照等级排序) function TaskAnnounceModel:GetTaskAnnounceListInView() local list = {} local cfg_list = {} local ori_cfg = Config.Moduleadvance local level = RoleManager:getInstance():GetMainRoleVo().level local open_day = ServerTimeModel:getInstance():GetOpenServerDay() for k,v in pairs(ori_cfg) do local open_data = stringtotable(v.condition) local has_open = MainUIModel:getInstance():GetFunOpenState(open_data[1] or 1, open_data[2] or 0) and v.open_day <= open_day --0 不可领取 --1, 可领取,但未领取 --2 已经领取 local sort_id = 0 local reward_state = self:GetRewardData(v.id) if reward_state == 2 then sort_id = 3 elseif reward_state == 1 then sort_id = 2 end local data = { id = v.id, name = v.name, open_lv = open_data[1] or 1, reward = v.reward, icon = v.icon, has_open = has_open, open_day = v.open_day, is_next = false, con_desc = v.con_desc, func_desc = v.func_desc, condition = v.condition, model_res = v.model_res, title_pic = v.title_pic, mod_desc1 = v.mod_desc1, mod_desc2 = v.mod_desc2, jump = v.jump, sort_id = sort_id, } table.insert(cfg_list, data) end table.sort(cfg_list, function(a,b) if a.sort_id ~= b.sort_id then return a.sort_id > b.sort_id else return a.open_lv < b.open_lv end end) return cfg_list end --获取某个位置 一侧是否有红点 function TaskAnnounceModel:GetRewardByIndexSide(idx, is_left, force_update) if not self.reward_red_idx_list or force_update then self.reward_red_idx_list = {} local list = self:GetTaskAnnounceListInView() local left_red_idx = 0 local right_red_idx = 0 for i,v in ipairs(list) do if v.has_open then local state = self:GetRewardData(v.id) if state == 1 then left_red_idx = left_red_idx == 0 and i or left_red_idx right_red_idx = i end end --初始化,左侧红点 self.reward_red_idx_list[i] = self.reward_red_idx_list[i] or {} self.reward_red_idx_list[i].left_have_red = left_red_idx ~= 0 and (left_red_idx < i) or false self.reward_red_idx_list[i].id = v.id self.reward_red_idx_list[i].name = v.name end --初始化右侧红点 for i,v in ipairs(list) do self.reward_red_idx_list[i] = self.reward_red_idx_list[i] or {} self.reward_red_idx_list[i].right_have_red = right_red_idx ~= 0 and (right_red_idx > i) or false end end if idx and self.reward_red_idx_list and #self.reward_red_idx_list >= idx then if is_left then return self.reward_red_idx_list[idx].left_have_red else return self.reward_red_idx_list[idx].right_have_red end end return false end