源战役客户端
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 

371 wiersze
16 KiB

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