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