源战役客户端
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.
 
 
 
 
 

549 lines
19 KiB

SevenDayTargetMainView = SevenDayTargetMainView or BaseClass(BaseView)
local SevenDayTargetMainView = SevenDayTargetMainView
local table_insert = table.insert
local table_sort = table.sort
function SevenDayTargetMainView:__init()
self.base_file = "sevenDayTarget"
self.layout_file = "SevenDayTargetMainView"
self.layer_name = "UI"
self.destroy_imm = true
self.use_background = true --全屏界面默认使用这个参数
self.hide_maincancas = true --全屏界面需要放开隐藏主UI
self.change_scene_close = true
self.append_to_ctl_queue = false --是否要添加进界面堆栈
self.need_show_money = false --是否要显示顶部的金钱栏
self.is_show_bet_view = false --是否在显示投注界面
self.score_item_list = {}
self.close_fog = true
self.day_item_list = {}
self.item_list = {}
self.model = SevenDayTargetModel:getInstance()
self.is_first_open = true
self.cur_select_day = 1
self.mainVo = RoleManager.Instance.mainRoleInfo
self.model:Fire(SevenDayTargetModel.REQUEST_SEVEN_DAY_TARGET_SCMD, 17600)
self.item_index_cache = {} -- 记录当前每个成就对应的位置索引
self.load_callback = function ()
self:LoadSuccess()
end
self.open_callback = function ( )
self:OpenSuccess()
end
self.switch_callback = function(index)
self:SwitchTab(index)
end
self.destroy_callback = function ( )
self:DestroySuccess()
end
self.ReOpen_callback = function ()
self:UpdateView()
end
end
function SevenDayTargetMainView:Open( )
BaseView.Open(self)
end
function SevenDayTargetMainView:LoadSuccess()
local nodes = {
"task_progress_text:tmp",
"con_skill_icon", "con_skill_icon/skill_icon:img",
"bg:raw", "skill_desc_text:tmp","bg2:img",
"skill_name_text:tmp", "item_scroll:scroll", "item_scroll/Viewport/item_con", "day_con",
"score_progress:img", "btn/btn_red:obj", "btn:obj", "score_con", "score_text:tmp",
"get_image:obj", "time_text:tmp", "btn/btn_text:obj",
"btn/btn_text_gray:obj", "close_btn:obj","role_con",
-- 2021.7.22新增
"icon_skill_name:img",
"btn_get_pet:obj:imgex", "btn_get_pet/btn_get_pet_red:obj",
"btn_get_pet/btn_get_pet_gray:obj", "btn_get_pet/btn_get_pet_text:obj",
"get_pet_image:obj",
}
self:GetChildren(nodes)
self:AddEvent()
self.btn_img = self.btn:GetComponent('ImageExtend')
self.item_scroll_scroll.vertical = false
SetAnchoredPosition(self.bg, 3.5, 14.5)
SetSizeDelta(self.bg, 1203, 633)
lua_resM:setOutsideRawImage(self,self.bg_raw,GameResPath.GetViewBigBg("seven_day_target_bg_1203_633"),false)
local x, y = GetAnchoredPosition(self.con_skill_icon)
self.pos_data_y = y
self.awardItem = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem,self.score_con)
self.awardItem:SetItemSize(62, 62)
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)
-- self:MoveUIToBack(self.bg2_img)
end
if self.background_wnd then
bg_back_func()
else
self.bg_back_func = bg_back_func
end
self:UpdateModel()
end
function SevenDayTargetMainView:AddEvent()
local function on_click( target )
if self.btn_obj == target then
self.model:Fire(SevenDayTargetModel.REQUEST_SEVEN_DAY_TARGET_SCMD, 17602, 2, self.cur_select_day)
elseif self.btn_get_pet_obj == target then
if not self.is_receive then
self.model:Fire(SevenDayTargetModel.REQUEST_SEVEN_DAY_TARGET_SCMD, 17602, 1, self.score_cfg[1].score)
end
elseif self.close_btn_obj == target then
self:Close()
end
end
AddClickEvent(self.btn_obj, on_click)
AddClickEvent(self.close_btn_obj, on_click)
AddClickEvent(self.btn_get_pet_obj, on_click)
local function on_update_view( is_get_award )
self:UpdateView()
self.update_need_anim = is_get_award
self:UpdateTaskInfo()
self:UpdateTime()
end
self.on_update_view_id = self.model:Bind(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO, on_update_view)
local function on_close( )
self:Close()
end
self.on_close_id = self.model:Bind(SevenDayTargetModel.CLOSE_SEVEN_DAY_TARGET_MAIN_VIEW, on_close)
end
function SevenDayTargetMainView:OpenSuccess()
self:UpdateView()
end
function SevenDayTargetMainView:ReOpen( )
end
function SevenDayTargetMainView:UpdateView( )
self:UpdateTab()
self:UpdateLeftInfo()
self:UpdateTime()
end
function SevenDayTargetMainView:UpdateLeftInfo( )
local cfg = Config.Sevengoalscore
local cur_score, server_data = self.model:GetSevenDayTargetScoreInfo()
if not self.score_cfg then
self.score_cfg = {}
for k,v in pairsByKeys(cfg) do
table_insert(self.score_cfg, v)
end
local sort_func = function ( a, b )
return a.score < b.score
end
table_sort(self.score_cfg, sort_func)
end
local cur_cfg = self.score_cfg[1]
local reward_data = stringtotable(cur_cfg.reward)
-- if not self.reward_item then
-- self.reward_item = SevenDayTargetScoreItem.New(self.score_con)
-- end
-- self.reward_item:SetData(1, self.score_cfg[1], server_data[self.score_cfg[1].score], cur_score)
self.awardItem:SetData(reward_data[1][2])
-- 按钮状态
if server_data[self.score_cfg[1].score] then -- 领了
self.is_receive = true
else
self.is_receive = false
local can_get = false
if cur_score >= self.score_cfg[1].score then -- 可以领
can_get = true
end
self.btn_get_pet_imgex.gray = not can_get
self.btn_get_pet_red_obj:SetActive(can_get)
self.btn_get_pet_gray_obj:SetActive(not can_get)
end
self.btn_get_pet_obj:SetActive(not self.is_receive)
self.get_pet_image_obj:SetActive(self.is_receive)
self.score_progress_img.fillAmount = cur_score/cur_cfg.score
self.score_text_tmp.text = string.format("%s/%s", cur_score, cur_cfg.score)
-- --积分和进度
-- if not self.score_mapping then
-- self.score_mapping = {
-- [0] = 0,
-- [1] = 0.1,
-- [2] = 0.30,
-- [3] = 0.5,
-- [4] = 0.7,
-- [5] = 1,
-- }
-- end
--找到现在属于哪个段
-- local cur_index = 0
-- for i,v in ipairs(self.score_cfg) do
-- if cur_score >= v.score then
-- cur_index = i
-- end
-- end
-- if cur_index ~= #self.score_cfg then
-- local last_score = cur_index == 0 and 0 or self.score_cfg[cur_index].score
-- self.score_progress_img.fillAmount = (cur_score - last_score) / (self.score_cfg[cur_index+1].score - last_score) * (self.score_mapping[cur_index + 1] - self.score_mapping[cur_index] ) + self.score_mapping[cur_index]
-- else
-- self.score_progress_img.fillAmount = 1
-- end
-- self.score_text_tmp.text = string.format("已获得积分:%s", cur_score)
-- local y_space = 94
-- local y_offset = 20
-- local len = #self.score_cfg
-- for i,v in ipairs(self.score_cfg) do
-- local item = self.score_item_list[i]
-- if not item then
-- item = SevenDayTargetScoreItem.New(self.score_con)
-- item:SetPosition(10, -y_space * (len -i) + y_offset )
-- self.score_item_list[i] = item
-- end
-- item:SetData(i, v, server_data[v.score], cur_score)
-- end
end
function SevenDayTargetMainView:UpdateTab( )
local cur_day = self.model:GetSevenDayTargetLoginDay() or 1
cur_day = cur_day > 7 and 7 or cur_day
if self.is_first_open then
self.cur_select_day = cur_day
end
local x_space = 77
local x_offset = 0
local function on_click_day( day )
self:SetSelectDay(day)
end
for i=1,7 do
local item = self.day_item_list[i]
if not item then
item = SevenDayTargetDayItem.New(self.day_con)
item:SetPosition(111 * (i-1), 0)
item:SetCallBackFunc(on_click_day)
self.day_item_list[i] = item
end
item:SetData(i, cur_day, self.cur_select_day)
end
if self.is_first_open then
self.cur_select_day = cur_day
self.is_first_open = false
self:UpdateTaskInfo()
end
end
function SevenDayTargetMainView:SetSelectDay( day )
if self.cur_select_day == day then
return
end
self.cur_select_day = day
for i,v in ipairs(self.day_item_list) do
v:SetSelect(day == i)
end
self:UpdateTaskInfo()
end
function SevenDayTargetMainView:UpdateTaskInfo( )
local cfg = self.model:GetSevenDayTargetTaskCFGByDay(self.cur_select_day)
local server_data = self.model:GetSevenDayTargetInfo(self.cur_select_day) or {}
--print('=======Msh:SevenDayTargetMainView.lua[223] ===TABLE====')
--PrintTable(server_data)
--排序
for i,v in ipairs(cfg) do
if server_data[self.model:GetKeyValve(v.days, v.mod_id, v.sub_id)] then
if server_data[self.model:GetKeyValve(v.days, v.mod_id, v.sub_id)].is_receive == 1 then--领取了的排最后
v.sort_id = 4
else
local total_num = v.limit_times or 1
v.sort_id = server_data[self.model:GetKeyValve(v.days, v.mod_id, v.sub_id)].progress >= total_num and 1 or 2--完成了可领的在最上面 没完成没领的在中间
end
else--没服务端数据的放中间
local data = stringtotable(v.jump_id)
local cfg = OpenFun.LinkWin[data[1] .. "@" .. data[2]]
local is_open, conf = false, false
if cfg then
is_open, conf = GetModuleIsOpen(cfg.winId, cfg.subId)
else
is_open, conf = GetModuleIsOpen(v.mod_id, v.sub_id)
end
-- local is_open, conf = GetModuleIsOpen(v.mod_id, v.sub_id)
if is_open then
v.sort_id = 2
else
v.sort_id = 3
end
end
end
local sort_func = function ( a, b )
if a.sort_id ~= b.sort_id then
return a.sort_id < b.sort_id
else
return a.order_id < b.order_id
end
end
table_sort(cfg, sort_func)
----------item位移动画-start---------
-- 2021.7.22 改版后只有四个任务 没动画了
--[[
self.task_creator = self.task_creator or self:AddUIComponent(UI.ItemListCreator)
-- 停止一下动画
self.model:SetTaskItemAnimState(false) -- 默认设置没有动画
self.item_scroll_scroll.vertical = true
self.task_creator:IterateItems(function ( item, i )
item:StopAnim(i)
end)
if need_top then -- 置顶
self.task_creator:Reset()
end
-- 更新完全部item后回调(动画可能还在播)
local update_cache_func = function ( )
self.update_need_anim = false
end
-- 使用的item数目
local ITEM_NUM = 8
-- 播完动画的回调
self.animing_item_count = ITEM_NUM
local anim_call_back = function ()
self.animing_item_count = self.animing_item_count - 1
if self.animing_item_count <= 0 then
self.model:SetTaskItemAnimState(false) -- 动画完毕
self.item_scroll_scroll.vertical = true
self.update_need_anim = false
end
end
-- 找出一次性位移 很多索引 的数据(超出了item_num的范围)
local down_item_new_index = false
local down_item_data = false
if self.update_need_anim then
self.model:SetTaskItemAnimState(true) -- 动画中
self.item_scroll_scroll.vertical = false
for new_index, v in ipairs(cfg) do
local key = v.mod_id * 1000000 + v.sub_id * 1000 + v.difficulty
local old_index = self.item_index_cache[key]
if old_index and new_index - old_index >= ITEM_NUM then
down_item_data = v
down_item_new_index = new_index
end
end
end
local tag_all_info = {
data_list = cfg,
item_con = self.item_con,
item_class = SevenDayTargetTaskItem,
item_height = 86,
start_x = 3,
start_y = -2.5,
space_y = 0,
scroll_view = self.item_scroll,
create_frequency = 0.01,
reuse_item_num = ITEM_NUM,
on_update_item = function(item, i, v)
if i == ITEM_NUM and down_item_data and self.update_need_anim then -- 拿一下这个平时看不到的item用一用
local key = down_item_data.mod_id * 1000000 + down_item_data.sub_id * 1000 + down_item_data.difficulty
local old_index = self.item_index_cache[key]
local new_index = down_item_new_index
-- 这个item是借用的 得还回去 所以单独给他刷一刷新
local anim_call_back_update = function ( )
self.task_creator:IterateItems(function ( item_temp, ii, vv )
if item_temp == item then
item:SetData(vv, ii, (server_data[vv.mod_id] and server_data[vv.mod_id][vv.sub_id]) and server_data[vv.mod_id][vv.sub_id][vv.difficulty] or nil)
item:SetIndexPos(ii)
end
end)
anim_call_back()
end
local temp_server_data = (server_data[v.mod_id] and server_data[v.mod_id][v.sub_id]) and server_data[v.mod_id][v.sub_id][v.difficulty] or nil
item:MoveNewIndexPosAnimAndUpdate(old_index, new_index, down_item_data, temp_server_data,anim_call_back_update)
self.item_index_cache[key] = new_index
down_item_data = nil
else
local key = v.mod_id * 1000000 + v.sub_id * 1000 + v.difficulty
local need_anim = self.update_need_anim and self.item_index_cache[key]
local old_index = need_anim and self.item_index_cache[key] or i
local new_index = i
if need_anim then
local temp_server_data = (server_data[v.mod_id] and server_data[v.mod_id][v.sub_id]) and server_data[v.mod_id][v.sub_id][v.difficulty] or nil
item:MoveNewIndexPosAnimAndUpdate(old_index, new_index, v, temp_server_data, anim_call_back)
else
if self.update_need_anim then
anim_call_back() -- 这个item不走动画 直接回调
end
item:SetData(v, new_index, (server_data[v.mod_id] and server_data[v.mod_id][v.sub_id]) and server_data[v.mod_id][v.sub_id][v.difficulty] or nil)
end
self.item_index_cache[key] = new_index
end
end,
}
self.task_creator:UpdateItems(tag_all_info)--]]
----------item位移动画-end-----------
----------新版创建-start---------
for i=1, 4 do
self.item_list[i] = self.item_list[i] or SevenDayTargetTaskItem.New(self.item_con)
local item = self.item_list[i]
local temp_data = cfg[i]
item:SetData(temp_data, i, server_data[self.model:GetKeyValve(temp_data.days, temp_data.mod_id, temp_data.sub_id)] or nil)
item:SetAnchoredPosition(3, -2.5 - 86 * (i - 1))
end
----------新版创建-end-----------
local cur_num = 0
for i,v in pairs(server_data) do
-- for ii,vv in pairs(v) do
-- for iii,vvv in pairs(vv) do
local cfg = self.model:GetSevenDayTargetTaskOneCFG(v.days, v.mod_id, v.sub_id)
if cfg then
if v.progress >= cfg.limit_times then
cur_num = cur_num + 1
end
end
-- end
-- end
end
local total_num = TableSize(cfg)
-- self.task_progress_img.fillAmount = cur_num/total_num
local color = cur_num ~= total_num and ColorUtil.RED_DARK or ColorUtil.GREEN_DARK
self.task_progress_text_tmp.text = string.format("%s %s/%s",
HtmlColorTxt("当前进度", "#fdffc2"), HtmlColorTxt(cur_num, color),total_num)
local skill_data = self.model:GetSevenDayTargetSkillInfo()
-- 未达到领取条件时设置按钮变灰
local have_red = cur_num >= total_num and not skill_data[self.cur_select_day]
SetImageGray(self.btn_img, not have_red)
self.btn_text_obj:SetActive(have_red)
self.btn_text_gray_obj:SetActive(not have_red)
self.btn_red_obj:SetActive(have_red)
self.btn_obj:SetActive(not skill_data[self.cur_select_day])
self.get_image_obj:SetActive(skill_data[self.cur_select_day])
local skill_reward_cfg = Config.Sevenskillreward
if skill_reward_cfg[self.cur_select_day] then
local skill_cfg = SkillManager:getInstance():getSkillFromConfig(skill_reward_cfg[self.cur_select_day].skill_reward)
-- lua_resM:setOutsideImageSprite(self,self.skill_icon_img,GameResPath.GetSkillIcon(skill_reward_cfg[self.cur_select_day].skill_reward),false)
lua_resM:setImageSprite(self, self.skill_icon_img, "sevenDayTarget_asset", "sevenDayTarget_skill_" .. skill_reward_cfg[self.cur_select_day].skill_reward , true)
lua_resM:setImageSprite(self, self.icon_skill_name_img, "sevenDayTarget_asset", "sevenDayTarget_font_" .. skill_reward_cfg[self.cur_select_day].skill_reward , true)
self.skill_name_text_tmp.text = skill_reward_cfg[self.cur_select_day].name
self.skill_desc_text_tmp.text = skill_cfg.lvs[1].desc
self:StartAction()
end
end
function SevenDayTargetMainView:UpdateModel( )
local res_data = {
father_node = self,
transform = self.role_con,
fashion_type = FuncOpenModel.TypeId.Pet,
figure_id = 1003,
scale = 300,
ui_model_type = UIModelCommon.ModelType.BackModel,
layer_name = self.layer_name,
position = Vector2(-20 + 50, 108+(ScreenHeight-720)/2),
}
FuncOpenModel:getInstance():SetModelRes(res_data)
end
function SevenDayTargetMainView:UpdateTime( )
local server_data = self.model:GetSevenDayTargetInfo()
if TableSize(server_data) > 0 then
local time = server_data.left_time
local function on_time_down()
local rest_time = time - TimeUtil:getServerTime( )
if rest_time <= 0 then
if self.count_time_id then
GlobalTimerQuest:CancelQuest(self.count_time_id)
self.count_time_id = nil
end
self.time_text_tmp.text = ""
else
self.time_text_tmp.text = string.format("距离活动结束还有%s", HtmlColorTxt(TimeUtil:timeConvert7(rest_time), ColorUtil.GREEN_DARK))
end
end
if not self.question_time_id then
self.question_time_id = GlobalTimerQuest:AddPeriodQuest(on_time_down, 1, -1)
end
end
end
-- 动画
function SevenDayTargetMainView:StartAction( )
self:StopAction( )
-- 移动
local function move_down(percent)
SetAnchoredPositionY(self.con_skill_icon, self.pos_data_y - 10 * percent)
end
local action1 = cc.CustomUpdate.New(2, move_down)
local function move_up(percent)
SetAnchoredPositionY(self.con_skill_icon, self.pos_data_y - 10 * (1-percent))
end
local action2 = cc.CustomUpdate.New(2, move_up)
------------------------------------------------
local action9 = cc.Sequence.New( action1, action2)
local action10 = cc.RepeatForever.New( action9 )
cc.ActionManager:getInstance():addAction(action10, self.con_skill_icon)
end
function SevenDayTargetMainView:StopAction( )
cc.ActionManager:getInstance():removeAllActionsFromTarget(self.con_skill_icon)
SetAnchoredPositionY( self.con_skill_icon, self.pos_data_y )
end
function SevenDayTargetMainView:DestroySuccess( )
if self.awardItem then
UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.awardItem)
self.awardItem = nil
end
for i,v in ipairs(self.score_item_list) do
v:DeleteMe()
v = nil
end
self.score_item_list = {}
-- if self.reward_item then
-- self.reward_item:DeleteMe()
-- self.reward_item = nil
-- end
for i,v in ipairs(self.day_item_list) do
v:DeleteMe()
v = nil
end
self.day_item_list = {}
if self.on_update_view_id then
self.model:UnBind(self.on_update_view_id)
self.on_update_view_id = nil
end
if self.on_close_id then
self.model:UnBind(self.on_close_id)
self.on_close_id = nil
end
if self.count_time_id then
GlobalTimerQuest:CancelQuest(self.count_time_id)
self.count_time_id = nil
end
for i,v in ipairs(self.item_list) do
v:DeleteMe()
v = nil
end
self.item_list = {}
self:StopAction()
end