159 lines
No EOL
4.9 KiB
Lua
159 lines
No EOL
4.9 KiB
Lua
local XUiTipLayer = XLuaUiManager.Register(XLuaUi, "UiTipLayer")
|
|
|
|
local TIP_MSG_SHOW_TIME = 2000
|
|
|
|
function XUiTipLayer:OnAwake()
|
|
self:InitAutoScript()
|
|
end
|
|
|
|
function XUiTipLayer:OnStart(msg, type, cb, hideCloseMark)
|
|
self.Cb = cb
|
|
self.closeState = false
|
|
self:HideTipLayer()
|
|
self.BtnClose.interactable = true
|
|
self.BtnClose.gameObject:SetActive(not hideCloseMark)
|
|
XUiHelper.StopAnimation()
|
|
if type == XUiManager.UiTipType.Tip then
|
|
self.PanelTip.gameObject:SetActive(true)
|
|
self:PlayAnimation("PanelTip")
|
|
self.TxtInfo.text = msg
|
|
elseif type == XUiManager.UiTipType.Success then
|
|
CS.XAudioManager.PlaySound(XSoundManager.UiBasicsMusic.Success) -- 成功
|
|
self.PanelSuccess.gameObject:SetActive(true)
|
|
self:PlayAnimation("PaneSuccess")
|
|
self.TxtInfoSuccess.text = msg
|
|
elseif type == XUiManager.UiTipType.Wrong then
|
|
CS.XAudioManager.PlaySound(XSoundManager.UiBasicsMusic.Intercept) -- 拦截
|
|
self.PanelError.gameObject:SetActive(true)
|
|
self:PlayAnimation("PanelError")
|
|
self.TxtInfoError.text = msg
|
|
end
|
|
|
|
local pop = function()
|
|
self:Close()
|
|
end
|
|
|
|
local closeFunc
|
|
if type == XUiManager.UiTipType.Tip then
|
|
closeFunc = function()
|
|
if not XTool.UObjIsNil(self.GameObject) then
|
|
self:PlayAnimation("PanelTipEnd", pop)
|
|
end
|
|
end
|
|
elseif type == XUiManager.UiTipType.Success then
|
|
closeFunc = function()
|
|
if not XTool.UObjIsNil(self.GameObject) then
|
|
self:PlayAnimation("PaneSuccessEnd", pop)
|
|
end
|
|
end
|
|
elseif type == XUiManager.UiTipType.Wrong then
|
|
closeFunc = function()
|
|
if not XTool.UObjIsNil(self.GameObject) then
|
|
self:PlayAnimation("PanelErrorEnd", pop)
|
|
end
|
|
end
|
|
end
|
|
self.CloseFunc = closeFunc
|
|
self.Timer = XScheduleManager.ScheduleOnce(function()
|
|
if not self.closeState then
|
|
self.closeState = true
|
|
closeFunc()
|
|
end
|
|
end, TIP_MSG_SHOW_TIME)
|
|
end
|
|
|
|
-- auto
|
|
-- Automatic generation of code, forbid to edit
|
|
function XUiTipLayer:InitAutoScript()
|
|
self:AutoInitUi()
|
|
self.SpecialSoundMap = {}
|
|
self:AutoAddListener()
|
|
end
|
|
|
|
function XUiTipLayer:AutoInitUi()
|
|
self.BtnClose = self.Transform:Find("SafeAreaContentPane/BtnClose"):GetComponent("Button")
|
|
self.PanelSuccess = self.Transform:Find("SafeAreaContentPane/PanelSuccess")
|
|
self.TxtInfoSuccess = self.Transform:Find("SafeAreaContentPane/PanelSuccess/TxtInfo"):GetComponent("Text")
|
|
self.PanelError = self.Transform:Find("SafeAreaContentPane/PanelError")
|
|
self.TxtInfoError = self.Transform:Find("SafeAreaContentPane/PanelError/TxtInfo"):GetComponent("Text")
|
|
self.PanelTip = self.Transform:Find("SafeAreaContentPane/PanelTip")
|
|
self.TxtInfo = self.Transform:Find("SafeAreaContentPane/PanelTip/TxtInfo"):GetComponent("Text")
|
|
end
|
|
|
|
function XUiTipLayer:GetAutoKey(uiNode, eventName)
|
|
if not uiNode then
|
|
return
|
|
end
|
|
return eventName .. uiNode:GetHashCode()
|
|
end
|
|
|
|
function XUiTipLayer:RegisterListener(uiNode, eventName, func)
|
|
local key = self:GetAutoKey(uiNode, eventName)
|
|
if not key then
|
|
return
|
|
end
|
|
local listener = self.AutoCreateListeners[key]
|
|
if listener ~= nil then
|
|
uiNode[eventName]:RemoveListener(listener)
|
|
end
|
|
|
|
if func ~= nil then
|
|
if type(func) ~= "function" then
|
|
XLog.Error("XUiTipLayer:RegisterListener函数错误, 参数func需要是function类型, func的类型是" .. type(func))
|
|
end
|
|
|
|
listener = function(...)
|
|
XSoundManager.PlayBtnMusic(self.SpecialSoundMap[key], eventName)
|
|
func(self, ...)
|
|
end
|
|
|
|
uiNode[eventName]:AddListener(listener)
|
|
self.AutoCreateListeners[key] = listener
|
|
end
|
|
end
|
|
|
|
function XUiTipLayer:AutoAddListener()
|
|
self.AutoCreateListeners = {}
|
|
self:RegisterClickEvent(self.BtnClose, self.OnBtnCloseClick)
|
|
end
|
|
-- auto
|
|
function XUiTipLayer:OnBtnCloseClick()
|
|
|
|
if self.closeState then
|
|
return
|
|
end
|
|
|
|
self.closeState = true
|
|
XScheduleManager.UnSchedule(self.Timer)
|
|
self.BtnClose.interactable = false
|
|
if self.CloseFunc then
|
|
self:CloseFunc()
|
|
else
|
|
--CS.XUiManager.TipsManager:Pop()
|
|
self:Close()
|
|
end
|
|
end
|
|
|
|
function XUiTipLayer:HideTipLayer()
|
|
self.PanelTip.gameObject:SetActive(false)
|
|
self.PanelError.gameObject:SetActive(false)
|
|
self.PanelSuccess.gameObject:SetActive(false)
|
|
end
|
|
|
|
function XUiTipLayer:OnDestroy()
|
|
local key = self:GetAutoKey(self.BtnClose, "onClick")
|
|
if not key then
|
|
return
|
|
end
|
|
local listener = self.AutoCreateListeners[key]
|
|
if listener ~= nil then
|
|
self.BtnClose["onClick"]:RemoveListener(listener)
|
|
end
|
|
if self.Cb then
|
|
self.Cb()
|
|
end
|
|
if self.Timer then
|
|
XScheduleManager.UnSchedule(self.Timer)
|
|
self.Timer = nil
|
|
end
|
|
end |