-- <*
|
|
-- @Author: Saber
|
|
-- @Description: 通用邀请右侧tips弹窗
|
|
-- *>
|
|
CommonInviteTipView = CommonInviteTipView or BaseClass(BaseView)
|
|
local CommonInviteTipView = CommonInviteTipView
|
|
|
|
local clamp = Mathf.Clamp
|
|
local math_floor = Mathf.Floor
|
|
|
|
function CommonInviteTipView:__init()
|
|
self.base_file = "common"
|
|
self.layout_file = "CommonInviteTipView"
|
|
self.layer_name = "Main"
|
|
self.destroy_imm = true
|
|
self.use_background = false --全屏界面默认使用这个参数,非全屏界面自行设置
|
|
self.anim_time = 0.5
|
|
self.is_animating = false -- 是否在动画中
|
|
self.waiting = true -- 是否在等待新的邀请数据更新界面
|
|
self.show_time_str = false--是否显示剩余时间
|
|
self.show_time_elapse = false --剩余时间显示
|
|
self.model = CommonModel:getInstance()
|
|
self.dun_many_model = false
|
|
self.req_duny_many_mirror = false
|
|
|
|
self.load_callback = function ()
|
|
self:LoadSuccess()
|
|
self:AddEvent()
|
|
end
|
|
self.open_callback = function ( )
|
|
self:UpdateView()
|
|
end
|
|
self.destroy_callback = function ( )
|
|
self:DestroySuccess()
|
|
end
|
|
end
|
|
|
|
--[[ invite_data = { -- 邀请数据
|
|
layer_name -- 定制层级,可不传,默认Main层
|
|
invite_type -- 邀请类型 必传,用来在界面内决定要怎么展示内容
|
|
accept_callback -- 接受邀请回调
|
|
reject_callback -- 拒绝邀请回调
|
|
auto_close_time -- 自动拒绝时间,可不传,默认30秒
|
|
vip -- vip 等级
|
|
svip -- 贵族
|
|
-- 其他数据自己自行添加,然后根据invite_type编写自己的逻辑
|
|
}
|
|
]]
|
|
function CommonInviteTipView:Open(invite_data)
|
|
self.invite_data = invite_data
|
|
-- 定制层级
|
|
self.layer_name = invite_data.layer_name or self.layer_name
|
|
self:InitNodesAndData()
|
|
BaseView.Open(self)
|
|
end
|
|
|
|
function CommonInviteTipView:ReOpen(invite_data)
|
|
self.invite_data = invite_data
|
|
if self.is_loaded then
|
|
self:InitNodesAndData()
|
|
self:UpdateView()
|
|
end
|
|
end
|
|
|
|
function CommonInviteTipView:LoadSuccess()
|
|
local nodes = {
|
|
"reject_btn:obj:img",
|
|
"accept_btn:obj",
|
|
"role_name:tmp",
|
|
"vip_con",
|
|
"invite_content:tmp",
|
|
"fillBg:img",
|
|
"bg",
|
|
"mirror_btn:obj",
|
|
"time_text:tmp:obj",
|
|
"time_bg:obj",
|
|
"event_icon:obj",
|
|
}
|
|
self:GetChildren(nodes)
|
|
|
|
self.vip_item = RoleVipItem.New(self.vip_con)
|
|
self.vip_item:SetAnchoredPosition(0, 0)
|
|
self.vip_item:SetScale(0.84, 0.84)
|
|
-- 动画重点坐标初始化
|
|
self.start_anim_pos_x = 350 - ClientConfig.iphone_x_offset_right
|
|
self.end_anim_pos_x = 0 - ClientConfig.iphone_x_offset_right
|
|
SetAnchoredPositionX(self.transform, self.start_anim_pos_x)
|
|
end
|
|
|
|
function CommonInviteTipView:AddEvent()
|
|
local function click_event(target)
|
|
if target == self.accept_btn_obj then
|
|
if not self.is_animating then -- 动画状态不允许操作
|
|
if self.invite_data and self.invite_data.accept_callback then
|
|
self.invite_data.accept_callback(self.invite_data)
|
|
end
|
|
self:HideAnim() -- 播放关闭效果,并检查邀请缓存
|
|
end
|
|
elseif target == self.reject_btn_obj then
|
|
if not self.is_animating then -- 动画状态不允许操作
|
|
if self.invite_data and self.invite_data.reject_callback then
|
|
self.invite_data.reject_callback(self.invite_data)
|
|
end
|
|
self:HideAnim() -- 播放关闭效果,并检查邀请缓存
|
|
end
|
|
elseif target == self.mirror_btn_obj then
|
|
if not self.is_animating then -- 动画状态不允许操作
|
|
if self.invite_data and self.invite_data.other_callback then
|
|
self.invite_data.other_callback(self.invite_data)
|
|
end
|
|
self:HideAnim() -- 播放关闭效果,并检查邀请缓存
|
|
end
|
|
end
|
|
end
|
|
AddClickEvent(self.accept_btn_obj, click_event)
|
|
AddClickEvent(self.reject_btn_obj, click_event)
|
|
AddClickEvent(self.mirror_btn_obj, click_event)
|
|
|
|
local onMirrorInfoUpdate = function (dun_type)
|
|
self.req_duny_many_mirror = false
|
|
end
|
|
self:BindEvent(DunManyModel:getInstance(), DunManyModel.UPDATE_DUNMANY_MIRROR, onMirrorInfoUpdate)
|
|
end
|
|
|
|
function CommonInviteTipView:InitNodesAndData( )
|
|
if self.is_loaded then
|
|
if self.vip_item then
|
|
self.vip_item:SetData(0)
|
|
end
|
|
self.role_name_tmp.text = ""
|
|
self.invite_content_tmp.text = ""
|
|
lua_resM:setImageSprite(self, self.reject_btn_img, "common_asset", "com_invite_reject")
|
|
SetAnchoredPositionX(self.transform, self.start_anim_pos_x)
|
|
end
|
|
self.auto_close_time = self.invite_data.auto_close_time or 30
|
|
self.waiting = false
|
|
self:ClearAutoCloseTimer()
|
|
self:ClearViewAnimId()
|
|
self:ClearDestroyTimer()
|
|
end
|
|
|
|
-- 更新邀请内容
|
|
function CommonInviteTipView:UpdateView()
|
|
self.fillBg_img.fillAmount = 1 -- 进度条拉满
|
|
if self.invite_data then
|
|
self.show_time_str = false
|
|
self.show_time_elapse = false
|
|
self.mirror_btn_obj:SetActive(false)
|
|
self.event_icon_obj:SetActive(false)
|
|
|
|
|
|
if self.invite_data.invite_type == CommonModel.InviteTipsType.GuildSpellList
|
|
or self.invite_data.invite_type == CommonModel.InviteTipsType.Team
|
|
or self.invite_data.invite_type == CommonModel.InviteTipsType.Crusade
|
|
or self.invite_data.invite_type == CommonModel.InviteTipsType.GuardinThree
|
|
then
|
|
SetSizeDeltaX(self.bg, 329)
|
|
SetSizeDeltaX(self.fillBg, 329)
|
|
SetAnchoredPositionX(self.vip_con, -19)
|
|
SetAnchoredPositionX(self.accept_btn, 100.5)
|
|
SetAnchoredPositionX(self.reject_btn, 49)
|
|
SetAnchoredPositionX(self.invite_content, -37)
|
|
SetAnchoredPositionX(self.role_name, (self.invite_data.vip == 0 and self.invite_data.svip == 0) and -15 or 7)
|
|
-- elseif self.invite_data.invite_type == CommonModel.InviteTipsType.Crusade
|
|
-- or self.invite_data.invite_type == CommonModel.InviteTipsType.GuardinThree then --装备副本
|
|
-- self.mirror_btn_obj:SetActive(true)
|
|
-- SetSizeDeltaX(self.bg, 325)
|
|
-- SetSizeDeltaX(self.fillBg, 325)
|
|
-- SetAnchoredPositionX(self.vip_con, -52.5)
|
|
-- SetAnchoredPositionX(self.accept_btn, 38)
|
|
-- SetAnchoredPositionX(self.reject_btn, -18.5)
|
|
-- SetAnchoredPositionX(self.invite_content, -53)
|
|
-- SetAnchoredPositionX(self.role_name, (self.invite_data.vip == 0 and self.invite_data.svip == 0) and -53 or -20)
|
|
elseif self.invite_data.invite_type == CommonModel.InviteTipsType.EventTips then -- 活动tips
|
|
self.event_icon_obj:SetActive(true)
|
|
SetSizeDeltaX(self.bg, 329)
|
|
SetSizeDeltaX(self.fillBg, 329)
|
|
SetAnchoredPositionX(self.accept_btn, 100.5)
|
|
SetAnchoredPositionX(self.reject_btn, 49)
|
|
SetAnchoredPositionX(self.invite_content, -37)
|
|
SetAnchoredPositionX(self.role_name, 7)
|
|
lua_resM:setImageSprite(self, self.reject_btn_img, "common_asset", "com_invite_reject2")
|
|
end
|
|
|
|
if self.invite_data.invite_type == CommonModel.InviteTipsType.GuildSpellList then -- 社团拼单邀请
|
|
local str = string.format('Lv.%s %s', self.invite_data.inviter_lv, self.invite_data.inviter_name)
|
|
self.role_name_tmp.text = str
|
|
local sl_cfg = Config.Guildorder[self.invite_data.cfg_id]
|
|
self.invite_content_tmp.text = string.format("拼单:<color=%s>%s</color>", GuildModel.SpellListColor[sl_cfg.color], Trim(sl_cfg.name))
|
|
|
|
elseif self.invite_data.invite_type == CommonModel.InviteTipsType.Team then -- 组队邀请
|
|
local data = self.invite_data.param_data
|
|
local str = string.format('Lv.%s %s', data.level, data.name)
|
|
self.role_name_tmp.text = HtmlColorTxt( str, "#ffffff")
|
|
-- 副本目标
|
|
local main_type = data.activity_id or ""
|
|
local sub_type = data.subtype or ""
|
|
local cfg = Config.Teamui[main_type.."@"..sub_type]
|
|
if cfg then
|
|
local txt = cfg.subtype_name
|
|
self.invite_content_tmp.text = "副本:" .. HtmlColorTxt( Trim(txt), "#fdffc2")
|
|
else
|
|
self.invite_content_tmp.text = "暂无目标"
|
|
end
|
|
elseif self.invite_data.invite_type == CommonModel.InviteTipsType.Crusade then --装备副本
|
|
local data = self.invite_data
|
|
self.role_name_tmp.text = HtmlColorTxt( data.inviter_name, "#ffffff")
|
|
self.dun_cfg = DunManyModel.getInstance():GetManyDunCfg(data.dun_id)
|
|
if self.dun_cfg then
|
|
self.invite_content_tmp.text = HtmlColorTxt(Trim(self.dun_cfg.sub_type_name), "#FDFFC2")
|
|
end
|
|
self.show_time_str = data.show_time_str
|
|
self.show_time_elapse = data.show_time
|
|
|
|
elseif self.invite_data.invite_type == CommonModel.InviteTipsType.GuardinThree then --守卫信标
|
|
local data = self.invite_data
|
|
self.role_name_tmp.text = HtmlColorTxt( data.inviter_name, "#ffffff")
|
|
self.dun_cfg = BaseDungeonModel.Instance:GetDunCfg(data.dun_id)
|
|
|
|
if self.dun_cfg then
|
|
self.invite_content_tmp.text = HtmlColorTxt(Trim(self.dun_cfg.name), "#FDFFC2")
|
|
end
|
|
self.show_time_str = data.show_time_str
|
|
self.show_time_elapse = data.show_time
|
|
DunManyModel.getInstance():Fire(DunManyModel.REQUEST_CCMD_EVENT, 21528,DunManyModel.InviteTeamType.GuardinThree)
|
|
elseif self.invite_data.invite_type == CommonModel.InviteTipsType.EventTips then -- 活动tips
|
|
self.role_name_tmp.text = HtmlColorTxt(self.invite_data.inviter_name, "#ffffff")
|
|
self.invite_content_tmp.text = self.invite_data.inviter_content
|
|
end
|
|
|
|
-- 设置vip 并调整名字的位置
|
|
self.vip_item:SetData(self.invite_data.vip, self.invite_data.svip)
|
|
-- 自动关闭倒计时
|
|
self:StartAutoCloseTimer()
|
|
-- 播放弹出动画
|
|
self:ShowAnim()
|
|
end
|
|
end
|
|
|
|
-- 自动关闭倒计时
|
|
function CommonInviteTipView:StartAutoCloseTimer( )
|
|
self.time_bg_obj:SetActive(self.show_time_str ~= false and self.show_time_str ~= "")
|
|
self.time_text_obj:SetActive(self.show_time_str ~= false and self.show_time_str ~= "")
|
|
local end_time = self.auto_close_time + TimeUtil:getServerTimeMs()/1000
|
|
local show_time = self.show_time_elapse ~= false and ( self.show_time_elapse + TimeUtil:getServerTimeMs()/1000) or (false)
|
|
self:ClearAutoCloseTimer()
|
|
local function auto_close_func()
|
|
local left_time = end_time - TimeUtil:getServerTimeMs()/1000
|
|
self.fillBg_img.fillAmount = clamp(left_time / self.auto_close_time, 0, 1)
|
|
|
|
if show_time then
|
|
local sce_time = math_floor(show_time - TimeUtil:getServerTimeMs()/1000)
|
|
if sce_time >= 0 then
|
|
self.time_text_tmp.text = string.format(self.show_time_str, HtmlColorTxt(sce_time, "#0ce148"))
|
|
else
|
|
self.time_text_tmp.text = ""
|
|
self.time_text_obj:SetActive(false)
|
|
self.show_time_str = false
|
|
self.show_time_elapse = false
|
|
end
|
|
end
|
|
--绝地守卫特殊显示
|
|
if self.invite_data and self.invite_data.invite_type == CommonModel.InviteTipsType.GuardinThree then
|
|
self.time_text_tmp.text = self:GetGuardinThreeText()
|
|
end
|
|
|
|
if left_time <= 0 then
|
|
if self.invite_data.invite_type == CommonModel.InviteTipsType.Crusade or self.invite_data.invite_type == CommonModel.InviteTipsType.GuardinThree then
|
|
if self.invite_data and self.invite_data.other_callback then
|
|
self.invite_data.other_callback(self.invite_data)
|
|
end
|
|
else
|
|
if self.invite_data and self.invite_data.reject_callback then
|
|
self.invite_data.reject_callback(self.invite_data)
|
|
end
|
|
end
|
|
self:ClearAutoCloseTimer()
|
|
self:HideAnim() -- 播放关闭效果,并检查邀请缓存
|
|
end
|
|
end
|
|
self.auto_close_func_id = GlobalTimerQuest:AddPeriodQuest(auto_close_func, 0.02, -1)
|
|
end
|
|
function CommonInviteTipView:ClearAutoCloseTimer( )
|
|
if self.auto_close_func_id then
|
|
GlobalTimerQuest:CancelQuest(self.auto_close_func_id)
|
|
self.auto_close_func_id = nil
|
|
end
|
|
end
|
|
|
|
-- 弹出动画
|
|
function CommonInviteTipView:ShowAnim()
|
|
local function anim_callback()
|
|
self.is_animating = false
|
|
end
|
|
self:ClearViewAnimId()
|
|
self.is_animating = true
|
|
self.view_anim_id = TweenLite.to(self, self.transform, TweenLite.UiAnimationType.ANCHORED_POSX,
|
|
self.end_anim_pos_x, self.anim_time, anim_callback, TweenFunc.EASE_OUT_QUINT)
|
|
end
|
|
-- 播放关闭动画,并检测缓存是否还有其他邀请没有处理
|
|
function CommonInviteTipView:HideAnim()
|
|
local function anim_callback()
|
|
self.is_animating = false
|
|
self.waiting = true
|
|
self:DestroyTimer()
|
|
-- 检查缓存
|
|
CommonController.Instance:Fire(EventName.SHOW_COMMON_INVITE_TIPS)
|
|
end
|
|
self:ClearViewAnimId()
|
|
self.is_animating = true
|
|
self.view_anim_id = TweenLite.to(self, self.transform, TweenLite.UiAnimationType.ANCHORED_POSX,
|
|
self.start_anim_pos_x, self.anim_time, anim_callback, TweenFunc.EASE_OUT_QUINT)
|
|
end
|
|
function CommonInviteTipView:ClearViewAnimId( )
|
|
if self.view_anim_id then
|
|
TweenLite.Stop(self.view_anim_id)
|
|
self.view_anim_id = nil
|
|
end
|
|
end
|
|
|
|
-- 销毁界面倒计时 固定5秒后如果没有新的邀请则销毁界面
|
|
function CommonInviteTipView:DestroyTimer( )
|
|
local end_time = 5 + TimeUtil:getServerTime()
|
|
self:ClearDestroyTimer()
|
|
local function destroy_func()
|
|
local left_time = end_time - TimeUtil:getServerTime()
|
|
if left_time <= 0 then
|
|
self:Close()
|
|
end
|
|
end
|
|
self.destroy_func_id = GlobalTimerQuest:AddPeriodQuest(destroy_func, 0.1, -1)
|
|
end
|
|
function CommonInviteTipView:ClearDestroyTimer( )
|
|
if self.destroy_func_id then
|
|
GlobalTimerQuest:CancelQuest(self.destroy_func_id)
|
|
self.destroy_func_id = nil
|
|
end
|
|
end
|
|
|
|
function CommonInviteTipView:DestroySuccess( )
|
|
if self.vip_item then
|
|
self.vip_item:DeleteMe()
|
|
self.vip_item = nil
|
|
end
|
|
self:ClearViewAnimId()
|
|
self:ClearAutoCloseTimer()
|
|
self:ClearDestroyTimer()
|
|
end
|
|
|
|
function CommonInviteTipView:GetGuardinThreeText( )
|
|
self.dun_many_model = self.dun_many_model or DunManyModel.getInstance()
|
|
local info = self.dun_many_model:GetDunManyMirrorInfo(DunManyModel.InviteTeamType.GuardinThree)
|
|
local str = ""
|
|
if info then
|
|
local time_str = ""
|
|
if info.recover_time ~= 0 then
|
|
local cur_time = TimeUtil:getServerTime()
|
|
if cur_time >= info.recover_time then
|
|
if not self.req_duny_many_mirror then
|
|
self.dun_many_model:Fire(DunManyModel.REQUEST_CCMD_EVENT, 21528,DunManyModel.InviteTeamType.GuardinThree)
|
|
self.req_duny_many_mirror = true
|
|
end
|
|
else
|
|
local left_time = info.recover_time - cur_time
|
|
time_str = string.format("%s后恢复%s次", HtmlColorTxt(TimeUtil:timeConvert8(left_time), "#0ce148"), HtmlColorTxt(1, "#0ce148"))
|
|
end
|
|
end
|
|
str = string.format("剩余分身数:%s %s", HtmlColorTxt(info.count, "#0ce148") , time_str)
|
|
end
|
|
return str
|
|
end
|