|
-- <*
|
|
-- @Author: Saber
|
|
-- @Description: 完成成就的弹出提示界面
|
|
-- *>
|
|
AchieveTipsView = AchieveTipsView or BaseClass(BaseView)
|
|
local AchieveTipsView = AchieveTipsView
|
|
|
|
function AchieveTipsView:__init()
|
|
self.base_file = "achievement"
|
|
self.layout_file = "AchieveTipsView"
|
|
self.layer_name = "Top"
|
|
self.destroy_imm = true
|
|
self.use_background = false --全屏界面默认使用这个参数
|
|
|
|
self.is_animating = false -- 是否在动画中
|
|
|
|
self.hide_time = 2 -- n秒后播放界面隐藏动画
|
|
self.btn_des = "领取" -- 按钮文本
|
|
self.left_time_des = "领取" -- 倒计时文本
|
|
self.awardItem_list = {}
|
|
self.receive_flag = nil -- 读取完界面数据后,用于发送领取协议的关键键值
|
|
self.model = AchieveModel:getInstance()
|
|
self.model.tip_view_show = true
|
|
self.load_callback = function ()
|
|
self:LoadSuccess()
|
|
self:AddEvent()
|
|
end
|
|
self.open_callback = function ( )
|
|
self:OpenSuccess()
|
|
end
|
|
self.destroy_callback = function ( )
|
|
self:DestroySuccess()
|
|
end
|
|
end
|
|
|
|
function AchieveTipsView:Open(achv_data)
|
|
self.achv_data = achv_data
|
|
BaseView.Open(self)
|
|
end
|
|
|
|
--重用界面,5秒后再销毁
|
|
function AchieveTipsView:ResetViewInfo(achv_data)
|
|
self.achv_data = achv_data
|
|
self.transform.anchoredPosition = Vector2(-3.5, 61.5)
|
|
self.receive_flag = nil
|
|
self.gameObject:SetActive(true)
|
|
|
|
if self.delay_closeview_id then
|
|
TimerQuest.CancelQuest(GlobalTimerQuest,self.delay_closeview_id)
|
|
self.delay_closeview_id = nil
|
|
end
|
|
self:UpdateView() -- 更新数据
|
|
self:StartCloseTimer() -- 开始对界面的关闭进行计时
|
|
self:OpenAnimation() -- 播放打开界面的动画
|
|
end
|
|
|
|
function AchieveTipsView:LoadSuccess()
|
|
local nodes = {
|
|
-- 成就完成弹窗相关
|
|
"achieve_tip:obj",
|
|
"achieve_tip/achi_award_con", -- 成就奖励容器
|
|
"achieve_tip/achi_receive_btn:obj", -- 成就领取按钮
|
|
"achieve_tip/achi_desc:tmp", "achieve_tip/achi_name:tmp", -- 成就信息
|
|
"achieve_tip/achi_receive_btn/receive_btn_des:tmp",
|
|
-- 章节完成弹窗相关
|
|
"chapter_tip:obj",
|
|
"chapter_tip/chapter_receive_btn:obj", -- 章节领取按钮
|
|
"chapter_tip/chapter_img:img", -- 章节相关立绘图
|
|
"chapter_tip/chapter_des:img", -- 章节称号容器
|
|
"chapter_tip/chapter_name:tmp", -- 章节名称
|
|
"chapter_tip/role_sp:raw", -- 立绘
|
|
"chapter_tip/chapter_receive_btn/chapter_btn_des:tmp",
|
|
-- 其他
|
|
"close_timer:tmp",
|
|
}
|
|
self:GetChildren(nodes)
|
|
self.canvasGroup = self.gameObject:GetComponent("CanvasGroup")
|
|
self.transform.anchoredPosition = Vector2(-3.5, 61.5)
|
|
end
|
|
|
|
function AchieveTipsView:AddEvent()
|
|
local function click_event(target)
|
|
self:ReceiveAchieveFunc()
|
|
self:ClearHideTimer()
|
|
self:AutoCloseFunc()
|
|
end
|
|
AddClickEvent(self.achi_receive_btn_obj, click_event)
|
|
AddClickEvent(self.chapter_receive_btn_obj, click_event)
|
|
end
|
|
|
|
function AchieveTipsView:OpenSuccess()
|
|
self:UpdateView()
|
|
self:StartCloseTimer()
|
|
self:OpenAnimation() -- 播放打开界面的动画
|
|
end
|
|
|
|
function AchieveTipsView:UpdateView()
|
|
local cfg
|
|
self.achieve_tip_obj:SetActive(not self.achv_data.is_chapter)
|
|
self.chapter_tip_obj:SetActive(self.achv_data.is_chapter)
|
|
if self.achv_data.is_chapter then -- 完成章节
|
|
cfg = Config.Achievementcategoryreward[self.achv_data.data.category]
|
|
self.receive_flag = self.achv_data.data.category
|
|
self.chapter_name_tmp.text = Trim(cfg.name)
|
|
-- 加载称号资源
|
|
local designation = stringtotable(cfg.reward)[1][2]
|
|
local designation_id = DesignationModel:GetInstance():GetDesignationIdByGoodsId(designation)
|
|
lua_resM:setOutsideImageSprite(self, self.chapter_des_img, GameResPath.GetDesignImage(designation_id), true)
|
|
-- 加载立绘资源
|
|
lua_resM:setOutsideRawImage(self, self.role_sp_raw, GameResPath.GetAchieveRoleSP("small" .. self.achv_data.data.category), true)
|
|
else -- 完成成就
|
|
cfg = Config.Achievement[self.achv_data.data.category .. "@" .. self.achv_data.data.sub_category]
|
|
self.receive_flag = {category = self.achv_data.data.category, sub_category = self.achv_data.data.sub_category}
|
|
self.achi_name_tmp.text = string.format('<color=#ffffff>第%s章</color> %s', WordManager:getHanZiNumber(self.achv_data.data.category), Trim(cfg.name))
|
|
self.achi_desc_tmp.text = Trim(cfg.desc)
|
|
-- 加载奖励内容
|
|
local reward = stringtotable(cfg.reward)
|
|
for k, v in ipairs(reward) do
|
|
local item = self.awardItem_list[k]
|
|
if not item then
|
|
item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.achi_award_con)
|
|
self.awardItem_list[k] = item
|
|
end
|
|
item:SetItemSize(62, 62)
|
|
item:SetPosition(self.achi_award_con.sizeDelta.x/2 +((k-1) - #reward/2) * 75 + 5, -3)
|
|
item:SetVisible(true)
|
|
local typeId, lock = GoodsModel:getInstance():GetMappingTypeId(v[1], v[2])
|
|
item:SetData(typeId, v[3], nil, nil, lock)
|
|
end
|
|
if #reward < #self.awardItem_list then
|
|
for i = #reward+1, #self.awardItem_list do
|
|
self.awardItem_list[i]:SetVisible(false)
|
|
end
|
|
end
|
|
end
|
|
if self.model:CheckCanQuickGetReward() then
|
|
self.btn_des = "领取"
|
|
self.left_time_des = "领取"
|
|
else
|
|
self.btn_des = "前往"
|
|
self.left_time_des = "关闭"
|
|
end
|
|
self.receive_btn_des_tmp.text = self.btn_des
|
|
self.chapter_btn_des_tmp.text = self.btn_des
|
|
end
|
|
|
|
-- 开始界面关闭的倒计时
|
|
function AchieveTipsView:StartCloseTimer()
|
|
SetAnchoredPositionY(self.close_timer, -16.5)
|
|
self:ClearHideTimer()
|
|
-- if self.achv_data.is_chapter then
|
|
-- self.close_timer.anchoredPosition = Vector2(237.5, 17.5)
|
|
-- self.finished.anchoredPosition = Vector2(-84, -19)
|
|
-- else
|
|
-- self.close_timer.anchoredPosition = Vector2(229.5, 13)
|
|
-- self.finished.anchoredPosition = Vector2(-205, -19)
|
|
-- end
|
|
local end_time = self.hide_time + TimeUtil:getServerTime()
|
|
local function hide_timer()
|
|
local left_time = end_time - TimeUtil:getServerTime()
|
|
self.close_timer_tmp.text = left_time >= 0 and string.format("(<color=%s>%ss</color>后自动%s)", ColorUtil.GREEN_DARK, math.ceil(left_time+1), self.left_time_des) or ""
|
|
if left_time < 0 then
|
|
self:ClearHideTimer()
|
|
self:AutoCloseFunc()
|
|
-- self:TimeOverReceiveAchieveFunc() -- 策划说不用自动前往了
|
|
end
|
|
end
|
|
hide_timer()
|
|
self.hide_timer_id = GlobalTimerQuest:AddPeriodQuest(hide_timer, 0.1, -1)
|
|
-- 设置动画标志量
|
|
self.is_animating = true
|
|
end
|
|
|
|
-- 点击按钮后的响应
|
|
function AchieveTipsView:ReceiveAchieveFunc( )
|
|
if not self.receive_flag then return end
|
|
if self.model:CheckCanQuickGetReward() then -- 快捷领取
|
|
if type(self.receive_flag) == "table" then -- 表格式,说明是成就奖励
|
|
self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40903, self.receive_flag.category, self.receive_flag.sub_category)
|
|
else -- 否则则是章节奖励的category
|
|
self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40901, self.receive_flag)
|
|
end
|
|
else -- 直接跳转
|
|
self:OpenAchieveView()
|
|
end
|
|
end
|
|
|
|
-- 倒计时结束的响应
|
|
function AchieveTipsView:TimeOverReceiveAchieveFunc( )
|
|
if not self.receive_flag then return end
|
|
if self.model:CheckCanQuickGetReward() then -- 快捷领取
|
|
if type(self.receive_flag) == "table" then -- 表格式,说明是成就奖励
|
|
self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40903, self.receive_flag.category, self.receive_flag.sub_category)
|
|
else -- 否则则是章节奖励的category
|
|
self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40901, self.receive_flag)
|
|
end
|
|
else -- 直接关闭
|
|
|
|
end
|
|
end
|
|
|
|
function AchieveTipsView:ClearHideTimer( )
|
|
if self.hide_timer_id then
|
|
GlobalTimerQuest:CancelQuest(self.hide_timer_id)
|
|
self.hide_timer_id = nil
|
|
end
|
|
end
|
|
|
|
function AchieveTipsView:AutoCloseFunc( )
|
|
local function callback()
|
|
self:ClearHideTimer()
|
|
self.gameObject:SetActive(false)
|
|
local function delay_closeview( )
|
|
BaseView.Close(self)
|
|
end
|
|
self.delay_closeview_id = setTimeout(delay_closeview, 5)
|
|
-- 设置动画标志量
|
|
self.is_animating = false
|
|
-- 查看是否有称号还没展示完成界面
|
|
self.model:Fire(AchieveModel.OPEN_ACHIEVE_TIPS_VIEW, true)
|
|
end
|
|
self:CloseAnimation(callback)
|
|
end
|
|
|
|
-- 跳转到成就界面指定章节
|
|
function AchieveTipsView:OpenAchieveView( )
|
|
local category = self.achv_data.data.category
|
|
end
|
|
|
|
-- 播放打开界面的动画
|
|
function AchieveTipsView:OpenAnimation()
|
|
self.canvasGroup.alpha = 0
|
|
if self.alpha_anim_id then
|
|
TweenLite.Stop(self.alpha_anim_id)
|
|
self.alpha_anim_id = nil
|
|
end
|
|
self.alpha_anim_id = TweenLite.to(self, self.canvasGroup, TweenLite.UiAnimationType.ALPHA, 1, 0.2)
|
|
end
|
|
|
|
-- 关闭(隐藏)界面的动画
|
|
function AchieveTipsView:CloseAnimation(callback)
|
|
self.canvasGroup.alpha = 1
|
|
if self.alpha_anim_id then
|
|
TweenLite.Stop(self.alpha_anim_id)
|
|
self.alpha_anim_id = nil
|
|
end
|
|
self.alpha_anim_id = TweenLite.to(self, self.canvasGroup,TweenLite.UiAnimationType.ALPHA, 0, 0.5)
|
|
local pos_y = self.transform.anchoredPosition.y + 100
|
|
if self.pos_id then
|
|
TweenLite.Stop(self.pos_id)
|
|
self.pos_id = nil
|
|
end
|
|
self.pos_id = TweenLite.to(self, self.transform, TweenLite.UiAnimationType.ANCHORED_POSY, pos_y, 0.5, callback)
|
|
end
|
|
|
|
function AchieveTipsView:DestroySuccess( )
|
|
self.model.tip_view_show = false
|
|
self:ClearHideTimer()
|
|
if self.delay_closeview_id then
|
|
TimerQuest.CancelQuest(GlobalTimerQuest,self.delay_closeview_id)
|
|
self.delay_closeview_id = nil
|
|
end
|
|
if self.alpha_anim_id then
|
|
TweenLite.Stop(self.alpha_anim_id)
|
|
self.alpha_anim_id = nil
|
|
end
|
|
if self.pos_id then
|
|
TweenLite.Stop(self.pos_id)
|
|
self.pos_id = nil
|
|
end
|
|
for i,item in pairs(self.awardItem_list) do
|
|
UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, item)
|
|
end
|
|
self.awardItem_list = {}
|
|
end
|