178 lines
4.7 KiB
Lua
178 lines
4.7 KiB
Lua
|
local XUiNoticeTips = XLuaUiManager.Register(XLuaUi, "UiNoticeTips")
|
||
|
|
||
|
local MoveSpeed = 100
|
||
|
local TextReservedWidth = 60
|
||
|
local HideIntervalTime = 3
|
||
|
local WaitTime = 3
|
||
|
|
||
|
function XUiNoticeTips:OnAwake()
|
||
|
self:InitAutoScript()
|
||
|
|
||
|
if not self.behaviour then
|
||
|
self.behaviour = self.Transform.gameObject:AddComponent(typeof(CS.XLuaBehaviour))
|
||
|
self.behaviour.LuaUpdate = function()
|
||
|
if self.Update then
|
||
|
self:Update()
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiNoticeTips:OnStart()
|
||
|
self:RefreshNoticeContent()
|
||
|
|
||
|
self.TxtNoticeWidth = XUiHelper.CalcTextWidth(self.TxtNotice)
|
||
|
self.PanelNoticeRect = self.PanelNotice.gameObject:GetComponent("RectTransform")
|
||
|
self.PauseTime = 0
|
||
|
end
|
||
|
|
||
|
function XUiNoticeTips:RefreshNoticeContent()
|
||
|
local noticeContent = XDataCenter.NoticeManager.GetTextNoticeContent()
|
||
|
if not noticeContent then
|
||
|
return
|
||
|
end
|
||
|
self.TxtNotice.text = noticeContent
|
||
|
end
|
||
|
|
||
|
function XUiNoticeTips:OnNotify(evt)
|
||
|
if evt == XEventId.EVENT_USER_LOGOUT then
|
||
|
self:Close()
|
||
|
elseif evt == XEventId.EVENT_NOTICE_CLOSE_TEXT_NOTICE then
|
||
|
self:Close()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiNoticeTips:OnGetEvents()
|
||
|
return {XEventId.EVENT_NOTICE_CLOSE_TEXT_NOTICE, XEventId.EVENT_USER_LOGOUT}
|
||
|
end
|
||
|
|
||
|
function XUiNoticeTips:GetEndPos()
|
||
|
if self.EndPos then
|
||
|
return self.EndPos
|
||
|
end
|
||
|
|
||
|
self.EndPos = CS.UnityEngine.Vector3((-self.PanelNoticeRect.sizeDelta.x / 2 - self.TxtNoticeWidth / 2), 0, 0)
|
||
|
|
||
|
return self.EndPos
|
||
|
end
|
||
|
|
||
|
function XUiNoticeTips:GetBeginPos()
|
||
|
local BeginPos
|
||
|
if self.TxtNoticeWidth > self.PanelNoticeRect.sizeDelta.x then
|
||
|
BeginPos = CS.UnityEngine.Vector3((self.TxtNoticeWidth - self.PanelNoticeRect.sizeDelta.x) / 2 + TextReservedWidth, 0, 0)
|
||
|
else
|
||
|
BeginPos = CS.UnityEngine.Vector3(0, 0, 0)
|
||
|
end
|
||
|
return BeginPos
|
||
|
end
|
||
|
|
||
|
function XUiNoticeTips:ResetTxtNoticePos()
|
||
|
if not self.NeedReset then
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
XDataCenter.NoticeManager.AddTextNoticeCount()
|
||
|
|
||
|
if not XDataCenter.NoticeManager.CheckTextNoticeValid() then
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
self:SetBgActive(true)
|
||
|
|
||
|
self.TxtNotice.transform.localPosition = self:GetBeginPos()
|
||
|
self.WaitTime = 0
|
||
|
self.NeedReset = false
|
||
|
|
||
|
self:RefreshNoticeContent()
|
||
|
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
function XUiNoticeTips:OnEnable()
|
||
|
self.NeedReset = true
|
||
|
self.IsInit = true
|
||
|
|
||
|
if self:ResetTxtNoticePos() then
|
||
|
self:Close()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiNoticeTips:Update()
|
||
|
if not self.IsInit then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
if self:ResetTxtNoticePos() then
|
||
|
self:Close()
|
||
|
return
|
||
|
end
|
||
|
|
||
|
if XTool.UObjIsNil(self.TxtNotice) then
|
||
|
self:Close()
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local timeInterval = CS.UnityEngine.Time.deltaTime
|
||
|
if self.TxtNotice.transform.localPosition.x <= self:GetEndPos().x then
|
||
|
if HideIntervalTime <= XDataCenter.NoticeManager.GetTextNoticeScrollInterval() then
|
||
|
self:SetBgActive(false)
|
||
|
end
|
||
|
if self.PauseTime < XDataCenter.NoticeManager.GetTextNoticeScrollInterval() then
|
||
|
self.PauseTime = self.PauseTime + timeInterval
|
||
|
return
|
||
|
end
|
||
|
|
||
|
self.NeedReset = true
|
||
|
self.PauseTime = 0
|
||
|
end
|
||
|
|
||
|
-- 公告刚出来静止一定时间再开始滚动
|
||
|
if self.WaitTime < WaitTime then
|
||
|
self.WaitTime = self.WaitTime + timeInterval
|
||
|
return
|
||
|
end
|
||
|
|
||
|
self.TxtNotice.transform.localPosition = self.TxtNotice.transform.localPosition - CS.UnityEngine.Vector3(timeInterval * MoveSpeed, 0, 0)
|
||
|
end
|
||
|
|
||
|
function XUiNoticeTips:SetBgActive(flag)
|
||
|
self.ImgBg.gameObject:SetActive(flag)
|
||
|
self.BtnClose.gameObject:SetActive(flag)
|
||
|
end
|
||
|
|
||
|
-- auto
|
||
|
-- Automatic generation of code, forbid to edit
|
||
|
function XUiNoticeTips:InitAutoScript()
|
||
|
self:AutoInitUi()
|
||
|
self:AutoAddListener()
|
||
|
end
|
||
|
|
||
|
function XUiNoticeTips:AutoInitUi()
|
||
|
self.PanelNotice = self.Transform:Find("SafeAreaContentPane/PanelNotice")
|
||
|
self.TxtNotice = self.Transform:Find("SafeAreaContentPane/PanelNotice/TxtNotice"):GetComponent("Text")
|
||
|
self.ImgBg = self.Transform:Find("SafeAreaContentPane/ImgBg"):GetComponent("Image")
|
||
|
self.BtnClose = self.Transform:Find("SafeAreaContentPane/BtnClose"):GetComponent("XUiButton")
|
||
|
end
|
||
|
|
||
|
function XUiNoticeTips:AutoAddListener()
|
||
|
self.BtnClose.CallBack = function() self:OnBtnCloseClick() end
|
||
|
end
|
||
|
-- auto
|
||
|
|
||
|
function XUiNoticeTips:OnBtnCloseClick()
|
||
|
XDataCenter.NoticeManager.ChangeTextNoticeHideCache()
|
||
|
if XDataCenter.NoticeManager.CheckTextNoticeHideCache() then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
self:Close()
|
||
|
end
|
||
|
|
||
|
function XUiNoticeTips:OnDestroy()
|
||
|
if not XTool.UObjIsNil(self.behaviour) then
|
||
|
CS.UnityEngine.GameObject.Destroy(self.behaviour)
|
||
|
end
|
||
|
|
||
|
self.behaviour = nil
|
||
|
end
|