PGRData/Script/matrix/xui/xuinoticetips/XUiNoticeTips.lua

177 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