源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

304 lines
8.4 KiB

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