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