401 lines
No EOL
13 KiB
Lua
401 lines
No EOL
13 KiB
Lua
local tableUnpack = table.unpack
|
||
|
||
XUi = XClass(nil, "XUi")
|
||
|
||
function XUi:Ctor(name, ui)
|
||
self.Name = name
|
||
self.CsUi = ui
|
||
self.Transform = ui.Transform
|
||
self.GameObject = ui.GameObject
|
||
self.UiAnimation = ui.UiAnimation
|
||
end
|
||
|
||
function XUi:OnOpen()
|
||
end
|
||
|
||
function XUi:OnClose()
|
||
end
|
||
|
||
function XUi:OnShow()
|
||
end
|
||
|
||
function XUi:OnHide()
|
||
end
|
||
|
||
function XUi:SetUiSprite(image, name, callBack)
|
||
if not XTool.UObjIsNil(self.CsUi) then
|
||
self.CsUi:SetUiSprite(image, name, callBack)
|
||
end
|
||
end
|
||
|
||
local TipMsgQueue --重复弹条提示队列
|
||
local ClearMsgEvent
|
||
local CurrentTipState -- 弹条状态
|
||
|
||
local TipState = {
|
||
IDLE = 1,
|
||
SHOWING = 2,
|
||
LOCK = 3
|
||
}
|
||
|
||
XUiManager = XUiManager or {}
|
||
|
||
|
||
function XUiManager.Init()
|
||
CurrentTipState = TipState.IDLE
|
||
TipMsgQueue = XQueue.New()
|
||
XUiManager.IsHideFunc = CS.XRemoteConfig.IsHideFunc
|
||
end
|
||
|
||
local ClassTable = {}
|
||
local ClassObj = {}
|
||
|
||
function XUiManager.Register(name, super)
|
||
super = super or XUi
|
||
--CS.XUiManager.Register(name)
|
||
local class = XClass(super, name)
|
||
ClassTable[name] = class
|
||
return class
|
||
end
|
||
|
||
function XUiManager.FindClassType(name)
|
||
for k, v in pairs(ClassObj) do
|
||
if k == name then
|
||
return v
|
||
end
|
||
end
|
||
return nil
|
||
end
|
||
|
||
function XUiManager.RemoveClassType(name)
|
||
for k, _ in pairs(ClassObj) do
|
||
if k == name then
|
||
ClassObj[k] = nil
|
||
end
|
||
end
|
||
end
|
||
|
||
function XUiManager.New(name, ui)
|
||
local baseName = name
|
||
local class = ClassTable[baseName]
|
||
if not class then
|
||
baseName = string.match(baseName, '%w*[^(%d)$*]') -- 解析包含数字后缀的界面
|
||
class = ClassTable[baseName]
|
||
if not class then
|
||
XLog.Error("XUiManager.New error, class not exist, name: " .. name)
|
||
return nil
|
||
end
|
||
end
|
||
local obj = class.New(name, ui)
|
||
ClassObj[name] = obj
|
||
return obj
|
||
end
|
||
|
||
--XUiManager.XUiEvent = {
|
||
-- Show = 1,
|
||
-- Hide = 2,
|
||
-- Open = 3,
|
||
-- Close = 4,
|
||
--}
|
||
XUiManager.UiTipType = {
|
||
Tip = 1,
|
||
Wrong = 2,
|
||
Success = 3,
|
||
}
|
||
|
||
XUiManager.DialogType = {
|
||
Normal = "Normal",
|
||
OnlyClose = "OnlyClose",
|
||
OnlySure = "OnlySure",
|
||
NoBtn = "NoBtn",
|
||
NormalAndNoBtnTanchuangClose = "NormalAndNoBtnTanchuangClose",
|
||
Passport = "Passport",--海外新增,因为日服要显示购买二级弹窗链接
|
||
}
|
||
|
||
XUiManager.IsHideFunc = false
|
||
|
||
|
||
function XUiManager.ClearTipMsgQueue()
|
||
CurrentTipState = TipState.IDLE
|
||
TipMsgQueue:Clear()
|
||
end
|
||
|
||
function XUiManager.TipMsgEnqueue(msg, type, cb, hideCloseMark)
|
||
if CurrentTipState == TipState.IDLE then
|
||
XUiManager.TipMsg(msg, type, cb, hideCloseMark)
|
||
else
|
||
local msgData = { msg, type, cb, hideCloseMark }
|
||
TipMsgQueue:Enqueue(msgData)
|
||
ClearMsgEvent = ClearMsgEvent or XEventManager.AddEventListener(XEventId.EVENT_MAINUI_ENABLE, XUiManager.ClearTipMsgQueue)
|
||
end
|
||
end
|
||
|
||
function XUiManager.TipMsgDequeue()
|
||
if CurrentTipState == TipState.SHOWING then return end
|
||
local msgData = TipMsgQueue:Dequeue()
|
||
if msgData then
|
||
XUiManager.TipMsg(tableUnpack(msgData))
|
||
else
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_MAINUI_ENABLE, XUiManager.ClearTipMsgQueue)
|
||
ClearMsgEvent = nil
|
||
end
|
||
end
|
||
|
||
function XUiManager.TipMsg(msg, type, cb, hideCloseMark)
|
||
if not msg then
|
||
XLog.Error("XUiManager.TipMsg error, msg is nil")
|
||
return
|
||
end
|
||
|
||
if not type then
|
||
type = XUiManager.UiTipType.Tip
|
||
end
|
||
if CurrentTipState == TipState.SHOWING then return end
|
||
CurrentTipState = TipState.SHOWING
|
||
CS.XAudioManager.PlaySound(XSoundManager.UiBasicsMusic.Tip_small)
|
||
local callback = function()
|
||
if cb then cb() end
|
||
CurrentTipState = TipState.IDLE
|
||
XUiManager.TipMsgDequeue()
|
||
end
|
||
--CS.XUiManager.TipsManager:Push("UiTipLayer", true, true, msg, type)
|
||
XLuaUiManager.Open("UiTipLayer", msg, type, callback, hideCloseMark)
|
||
end
|
||
|
||
function XUiManager.TipText(key, type, isEnqueue, ...)
|
||
if not type then
|
||
type = XUiManager.UiTipType.Wrong
|
||
end
|
||
local text = XUiHelper.GetText(key, ...)
|
||
if isEnqueue then
|
||
XUiManager.TipMsgEnqueue(text, type)
|
||
else
|
||
XUiManager.TipMsg(text, type)
|
||
end
|
||
end
|
||
|
||
function XUiManager.TipSuccess(msg, hideCloseMark)
|
||
XUiManager.TipMsg(msg, XUiManager.UiTipType.Success, nil, hideCloseMark)
|
||
end
|
||
|
||
function XUiManager.TipError(msg)
|
||
XUiManager.TipMsg(msg, XUiManager.UiTipType.Wrong)
|
||
end
|
||
|
||
function XUiManager.TipErrorWithKey(key, ...)
|
||
XUiManager.TipError(XUiHelper.GetText(key, ...))
|
||
end
|
||
|
||
function XUiManager.TipCode(code, ...)
|
||
local text = CS.XTextManager.GetCodeText(code, ...)
|
||
if code == XCode.Success then
|
||
XUiManager.TipSuccess(text)
|
||
else
|
||
XUiManager.TipError(text)
|
||
end
|
||
end
|
||
|
||
function XUiManager.DialogTip(title, content, dialogType, closeCallback, sureCallback, extraData)
|
||
if not title and not content then
|
||
XLog.Error("XUiManager.DialogTip error, title and content is nil")
|
||
return
|
||
end
|
||
|
||
dialogType = dialogType or XUiManager.DialogType.Normal
|
||
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_UIDIALOG_VIEW_ENABLE)
|
||
|
||
CS.XAudioManager.PlaySound(XSoundManager.UiBasicsMusic.Tip_Big)
|
||
|
||
--CS.XUiManager.DialogManager:Push("UiDialog", true, true, title, content, dialogType, closeCallback, sureCallback)
|
||
XLuaUiManager.Open("UiDialog", title, content, dialogType, closeCallback, sureCallback, extraData)
|
||
end
|
||
|
||
function XUiManager.DialogDragTip(title, content, dialogType, closeCallback, sureCallback, extraData)
|
||
if not title and not content then
|
||
XLog.Error("XUiManager.DialogTip error, title and content is nil")
|
||
return
|
||
end
|
||
|
||
dialogType = dialogType or XUiManager.DialogType.Normal
|
||
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_UIDIALOG_VIEW_ENABLE)
|
||
|
||
CS.XAudioManager.PlaySound(XSoundManager.UiBasicsMusic.Tip_Big)
|
||
|
||
XLuaUiManager.Open("UiDialogDrag", title, content, dialogType, closeCallback, sureCallback, extraData)
|
||
end
|
||
|
||
--带今日内不再提示选项的提示框
|
||
function XUiManager.DialogHintTip(title, content, content2, closeCallback, sureCallback, hintInfo)
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_UIDIALOG_VIEW_ENABLE)
|
||
CS.XAudioManager.PlaySound(XSoundManager.UiBasicsMusic.Tip_Big)
|
||
XLuaUiManager.Open("UiCueMark", title, content, content2, closeCallback, sureCallback, hintInfo)
|
||
end
|
||
|
||
--弹出系统提示
|
||
function XUiManager.SystemDialogTip(title, content, dialogType, closeCallback, sureCallback)
|
||
if not title or not content then
|
||
XLog.Error("XUiManager.SystemDialogTip error, title or content is nil")
|
||
return
|
||
end
|
||
|
||
if not XUiManager.DialogType[dialogType] then
|
||
XLog.Error("XUiManager.SystemDialogTip error, dialogType is error")
|
||
return
|
||
end
|
||
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_UIDIALOG_VIEW_ENABLE)
|
||
|
||
CS.XAudioManager.PlaySound(XSoundManager.UiBasicsMusic.Tip_Big)
|
||
|
||
XLuaUiManager.Open("UiSystemDialog", title, content, dialogType, closeCallback, sureCallback)
|
||
end
|
||
|
||
-- 显示帮助界面
|
||
-- Param:cb 关闭帮助界面时执行的回调
|
||
function XUiManager.ShowHelpTip(helpDataKey, cb)
|
||
local config = XHelpCourseConfig.GetHelpCourseTemplateByFunction(helpDataKey)
|
||
if not config then
|
||
return
|
||
end
|
||
|
||
if config.IsShowCourse == 1 then
|
||
XLuaUiManager.Open("UiHelp", config, cb)
|
||
else
|
||
XUiManager.UiFubenDialogTip(config.Name, config.Describe)
|
||
end
|
||
end
|
||
|
||
function XUiManager.ShowHelpTipNew(getHelpDataFunc, cb)
|
||
if not getHelpDataFunc then
|
||
XLog.Error("XUiManager.ShowHelpTipNew Error: GetHelpDataFunc is Nil")
|
||
return
|
||
end
|
||
|
||
local helpData = getHelpDataFunc()
|
||
if not helpData or not next(helpData) then
|
||
return
|
||
end
|
||
|
||
XLuaUiManager.Open("UiHelpNew", helpData, cb)
|
||
end
|
||
|
||
function XUiManager.UiFubenDialogTip(title, content, closeCallback, sureCallback)
|
||
if not title or not content then
|
||
XLog.Error("XUiManager.UiFubenDialog error, title or content is nil")
|
||
return
|
||
end
|
||
|
||
CS.XAudioManager.PlaySound(1100)
|
||
XLuaUiManager.Open("UiFubenDialog", title, content, closeCallback, sureCallback)
|
||
end
|
||
|
||
function XUiManager.OpenBuyAssetPanel(id, successCallback)
|
||
XDataCenter.ItemManager.SelectBuyAssetType(id, successCallback, nil, nil)
|
||
end
|
||
|
||
function XUiManager.OpenUiObtain(data, title, closeCallback, sureCallback, horizontalNormalizedPosition)
|
||
XLuaUiManager.Open("UiObtain", data, title, closeCallback, sureCallback, horizontalNormalizedPosition)
|
||
end
|
||
|
||
function XUiManager.OpenUiTipReward(data, title, closeCallback, sureCallback)
|
||
XLuaUiManager.Open("UiTipReward", data, title, closeCallback, sureCallback)
|
||
end
|
||
|
||
function XUiManager.OpenUiTipRewardByRewardId(id, title, closeCallback, sureCallback, extraTip)
|
||
local data = XRewardManager.GetRewardList(id)
|
||
if not data then return end
|
||
XLuaUiManager.Open("UiTipReward", data, title, closeCallback, sureCallback, extraTip)
|
||
end
|
||
|
||
function XUiManager.OpenMainUi()
|
||
local guideFight = XDataCenter.GuideManager.GetNextGuideFight()
|
||
if guideFight then
|
||
XLuaUiManager.Close("UiGuide")
|
||
XDataCenter.FubenManager.EnterGuideFight(guideFight.Id, guideFight.StageId, guideFight.NpcId, guideFight.Weapon)
|
||
else
|
||
XLuaUiManager.RunMain()
|
||
end
|
||
end
|
||
|
||
function XUiManager.CheckTopUi(type, name)
|
||
local ui = CsXUiManager.Instance:GetTopUi(type)
|
||
return ui.UiData.UiName == name
|
||
end
|
||
|
||
function XUiManager.OpenPopWebview(url, title)
|
||
--如果是PC正常使用URL跳转,手机平台才用WEB VIEW打开
|
||
if CS.UnityEngine.Application.platform == CS.UnityEngine.RuntimePlatform.WindowsEditor or
|
||
CS.UnityEngine.Application.platform == CS.UnityEngine.RuntimePlatform.WindowsPlayer then
|
||
CS.UnityEngine.Application.OpenURL(url)
|
||
else
|
||
XLuaUiManager.Open("UiLoginNotice", {
|
||
HtmlUrl = url,
|
||
Title = title and XUiHelper.RichTextToTextString(title) or CS.XTextManager.GetText("Agreement"),
|
||
isFullUrl = true
|
||
})
|
||
end
|
||
end
|
||
|
||
function XUiManager.OpenGoodDetailUi(goodId, fromUiName, customData, hideSkipBtn)
|
||
-- 匹配中
|
||
if XDataCenter.FubenUnionKillRoomManager.IsMatching() then
|
||
return
|
||
end
|
||
local goodsShowParams = XGoodsCommonManager.GetGoodsShowParamsByTemplateId(goodId)
|
||
local uiType = XLuaUiManager.FindTopUi(fromUiName).UiProxy.Ui.UiData.UiType
|
||
if goodsShowParams.RewardType == XRewardManager.XRewardType.Character then
|
||
--从Tips的ui跳转需要关闭Tips的UI
|
||
if uiType == CsXUiType.Tips then
|
||
XLuaUiManager.Close(fromUiName)
|
||
end
|
||
-- 暂停自动弹窗
|
||
XDataCenter.AutoWindowManager.StopAutoWindow()
|
||
XLuaUiManager.Open("UiCharacterDetail", goodId)
|
||
elseif goodsShowParams.RewardType == XRewardManager.XRewardType.Equip then
|
||
XLuaUiManager.Open("UiEquipDetail", goodId, true)
|
||
--从Tips的ui跳转需要关闭Tips的UI
|
||
if uiType == CsXUiType.Tips then
|
||
XLuaUiManager.Close(fromUiName)
|
||
end
|
||
-- 暂停自动弹窗
|
||
XDataCenter.AutoWindowManager.StopAutoWindow()
|
||
elseif goodsShowParams.RewardType == XRewardManager.XRewardType.Furniture then
|
||
local cfg = XFurnitureConfigs.GetFurnitureReward(goodId)
|
||
local furnitureRewardId = goodId
|
||
local configId = cfg.FurnitureId
|
||
XLuaUiManager.Open("UiFurnitureDetail", customData.InstanceId, configId, furnitureRewardId, nil, true)
|
||
elseif goodsShowParams.RewardType == XRewardManager.XRewardType.Fashion then
|
||
local buyData
|
||
if customData and customData.ItemCount and customData.ItemIcon and customData.BuyCallBack then
|
||
buyData = {}
|
||
local isHave, isLimitTime = XRewardManager.CheckRewardOwn(goodsShowParams.RewardType, goodsShowParams.TemplateId)
|
||
buyData.IsHave = isHave and not isLimitTime
|
||
buyData.ItemIcon = customData.ItemIcon
|
||
buyData.ItemCount = customData.ItemCount
|
||
buyData.BuyCallBack = customData.BuyCallBack
|
||
end
|
||
XLuaUiManager.Open("UiFashionDetail", goodId, false, buyData)
|
||
elseif goodsShowParams.RewardType == XRewardManager.XRewardType.Partner then
|
||
--从Tips的ui跳转需要关闭Tips的UI
|
||
if uiType == CsXUiType.Tips then
|
||
XLuaUiManager.Close(fromUiName)
|
||
end
|
||
-- 暂停自动弹窗
|
||
XDataCenter.AutoWindowManager.StopAutoWindow()
|
||
local partnerData = { Id = 0, TemplateId = goodId }
|
||
local partner = XDataCenter.PartnerManager.CreatePartnerEntityByPartnerData(partnerData, true)
|
||
XLuaUiManager.Open("UiPartnerPreview", partner)
|
||
|
||
elseif XDataCenter.ItemManager.IsWeaponFashion(goodId) then
|
||
local weaponFashionId = XDataCenter.ItemManager.GetWeaponFashionId(goodId)
|
||
XLuaUiManager.Open("UiFashionDetail", weaponFashionId, true)
|
||
elseif goodsShowParams.RewardType == XRewardManager.XRewardType.Nameplate then
|
||
XLuaUiManager.Open("UiNameplateTip", goodId, true, true)
|
||
else
|
||
XLuaUiManager.Open("UiTip", customData and customData or goodId, hideSkipBtn, fromUiName)
|
||
end
|
||
end
|
||
|
||
XUiManager.Init() |