---
--- Author: 【苏可欣】
--- AuthorID: 【384576】
--- CreateTime: 【2025-3-10 18:25:51】
--- 【FSync】
--- 【读书报告分享-新】
---
local class = require("middleclass")
local WBElement = require("mworld/worldBaseElement")
---@class fsync_140e0912_7f18_41e5_ac05_ba118e5e8121 : WorldBaseElement
local FsyncElement = class("fsync_140e0912-7f18-41e5-ac05-ba118e5e8121", WBElement)
local Fsync_Example_KEY = "_Example__Key_"
local TAG = "读书报告分享-新"
local readBookReport = "982691742386825/assets/Prefabs/ShareReadBookReport.prefab"
local PageId = "activity_center_share_readbook_report"
---@param worldElement CS.Tal.framesync.WorldElement
function FsyncElement:initialize(worldElement)
FsyncElement.super.initialize(self, worldElement)
---@type PageMonitorService
self.pageMonitorService = CourseEnv.BaseBusinessManager:GetPageMonitorService()
self:RegisterDownloadUaddress(readBookReport)
self.isInCountdown = true
-- self.hasCollectedReward = false -- 初始化为false,表示未领取奖励
-- 弹幕相关变量初始化
self.barrageRangeRectWidth = 0
self.barragePool = {} -- 对象池
self.activeBarrages = {} -- 激活的弹幕
self.barrageSpeed = 150 -- 弹幕移动速度
self.isBarrageRunning = false -- 弹幕系统运行状态
self.currentFriendIndex = 1 -- 当前使用的friend索引
--订阅KEY消息
self:InitEvent()
--订阅KEY消息
self:SubscribeMsgKey(Fsync_Example_KEY)
end
function FsyncElement:InitBarrage()
-- 获取弹幕区域宽度并初始化弹幕系统
local barrageRangeRect = self.barrageRange:GetComponent(typeof(CS.UnityEngine.RectTransform))
self.barrageRangeRectWidth = barrageRangeRect.rect.width
local barrageRect = self.barrage:GetComponent(typeof(CS.UnityEngine.RectTransform))
self.barrageRect = barrageRect
if self.shareInfo and self.shareInfo.friends and #self.shareInfo.friends > 0 and (self.shareInfo.reportStatus == 2 or self.shareInfo.reportStatus == 3) and self.shareInfo.count > 0 then
-- 清空现有对象池
self.barragePool = {}
self.activeBarrages = {}
self.currentFriendIndex = 1
-- 开始弹幕滚动
self:StartBarrageSystem()
end
end
-- 创建空弹幕实例(不绑定数据)
function FsyncElement:CreateBarrageInstance()
local barrageInstance = GameObject.Instantiate(self.barrage.gameObject)
barrageInstance.name = "barrage" .. (#self.barragePool + #self.activeBarrages + 1)
barrageInstance.transform:SetParent(self.barrageRange)
local rectTransform = barrageInstance:GetComponent(typeof(CS.UnityEngine.RectTransform))
rectTransform.localScale = CS.UnityEngine.Vector3.one
-- 初始位置在右边界外
rectTransform.anchoredPosition = CS.UnityEngine.Vector2(self.barrageRangeRectWidth, 0)
barrageInstance.gameObject:SetActive(false)
local barrage = {
instance = barrageInstance,
rectTransform = rectTransform,
width = 0, -- 宽度会在设置数据时更新
isActive = false
}
return barrage
end
-- 设置弹幕数据
function FsyncElement:SetBarrageData(barrage, friend)
if not barrage or not friend then return end
local barrageRectTransform = barrage.instance:GetComponent(typeof(CS.UnityEngine.RectTransform))
local headMask = barrageRectTransform.transform:Find("headMask")
local head = headMask:Find("head")
local headImage = head:GetComponent(typeof(CS.UnityEngine.UI.Image))
local nameText = barrageRectTransform.transform:Find("name"):GetComponent(typeof(CS.TMPro.TextMeshProUGUI))
-- 加载头像
if friend.avatar and friend.avatar ~= "" then
self.httpService:LoadNetWorkTexture(friend.avatar, function(texture)
if headImage then
headImage.sprite = texture
end
end)
end
-- 设置名称
if nameText then
nameText.text = friend.name
end
-- -- 设置位置和大小
local headRectTransform = headImage:GetComponent(typeof(CS.UnityEngine.RectTransform))
headRectTransform.anchoredPosition = CS.UnityEngine.Vector2(0, 0)
local nameRectTransform = nameText:GetComponent(typeof(CS.UnityEngine.RectTransform))
-- 设置锚点为左居中
nameRectTransform.anchorMin = CS.UnityEngine.Vector2(0, 0.5)
nameRectTransform.anchorMax = CS.UnityEngine.Vector2(0, 0.5)
nameRectTransform.pivot = CS.UnityEngine.Vector2(0, 0.5) -- 设置轴心点也为左居中
nameRectTransform.sizeDelta = CS.UnityEngine.Vector2(nameText.preferredWidth, nameRectTransform.rect.height)
nameRectTransform.anchoredPosition = CS.UnityEngine.Vector2(4 + headRectTransform.rect.width + 8, 0)
-- 更新宽度
barrageRectTransform.sizeDelta = CS.UnityEngine.Vector2(4 + headRectTransform.rect.width + 8 + nameText.preferredWidth + 8 + self.barrageTextTransform.rect.width + 16 + 70,self.barrageRect.rect.height)
barrage.width = 4 + headRectTransform.rect.width + 8 + nameText.preferredWidth + 8 +self.barrageTextTransform.rect.width + 16
return barrage
end
-- 从对象池获取弹幕并设置数据
function FsyncElement:GetBarrageFromPool()
if not self.shareInfo or not self.shareInfo.friends or #self.shareInfo.friends == 0 then
return nil
end
local barrage = nil
-- 检查对象池中是否有可复用的弹幕
if #self.barragePool > 0 then
-- 从对象池中取出一个弹幕
barrage = table.remove(self.barragePool, 1)
else
-- 对象池为空,创建新的弹幕实例
barrage = self:CreateBarrageInstance()
if not barrage then
g_LogError("创建弹幕实例失败")
return nil
end
end
-- 获取当前friend数据
local friend = self.shareInfo.friends[self.currentFriendIndex]
-- 更新friend索引,循环使用
self.currentFriendIndex = self.currentFriendIndex + 1
if self.currentFriendIndex > #self.shareInfo.friends then
self.currentFriendIndex = 1
end
-- 激活弹幕
barrage.isActive = true
barrage.instance.gameObject:SetActive(true)
-- 设置弹幕数据
self:SetBarrageData(barrage, friend)
barrage.rectTransform.anchoredPosition = CS.UnityEngine.Vector2(self.barrageRangeRectWidth, 0)
table.insert(self.activeBarrages, barrage)
return barrage
end
-- 回收弹幕到对象池
function FsyncElement:RecycleBarrage(barrage)
if not barrage then return end
-- 设置为非活动状态
barrage.isActive = false
barrage.rectTransform.anchoredPosition = CS.UnityEngine.Vector2(self.barrageRangeRectWidth, 0)
barrage.instance.gameObject:SetActive(false)
-- 放回对象池
table.insert(self.barragePool, barrage)
-- 从激活列表中移除
for i, active in ipairs(self.activeBarrages) do
if active == barrage then
table.remove(self.activeBarrages, i)
break
end
end
end
-- 开始弹幕系统
function FsyncElement:StartBarrageSystem()
g_Log(TAG,"开始弹幕系统 判断是否正在运行isBarrageRunning",self.isBarrageRunning)
if self.isBarrageRunning then return end
self.isBarrageRunning = true
-- 初始化第一个弹幕
local firstBarrage = self:GetBarrageFromPool()
if not firstBarrage then return end
-- 注册更新函数
self.barrageUpdateTimer = self.commonService:RegisterGlobalTimer(0, function()
self:UpdateBarrages()
end, true)
end
-- 更新弹幕位置
function FsyncElement:UpdateBarrages()
if not self.isBarrageRunning then return end
local deltaTime = 0.02 -- 固定帧率时间
local lastBarrage = self.activeBarrages[#self.activeBarrages]
-- 更新所有激活的弹幕位置
for i = #self.activeBarrages, 1, -1 do
local barrage = self.activeBarrages[i]
local currentPos = barrage.rectTransform.anchoredPosition
local newX = currentPos.x - self.barrageSpeed * 1
-- 如果弹幕移出左边界,回收到对象池
if newX <= -1 * barrage.rectTransform.sizeDelta.x * 2 then
g_Log(TAG,"弹幕移出左边界,回收到对象池")
self:RecycleBarrage(barrage)
else
-- 使用插值平滑移动弹幕
local targetPosition = CS.UnityEngine.Vector2(newX, currentPos.y)
barrage.rectTransform.anchoredPosition = CS.UnityEngine.Vector2.Lerp(currentPos, targetPosition, 0.03)
end
end
-- 检查是否需要生成新弹幕
if lastBarrage then
local lastBarrageRightEdge = lastBarrage.rectTransform.anchoredPosition.x + lastBarrage.width
if lastBarrageRightEdge <= self.barrageRangeRectWidth - 60 - 70 then
local newBarrage = self:GetBarrageFromPool()
-- 新弹幕已经在GetBarrageFromPool中设置了位置和数据
end
elseif #self.activeBarrages == 0 then
-- 如果没有活动的弹幕,重新开始
local newBarrage = self:GetBarrageFromPool()
end
end
-- 停止弹幕系统
function FsyncElement:StopBarrageSystem()
self.isBarrageRunning = false
g_Log(TAG,"停止弹幕系统 判断是否正在运行isBarrageRunning",self.isBarrageRunning)
if self.barrageUpdateTimer then
self.commonService:UnregisterGlobalTimer(self.barrageUpdateTimer)
self.barrageUpdateTimer = nil
end
-- 回收所有活动的弹幕
for i = #self.activeBarrages, 1, -1 do
self:RecycleBarrage(self.activeBarrages[i])
end
-- 清空对象池中的所有弹幕
for _, barrage in ipairs(self.barragePool) do
if barrage and barrage.instance then
GameObject.Destroy(barrage.instance)
end
end
self.barragePool = {}
self.activeBarrages = {}
end
function FsyncElement:InitEvent()
--监听打开事件
self.observerService:Watch("ActivityCenter_Open_Canvas", function(key, value)
local data = value[0]
self.show = data.show
self.root = data.root
if self.show == "shareReadBook" then
self.isCurrIndex = true
g_Log(TAG,"触发打开读书报告分享页面")
self:GetShareInfo(function(success, shareInfo)
if success then
self.shareInfo = shareInfo
g_Log(TAG, "self.shareInfo.reportStatus 触发打开读书报告分享页面", self.shareInfo.reportStatus)
self:LoadingReadBookPage()
end
end)
else
self.isCurrIndex = false
self:ClosePanel()
end
end)
self.observerService:Watch("ActivityCenter_Close_Canvas", function(key, value)
g_Log(TAG, "关闭读书报告分享页面")
self:ClosePanel(true)
end)
end
function FsyncElement:LoadingReadBookPage()
-- 停止之前可能正在运行的弹幕系统
-- self:StopBarrageSystem()
if self.readBookPanel and self.readBookPanel.gameObject.activeSelf == false then
self.readBookPanel.gameObject:SetActive(true)
-- 如果面板已存在但被隐藏,重新显示时也要更新倒计时
if self.shareInfo then
-- self:InitCountDown()
-- 如果符合条件,重新初始化弹幕系统
self:SetViewByShareInfo()
if (self.shareInfo.reportStatus == 2 or self.shareInfo.reportStatus == 3) and self.shareInfo.count > 0 and #self.shareInfo.friends > 0 then
self:InitBarrage()
end
end
return
end
if self.readBookPanel and self.readBookPanel.gameObject.activeSelf == true then
return
end
self.pageMonitorService:recordPageOpen(PageId, "读书报告分享")
self:LoadRemoteUaddress(readBookReport, function(success, prefab)
if self.readBookPanel then
self.readBookPanel.gameObject:SetActive(true)
return
end
if not self.isCurrIndex then
return
end
if success and prefab then
if self.prefab then
ResourceManager:ReleaseObject(self.prefab)
self.prefab = nil
end
-- g_Log(TAG, "读书报告分享动态下载成功")
local obj = GameObject.Instantiate(prefab)
self.prefab = prefab
self.objRoot = obj
self.readBookPanel = obj.transform:FindChildWithName("Root")
self.readBookPanel:SetParent(self.root)
self.dialogContentRect = self.readBookPanel:GetComponent(typeof(CS.UnityEngine.RectTransform))
self.dialogContentRect.localPosition = CS.UnityEngine.Vector3(0, 0, 0)
self.dialogContentRect.anchorMax = CS.UnityEngine.Vector2(1, 1)
self.dialogContentRect.anchorMin = CS.UnityEngine.Vector2(0, 0)
self.dialogContentRect.localScale = CS.UnityEngine.Vector3(1, 1, 1)
-- self.dialogContentRect.anchorMax = CS.UnityEngine.Vector2(0.5, 0.5)
-- self.dialogContentRect.anchorMin = CS.UnityEngine.Vector2(0.5, 0.5)
-- self.dialogContentRect.anchoredPosition = CS.UnityEngine.Vector2.zero
self:InitReadBookView()
self.commonService:StartCoroutine(function()
self.commonService:Yield(self.commonService:WaitUntil(function()
return self.shareInfo
end))
local param_one = "0"
if self.shareInfo.reportStatus == 2 then
param_one = "1"
end
self:reportData("activity_center_share_readbook_report_show", "读书报告分享显示", { param_one = param_one }, "0")
-- 确保倒计时初始化
-- self:InitCountDown()
end)
self.pageMonitorService:recordPageLoadComplete(PageId)
end
end, true)
end
function FsyncElement:InitReadBookView()
-- 根据图片中的节点层级结构初始化UI元素
self.root0 = self.readBookPanel
-- Bg背景
self.bg = self.root0:Find("Bg")
-- ContentPanel内容面板
self.contentPanel = self.root0:Find("ContentPanel")
self.title = self.contentPanel:Find("Title")
-- BarrageRange弹幕区域
self.barrageRange = self.contentPanel:Find("BarrageRange")
-- Barrage弹幕实例
self.barrage = self.barrageRange:Find("Barrage")
-- BarrageInfo信息
self.barrageHeadmask = self.barrage:Find("headMask")
self.barrageHead = self.barrageHeadmask:Find("head")
self.barrageName = self.barrage:Find("name")
self.barrageText = self.barrage:Find("text")
-- 获取必要的组件
self.barrageHeadImage = self.barrageHead:GetComponent(typeof(CS.UnityEngine.UI.Image))
self.barrageNameText = self.barrageName:GetComponent(typeof(CS.TMPro.TextMeshProUGUI))
self.barrageTextTransform = self.barrageText:GetComponent(typeof(CS.UnityEngine.RectTransform))
self.barrage.gameObject:SetActive(false)
-- RightBackImage右侧背景图
self.rightBackImage = self.contentPanel:Find("RightBackImage")
-- Jewels宝石区域
self.jewels = self.rightBackImage:Find("Jewels")
-- AwardNum奖励数量区域
self.awardNum = self.jewels:Find("AwardNum")
-- AwardInfo奖励信息
self.awardInfo = self.awardNum:Find("AwardInfo")
self.awardPlus = self.awardInfo:Find("Award+")
self.awardNum0 = self.awardInfo:Find("AwardNum0")
self.awardNum0Image = self.awardNum0:GetComponent(typeof(CS.UnityEngine.UI.Image))
self.awardNum1 = self.awardInfo:Find("AwardNum1")
self.awardNum1Image = self.awardNum1:GetComponent(typeof(CS.UnityEngine.UI.Image))
self.awardNum2 = self.awardInfo:Find("AwardNum2")
self.awardNum2Image = self.awardNum2:GetComponent(typeof(CS.UnityEngine.UI.Image))
self.awardNum3 = self.awardInfo:Find("AwardNum3")
self.awardNum3Image = self.awardNum3:GetComponent(typeof(CS.UnityEngine.UI.Image))
-- HasShare已分享区域
self.hasShare = self.jewels:Find("HasShare")
-- HasShareInfo分享信息
self.hasShareInfo = self.hasShare:Find("HasShareInfo")
self.text0 = self.hasShareInfo:Find("text0")
-- NumInfo数字信息
self.hasShareNumInfo = self.hasShareInfo:Find("NumInfo")
self.hasShareNum0 = self.hasShareNumInfo:Find("num0")
self.hasShareNum0Image = self.hasShareNum0:GetComponent(typeof(CS.UnityEngine.UI.Image))
self.hasShareNum1 = self.hasShareNumInfo:Find("num1")
self.hasShareNum1Image = self.hasShareNum1:GetComponent(typeof(CS.UnityEngine.UI.Image))
self.hasShareNum2 = self.hasShareNumInfo:Find("num2")
self.hasShareNum2Image = self.hasShareNum2:GetComponent(typeof(CS.UnityEngine.UI.Image))
self.hasShareNum3 = self.hasShareNumInfo:Find("num3")
self.hasShareNum3Image = self.hasShareNum3:GetComponent(typeof(CS.UnityEngine.UI.Image))
self.hasShareDiamond4 = self.hasShareInfo:Find("diamond4")
-- 右侧标题区域
self.rightStartShareTitle = self.contentPanel:Find("RightStartShareTitle")
-- 标题信息区域
self.rightStartShareInfo = self.rightStartShareTitle:Find("Info")
self.rightStartShareTitleTitle0 = self.rightStartShareTitle:Find("title0")
self.rightStartShareTitleTitle1 = self.rightStartShareInfo:Find("title1")
self.rightStartShareTitleGap2 = self.rightStartShareInfo:Find("Gap2")
self.rightStartShareTitleNum2 = self.rightStartShareInfo:Find("num2")
self.rightStartShareTitleNum2Image = self.rightStartShareTitleNum2:GetComponent(typeof(CS.UnityEngine.UI.Image))
self.rightStartShareTitleNum21 = self.rightStartShareInfo:Find("num2_1")
self.rightStartShareTitleNum21Image = self.rightStartShareTitleNum21:GetComponent(typeof(CS.UnityEngine.UI.Image))
self.rightStartShareTitleGap3 = self.rightStartShareInfo:Find("Gap3")
self.rightStartShareTitleDiamond1 = self.rightStartShareInfo:Find("diamond1")
self.rightStartShareTitleTitle2 = self.rightStartShareInfo:Find("title2")
self.rightStartShareTitleGap1 = self.rightStartShareInfo:Find("Gap1")
self.rightStartShareTitleNum3 = self.rightStartShareInfo:Find("num3")
self.rightStartShareTitleNum3Image = self.rightStartShareTitleNum3:GetComponent(typeof(CS.UnityEngine.UI.Image))
self.rightStartShareTitleNum4 = self.rightStartShareInfo:Find("num4")
self.rightStartShareTitleNum4Image = self.rightStartShareTitleNum4:GetComponent(typeof(CS.UnityEngine.UI.Image))
self.rightStartShareTitleNum5 = self.rightStartShareInfo:Find("num5")
self.rightStartShareTitleNum5Image = self.rightStartShareTitleNum5:GetComponent(typeof(CS.UnityEngine.UI.Image))
self.rightStartShareTitleNum6 = self.rightStartShareInfo:Find("num6")
self.rightStartShareTitleNum6Image = self.rightStartShareTitleNum6:GetComponent(typeof(CS.UnityEngine.UI.Image))
self.rightStartShareTitleGap0 = self.rightStartShareInfo:Find("Gap0")
self.rightStartShareTitleDiamond2 = self.rightStartShareInfo:Find("diamond2")
self.rightShareSuccessTitle = self.contentPanel:Find("RightShareSuccessTitle")
self.rightShareSuccessTitleNum2 = self.rightShareSuccessTitle:Find("num2")
self.rightShareSuccessTitleNum2Image = self.rightShareSuccessTitleNum2:GetComponent(typeof(CS.UnityEngine.UI.Image))
self.rightWaitCollectTitle = self.contentPanel:Find("RightWaitCollectTitle")
self.rightEndTitle = self.contentPanel:Find("RightEndTitle")
-- 底部区域
self.bottomStartShareTmp = self.rightBackImage:Find("BottomStartShareTmp")
self.bottomStartShareTmpText1 = self.bottomStartShareTmp:Find("text1")
self.bottomStartShareTmpText1Text = self.bottomStartShareTmpText1:GetComponent(typeof(CS.TMPro.TextMeshProUGUI))
self.bottomStartShareTmpText2 = self.bottomStartShareTmp:Find("text2")
self.bottomStartShareTmpText2Text = self.bottomStartShareTmpText2:GetComponent(typeof(CS.TMPro.TextMeshProUGUI))
self.bottomStartShareNum1 = self.bottomStartShareTmp:Find("num1")
self.bottomStartShareNum1Text = self.bottomStartShareNum1:GetComponent(typeof(CS.TMPro.TextMeshProUGUI))
self.bottomStartShareNum1Rect = self.bottomStartShareNum1:GetComponent(typeof(CS.UnityEngine.RectTransform))
self.bottomStartShareNum2 = self.bottomStartShareTmp:Find("num2")
self.bottomStartShareNum2Text = self.bottomStartShareNum2:GetComponent(typeof(CS.TMPro.TextMeshProUGUI))
self.bottomStartShareNum2Rect = self.bottomStartShareNum2:GetComponent(typeof(CS.UnityEngine.RectTransform))
self.bottomStartShareNum3 = self.bottomStartShareTmp:Find("num3")
self.bottomStartShareNum3Text = self.bottomStartShareNum3:GetComponent(typeof(CS.TMPro.TextMeshProUGUI))
self.bottomStartShareNum3Rect = self.bottomStartShareNum3:GetComponent(typeof(CS.UnityEngine.RectTransform))
self.bottomStartShareTmpRect = self.bottomStartShareTmp:GetComponent(typeof(CS.UnityEngine.RectTransform))
-- 底部分享成功区域
self.bottomShareSuccessTmp = self.rightBackImage:Find("BottomShareSuccessTmp")
self.bottomShareSuccessTmpText1 = self.bottomShareSuccessTmp:Find("text1")
self.bottomShareSuccessTmpText1Text = self.bottomShareSuccessTmpText1:GetComponent(typeof(CS.TMPro.TextMeshProUGUI))
self.bottomShareSuccessTmpText2 = self.bottomShareSuccessTmp:Find("text2")
self.bottomShareSuccessTmpText2Text = self.bottomShareSuccessTmpText2:GetComponent(typeof(CS.TMPro.TextMeshProUGUI))
self.bottomShareSuccessNum1 = self.bottomShareSuccessTmp:Find("num1")
self.bottomShareSuccessNum1Text = self.bottomShareSuccessNum1:GetComponent(typeof(CS.TMPro.TextMeshProUGUI))
self.bottomShareSuccessNum1Rect = self.bottomShareSuccessNum1Text:GetComponent(typeof(CS.UnityEngine.RectTransform))
self.bottomShareSuccessNum2 = self.bottomShareSuccessTmp:Find("num2")
self.bottomShareSuccessNum2Text = self.bottomShareSuccessNum2:GetComponent(typeof(CS.TMPro.TextMeshProUGUI))
self.bottomShareSuccessNum2Rect = self.bottomShareSuccessNum2Text:GetComponent(typeof(CS.UnityEngine.RectTransform))
self.bottomShareSuccessTmpRect = self.bottomShareSuccessTmp:GetComponent(typeof(CS.UnityEngine.RectTransform))
-- 底部等待收集区域
self.bottomWaitCollectTitle = self.rightBackImage:Find("BottomWaitCollectTitle")
self.bottomWaitCollectTitleText1 = self.bottomWaitCollectTitle:Find("text1")
self.bottomWaitCollectTitleText1Text = self.bottomWaitCollectTitleText1:GetComponent(typeof(CS.TMPro.TextMeshProUGUI))
self.bottomWaitCollectTitleText2 = self.bottomWaitCollectTitle:Find("text2")
self.bottomWaitCollectTitleText2Text = self.bottomWaitCollectTitleText2:GetComponent(typeof(CS.TMPro.TextMeshProUGUI))
self.bottomWaitNum1 = self.bottomWaitCollectTitle:Find("num1")
self.bottomWaitNum1Text = self.bottomWaitNum1:GetComponent(typeof(CS.TMPro.TextMeshProUGUI))
self.bottomWaitNum1Rect = self.bottomWaitNum1:GetComponent(typeof(CS.UnityEngine.RectTransform))
self.bottomWaitNum2 = self.bottomWaitCollectTitle:Find("num2")
self.bottomWaitNum2Text = self.bottomWaitNum2:GetComponent(typeof(CS.TMPro.TextMeshProUGUI))
self.bottomWaitNum2Rect = self.bottomWaitNum2:GetComponent(typeof(CS.UnityEngine.RectTransform))
self.bottomWaitCollectTitleRect = self.bottomWaitCollectTitle:GetComponent(typeof(CS.UnityEngine.RectTransform))
-- 底部结束区域
self.bottomEndTitle = self.rightBackImage:Find("BottomEndTitle")
self.bottomEndTitleRect = self.bottomEndTitle:GetComponent(typeof(CS.UnityEngine.RectTransform))
self.bottomEndText1 = self.bottomEndTitle:Find("text1")
self.bottomEndText1Text = self.bottomEndText1:GetComponent(typeof(CS.TMPro.TextMeshProUGUI))
self.bottomEndText2 = self.bottomEndTitle:Find("text2")
self.bottomEndText2Text = self.bottomEndText2:GetComponent(typeof(CS.TMPro.TextMeshProUGUI))
self.bottomEndNum1 = self.bottomEndTitle:Find("num1")
self.bottomEndNum1Text = self.bottomEndNum1:GetComponent(typeof(CS.TMPro.TextMeshProUGUI))
self.bottomEndNum1Rect = self.bottomEndNum1:GetComponent(typeof(CS.UnityEngine.RectTransform))
-- 其他区域
self.bottomNoView = self.rightBackImage:Find("BottomNoView")
self.bottomNoViewRect = self.bottomNoView:GetComponent(typeof(CS.UnityEngine.RectTransform))
self.bottomEndNoView = self.rightBackImage:Find("BottomEndNoView")
self.bottomEndNoViewRect = self.bottomEndNoView:GetComponent(typeof(CS.UnityEngine.RectTransform))
-- 倒计时区域
self.countDown = self.rightBackImage:Find("CountDown")
self.daynum = self.countDown:Find("daynum")
self.hournum0 = self.countDown:Find("hournum0")
self.hournum1 = self.countDown:Find("hournum1")
self.minutenum0 = self.countDown:Find("minutenum0")
self.minutenum1 = self.countDown:Find("minutenum1")
self.daytext = self.countDown:Find("daytext")
self.hourtext = self.countDown:Find("hourtext")
self.minutetext = self.countDown:Find("minutetext")
self.text0 = self.countDown:Find("text0")
self.getEndLabel = self.rightBackImage:Find("GetEndLabel")
self.endLabel = self.rightBackImage:Find("EndLabel")
-- 中途分享按钮
self.halfwayShare = self.contentPanel:Find("HalfwayShare")
if self.halfwayShare then
self.halfwayShareBtn = self.halfwayShare:GetComponent(typeof(CS.UnityEngine.UI.Button))
self.commonService:AddEventListener(self.halfwayShareBtn, "onClick", function()
-- 防止短时间内重复点击
if self.clickTime and os.time() - self.clickTime < 2 then
return
end
self.clickTime = os.time()
-- 埋点上报
self:reportData("activity_center_share_readbook_report_click", "读课文分享点击", {}, "0")
self:ShareReadBookReport()
--协程等待一帧
self.commonService:YieldSeconds(1)
--等待大于三秒时再分享
if os.time() - self.clickTime > 3 then
g_Log(TAG,"等待大于三秒时再分享")
self:ShareReadBook(function(success)
if success then
end
if not success then
self.observerService:Fire("ABCZONE_COMMON_TOAST", { content = "分享失败,请稍后再试" })
end
end)
end
end)
end
-- 获取按钮区域
self.getBtn = self.rightBackImage:Find("GetBtn")
-- GetBtn信息区域
self.getBtnInfo = self.getBtn:Find("Info")
self.text1 = self.getBtnInfo:Find("text1")
-- NumInfo数字信息区域
self.getBtnNum1 = self.getBtnInfo:Find("num1")
self.getBtnNum1Image = self.getBtnNum1:GetComponent(typeof(CS.UnityEngine.UI.Image))
self.getBtnNum2 = self.getBtnInfo:Find("num2")
self.getBtnNum2Image = self.getBtnNum2:GetComponent(typeof(CS.UnityEngine.UI.Image))
self.getBtnNum3 = self.getBtnInfo:Find("num3")
self.getBtnNum3Image = self.getBtnNum3:GetComponent(typeof(CS.UnityEngine.UI.Image))
self.getBtnDiamond6 = self.getBtnInfo:Find("diamond6")
if self.getBtn then
self.getBtnButton = self.getBtn:GetComponent(typeof(CS.UnityEngine.UI.Button))
self.commonService:AddEventListener(self.getBtnButton, "onClick", function()
-- 添加标记,表示已经领取了奖励
-- self.hasCollectedReward = true
self:AwardPrizes(function(success)
if success then
-- self:SetViewByShareInfo()
g_Log(TAG,"点击了领取按钮,获取分享信息")
self:GetShareInfo(function(success, shareInfo)
if success then
self.shareInfo = shareInfo
g_Log(TAG,"点击了领取按钮,获取分享信息")
g_Log(TAG,"self.shareInfo.reportStatus",self.shareInfo.reportStatus)
self:SetViewByShareInfo()
end
end)
self.observerService:Fire("RE_ACTIVE_CENTER",{})
else
self.getBtnButton.interactable = true
end
end)
-- 禁用按钮,防止重复点击
self.getBtnButton.interactable = false
end)
end
self.btnText1 = self.getBtn:Find("text1")
self.btnNum1 = self.getBtn:Find("num1")
self.btnNum2 = self.getBtn:Find("num2")
self.btnNum3 = self.getBtn:Find("num3")
self.btnDiamond6 = self.getBtn:Find("diamond6")
-- 左侧内容和右侧副标题
self.leftContent = self.root:Find("LeftContent")
-- 图表区域
self.cutDiagram = self.root0:Find("CutDiagram")
for i = 0, 9 do
-- 直接存储sprite组件而不是transform引用
self["cutDiagram" .. i] = self.cutDiagram:Find(tostring(i)):GetComponent(typeof(CS.UnityEngine.UI.Image))
self["cutDiagramRed" .. i] = self.cutDiagram:Find("red" .. i):GetComponent(typeof(CS.UnityEngine.UI.Image))
self["cutDiagramSmall" .. i] = self.cutDiagram:Find("small" .. i):GetComponent(typeof(CS.UnityEngine.UI.Image))
self["cutDiagramMedium" .. i] = self.cutDiagram:Find("medium" .. i):GetComponent(typeof(CS.UnityEngine.UI.Image))
end
-- 分享按钮
self.share = self.rightBackImage:Find("Share")
self.shareButton = self.share:GetComponent(typeof(CS.UnityEngine.UI.Button))
self.commonService:AddEventListener(self.shareButton, "onClick", function()
-- g_Log(TAG,"读课文分享新-----点击")
if self.clickTime and os.time() - self.clickTime < 2 then
return
end
self.clickTime = os.time()
self:reportData("activity_center_share_readbook_report_click", "读课文分享点击", {}, "0")
if not self.shareInfo then
g_Log(TAG,"未获取到分享信息,请稍后再试")
self.observerService:Fire("ABCZONE_COMMON_TOAST", { content = "未获取到分享信息,请稍后再试" })
self:GetShareInfo(function(success, shareInfo)
self.shareButton.interactable = true
if success then
self.shareInfo = shareInfo
self:SetViewByShareInfo()
end
end)
return
end
self:ShareReadBookReport()
--协程等待一帧
self.commonService:YieldSeconds(1)
--等待大于三秒时再分享
if os.time() - self.clickTime > 3 then
g_Log(TAG,"等待大于三秒时再分享")
self:ShareReadBook(function(success)
if success then
-- self.commonService:StartCoroutine(function()
-- self.commonService:YieldSeconds(2)
-- self.shareInfo.reportStatus = 2
-- self:SetViewByShareInfo()
self.shareButton.interactable = false
-- end)
else
self.observerService:Fire("ABCZONE_COMMON_TOAST", { content = "分享失败,请稍后再试" })
self.shareButton.interactable = true
end
end)
end
end)
self:SetViewByShareInfo()
end
-- 更新红色数字图片显示
function FsyncElement:UpdateNumberImage(targetImage, number)
if not targetImage or not self.redImages then
return
end
-- 处理大于9的数字(主要是天数可能大于9)
if number > 9 then
-- 如果是天数,我们只显示个位数,或者可以考虑其他处理方式
-- 这里简单处理为显示9
number = 9
end
-- 确保number在0-9范围内
number = math.max(0, math.min(9, number))
-- 获取目标Image组件
local image = targetImage:GetComponent(typeof(CS.UnityEngine.UI.Image))
if not image then
return
end
-- 获取对应数字的red图片
local redImage = self.redImages[number]
if not redImage then
return
end
-- 复制sprite到目标Image
image.sprite = redImage.sprite
end
-- 更新奖励数量显示
function FsyncElement:UpdateAwardNum()
if not self.shareInfo or not self.shareInfo.count then
return
end
-- 计算奖励值 = 查看人数 * 5
local awardValue = self.shareInfo.count * self.shareInfo.reward_unit
-- 确保奖励值不超过最大奖励
if self.shareInfo.maxRewards and awardValue > self.shareInfo.maxRewards then
awardValue = self.shareInfo.maxRewards
end
-- 将奖励值转换为字符串,然后分解为个位数
local awardStr = tostring(awardValue)
local digits = {}
-- 从字符串中提取每一位数字
for i = 1, #awardStr do
digits[i] = tonumber(string.sub(awardStr, i, i))
end
-- 根据位数更新显示
if #digits == 1 then
-- 只有个位数
if self.awardNum3 and self.awardNum3.gameObject then
if self["cutDiagram" .. digits[1]] then
-- 直接使用sprite属性
self.awardNum3Image.sprite = self["cutDiagram" .. digits[1]].sprite
end
self.awardNum3.gameObject:SetActive(true)
end
if self.awardNum2 and self.awardNum2.gameObject then
self.awardNum2.gameObject:SetActive(false)
end
if self.awardNum1 and self.awardNum1.gameObject then
self.awardNum2.gameObject:SetActive(false)
end
if self.awardNum0 and self.awardNum0.gameObject then
self.awardNum0.gameObject:SetActive(false)
end
elseif #digits == 2 then
-- 十位和个位
if self.awardNum3 and self.awardNum3.gameObject then
-- 直接使用sprite属性
if self["cutDiagram" .. digits[2]] then
self.awardNum3Image.sprite = self["cutDiagram" .. digits[2]].sprite
end
self.awardNum3.gameObject:SetActive(true)
end
if self.awardNum2 and self.awardNum2.gameObject then
-- 直接使用sprite属性
if self["cutDiagram" .. digits[1]] then
self.awardNum2Image.sprite = self["cutDiagram" .. digits[1]].sprite
end
self.awardNum2.gameObject:SetActive(true)
end
if self.awardNum1 and self.awardNum1.gameObject then
self.awardNum1.gameObject:SetActive(false)
end
if self.awardNum0 and self.awardNum0.gameObject then
self.awardNum0.gameObject:SetActive(false)
end
elseif #digits == 3 then
-- 百位、十位和个位
if self.awardNum3 and self.awardNum3.gameObject then
if self["cutDiagram" .. digits[3]] then
self.awardNum3Image.sprite = self["cutDiagram" .. digits[3]].sprite
end
self.awardNum3.gameObject:SetActive(true)
end
if self.awardNum2 and self.awardNum2.gameObject then
-- 直接使用sprite属性
if self["cutDiagram" .. digits[2]] then
self.awardNum2Image.sprite = self["cutDiagram" .. digits[2]].sprite
end
self.awardNum2.gameObject:SetActive(true)
end
if self.awardNum1 and self.awardNum1.gameObject then
-- 直接使用sprite属性
if self["cutDiagram" .. digits[1]] then
self.awardNum1Image.sprite = self["cutDiagram" .. digits[1]].sprite
end
self.awardNum1.gameObject:SetActive(true)
end
if self.awardNum0 and self.awardNum0.gameObject then
self.awardNum0.gameObject:SetActive(false)
end
elseif #digits == 4 then
-- 千位、百位、十位和个位
if self.awardNum4 and self.awardNum4.gameObject then
if self["cutDiagram" .. digits[4]] then
self.awardNum4Image.sprite = self["cutDiagram" .. digits[4]].sprite
end
self.awardNum4.gameObject:SetActive(true)
end
if self.awardNum3 and self.awardNum3.gameObject then
if self["cutDiagram" .. digits[3]] then
self.awardNum3Image.sprite = self["cutDiagram" .. digits[3]].sprite
end
self.awardNum3.gameObject:SetActive(true)
end
if self.awardNum2 and self.awardNum2.gameObject then
if self["cutDiagram" .. digits[2]] then
self.awardNum2Image.sprite = self["cutDiagram" .. digits[2]].sprite
end
self.awardNum2.gameObject:SetActive(true)
end
if self.awardNum1 and self.awardNum1.gameObject then
if self["cutDiagram" .. digits[1]] then
self.awardNum1Image.sprite = self["cutDiagram" .. digits[1]].sprite
end
self.awardNum1.gameObject:SetActive(true)
end
if self.awardNum0 and self.awardNum0.gameObject then
self.awardNum0.gameObject:SetActive(false)
end
end
-- 显示加号
if self.awardPlus and self.awardPlus.gameObject then
self.awardPlus.gameObject:SetActive(true)
end
end
-- 添加更新最大奖励显示的函数
function FsyncElement:UpdateMaxRewardsDisplay()
if not self.shareInfo or not self.shareInfo.maxRewards then
return
end
-- 获取最大奖励值
local maxRewards = self.shareInfo.maxRewards
-- 将最大奖励值转换为字符串,然后分解为个位数
local rewardsStr = tostring(maxRewards)
local digits = {}
-- 从字符串中提取每一位数字
for i = 1, #rewardsStr do
digits[i] = tonumber(string.sub(rewardsStr, i, i))
end
-- 根据位数更新显示
if #digits == 1 then
-- 只有个位数
-- 直接使用sprite
if self["cutDiagramSmall" .. digits[1]] and self["cutDiagramMedium" .. digits[1]] then
self.hasShareNum3Image.sprite = self["cutDiagramSmall" .. digits[1]].sprite
self.rightStartShareTitleNum6Image.sprite = self["cutDiagramMedium" .. digits[1]].sprite
end
self.hasShareNum3.gameObject:SetActive(true)
self.rightStartShareTitleNum6.gameObject:SetActive(true)
self.hasShareNum2.gameObject:SetActive(false)
self.rightStartShareTitleNum5.gameObject:SetActive(false)
self.hasShareNum1.gameObject:SetActive(false)
self.rightStartShareTitleNum4.gameObject:SetActive(false)
self.hasShareNum0.gameObject:SetActive(false)
self.rightStartShareTitleNum3.gameObject:SetActive(false)
elseif #digits == 2 then
-- 十位和个位
-- 直接使用sprite
if self["cutDiagramSmall" .. digits[2]] and self["cutDiagramMedium" .. digits[2]] then
self.hasShareNum3Image.sprite = self["cutDiagramSmall" .. digits[2]].sprite
self.rightStartShareTitleNum6Image.sprite = self["cutDiagramMedium" .. digits[2]].sprite
end
self.hasShareNum3.gameObject:SetActive(true)
self.rightStartShareTitleNum6.gameObject:SetActive(true)
-- 直接使用sprite
if self["cutDiagramSmall" .. digits[1]] and self["cutDiagramMedium" .. digits[1]] then
self.hasShareNum2Image.sprite = self["cutDiagramSmall" .. digits[1]].sprite
self.rightStartShareTitleNum5Image.sprite = self["cutDiagramMedium" .. digits[1]].sprite
end
self.hasShareNum2.gameObject:SetActive(true)
self.rightStartShareTitleNum5.gameObject:SetActive(true)
self.rightStartShareTitleNum4.gameObject:SetActive(false)
self.hasShareNum1.gameObject:SetActive(false)
self.rightStartShareTitleNum3.gameObject:SetActive(false)
self.hasShareNum0.gameObject:SetActive(false)
elseif #digits == 3 then
-- 百位、十位和个位
-- 直接使用sprite
if self["cutDiagramSmall" .. digits[3]] and self["cutDiagramMedium" .. digits[3]] then
self.hasShareNum3Image.sprite = self["cutDiagramSmall" .. digits[3]].sprite
self.rightStartShareTitleNum6Image.sprite = self["cutDiagramMedium" .. digits[3]].sprite
end
self.hasShareNum3.gameObject:SetActive(true)
self.rightStartShareTitleNum6.gameObject:SetActive(true)
if self["cutDiagramSmall" .. digits[2]] and self["cutDiagramMedium" .. digits[2]] then
self.hasShareNum2Image.sprite = self["cutDiagramSmall" .. digits[2]].sprite
self.rightStartShareTitleNum5Image.sprite = self["cutDiagramMedium" .. digits[2]].sprite
end
self.hasShareNum2.gameObject:SetActive(true)
self.rightStartShareTitleNum5.gameObject:SetActive(true)
if self["cutDiagramSmall" .. digits[1]] and self["cutDiagramMedium" .. digits[1]] then
self.hasShareNum1Image.sprite = self["cutDiagramSmall" .. digits[1]].sprite
self.rightStartShareTitleNum4Image.sprite = self["cutDiagramMedium" .. digits[1]].sprite
end
self.hasShareNum1.gameObject:SetActive(true)
self.rightStartShareTitleNum4.gameObject:SetActive(true)
self.rightStartShareTitleNum3.gameObject:SetActive(false)
self.hasShareNum0.gameObject:SetActive(false)
elseif #digits == 4 then
-- 千位、百位、十位和个位
-- 直接使用sprite
if self["cutDiagramSmall" .. digits[4]] and self["cutDiagramMedium" .. digits[4]] then
self.hasShareNum3Image.sprite = self["cutDiagramSmall" .. digits[4]].sprite
self.rightStartShareTitleNum6Image.sprite = self["cutDiagramMedium" .. digits[4]].sprite
end
self.hasShareNum3.gameObject:SetActive(true)
self.rightStartShareTitleNum6.gameObject:SetActive(true)
if self["cutDiagramSmall" .. digits[3]] and self["cutDiagramMedium" .. digits[3]] then
self.hasShareNum2Image.sprite = self["cutDiagramSmall" .. digits[3]].sprite
self.rightStartShareTitleNum5Image.sprite = self["cutDiagramMedium" .. digits[3]].sprite
end
self.hasShareNum2.gameObject:SetActive(true)
self.rightStartShareTitleNum5.gameObject:SetActive(true)
if self["cutDiagramSmall" .. digits[2]] and self["cutDiagramMedium" .. digits[2]] then
self.hasShareNum1Image.sprite = self["cutDiagramSmall" .. digits[2]].sprite
self.rightStartShareTitleNum4Image.sprite = self["cutDiagramMedium" .. digits[2]].sprite
end
self.hasShareNum1.gameObject:SetActive(true)
self.rightStartShareTitleNum4.gameObject:SetActive(true)
if self["cutDiagramSmall" .. digits[1]] and self["cutDiagramMedium" .. digits[1]] then
self.hasShareNum0Image.sprite = self["cutDiagramSmall" .. digits[1]].sprite
self.rightStartShareTitleNum3Image.sprite = self["cutDiagramMedium" .. digits[1]].sprite
end
self.hasShareNum0.gameObject:SetActive(true)
self.rightStartShareTitleNum3.gameObject:SetActive(true)
end
end
-- 更新获取按钮上的数字显示
function FsyncElement:UpdateGetBtnNumbers()
if not self.shareInfo or not self.shareInfo.count then
return
end
-- 计算奖励值 = 查看人数 * 5
local awardValue = self.shareInfo.count * self.shareInfo.reward_unit
-- 确保奖励值不超过最大奖励
if self.shareInfo.maxRewards and awardValue > self.shareInfo.maxRewards then
awardValue = self.shareInfo.maxRewards
end
-- 将奖励值转换为字符串,然后分解为个位数
local awardStr = tostring(awardValue)
local digits = {}
-- 从字符串中提取每一位数字
for i = 1, #awardStr do
digits[i] = tonumber(string.sub(awardStr, i, i))
end
-- 根据位数更新显示
if #digits == 1 then
-- 只有个位数
if self.getBtnNum3 and self.getBtnNum3.gameObject then
-- 直接使用sprite
if self["cutDiagramSmall" .. digits[1]] then
self.getBtnNum3Image.sprite = self["cutDiagramSmall" .. digits[1]].sprite
end
self.getBtnNum3.gameObject:SetActive(true)
end
if self.getBtnNum2 and self.getBtnNum2.gameObject then
self.getBtnNum2.gameObject:SetActive(false)
end
if self.getBtnNum1 and self.getBtnNum1.gameObject then
self.getBtnNum1.gameObject:SetActive(false)
end
elseif #digits == 2 then
-- 十位和个位
if self.getBtnNum3 and self.getBtnNum3.gameObject then
-- 直接使用sprite
if self["cutDiagramSmall" .. digits[2]] then
self.getBtnNum3Image.sprite = self["cutDiagramSmall" .. digits[2]].sprite
end
self.getBtnNum3.gameObject:SetActive(true)
end
if self.getBtnNum2 and self.getBtnNum2.gameObject then
-- 直接使用sprite
if self["cutDiagramSmall" .. digits[1]] then
self.getBtnNum2Image.sprite = self["cutDiagramSmall" .. digits[1]].sprite
end
self.getBtnNum2.gameObject:SetActive(true)
end
if self.getBtnNum1 and self.getBtnNum1.gameObject then
self.getBtnNum1.gameObject:SetActive(false)
end
elseif #digits == 3 then
-- 百位、十位和个位
if self.getBtnNum3 and self.getBtnNum3.gameObject then
-- 直接使用sprite
if self["cutDiagramSmall" .. digits[3]] then
self.getBtnNum3Image.sprite = self["cutDiagramSmall" .. digits[3]].sprite
end
self.getBtnNum3.gameObject:SetActive(true)
end
if self.getBtnNum2 and self.getBtnNum2.gameObject then
-- 直接使用sprite
if self["cutDiagramSmall" .. digits[2]] then
self.getBtnNum2Image.sprite = self["cutDiagramSmall" .. digits[2]].sprite
end
self.getBtnNum2.gameObject:SetActive(true)
end
if self.getBtnNum1 and self.getBtnNum1.gameObject then
-- 直接使用sprite
if self["cutDiagramSmall" .. digits[1]] then
self.getBtnNum1Image.sprite = self["cutDiagramSmall" .. digits[1]].sprite
end
self.getBtnNum1.gameObject:SetActive(true)
end
end
-- 显示钻石图标
if self.getBtnDiamond6 and self.getBtnDiamond6.gameObject then
self.getBtnDiamond6.gameObject:SetActive(true)
end
end
function FsyncElement:SetViewByShareInfo()
self.commonService:StartCoroutine(function()
self.commonService:Yield(self.commonService:WaitUntil(function()
return self.shareInfo
end))
-- 隐藏所有UI元素
self:HideAllUIElements()
-- 获取查看人数
local viewCount = self.shareInfo.count
if self.shareInfo.reportStatus == 2 then
g_Log(TAG,"self.shareInfo.reportStatus ==2 已分享状态")
-- 已分享状态
if self.isInCountdown then
-- 倒计时中
if viewCount > 0 then
self:StopBarrageSystem()
self:InitBarrage()
-- 有人查看
-- 设置右侧分享成功标题为显示
if self.rightShareSuccessTitle and self.rightShareSuccessTitle.gameObject then
-- 直接使用sprite
self.rightShareSuccessTitleNum2Image.sprite = self
["cutDiagramSmall" .. self.shareInfo.reward_unit].sprite
self.rightShareSuccessTitle.gameObject:SetActive(true)
end
-- 设置标签为显示
if self.hasShare and self.hasShare.gameObject then
self:UpdateMaxRewardsDisplay()
self.hasShare.gameObject:SetActive(true)
end
-- 设置奖励数量为显示
if self.awardNum and self.awardNum.gameObject then
-- 更新奖励数量显示
self:UpdateAwardNum()
self.awardNum.gameObject:SetActive(true)
end
-- 设置底部分享成功模板为显示
if self.bottomShareSuccessTmp and self.bottomShareSuccessTmp.gameObject then
self.bottomShareSuccessNum1Text.text = self.shareInfo.count
if self.shareInfo.count * self.shareInfo.reward_unit <= self.shareInfo.maxRewards then
self.bottomShareSuccessNum2Text.text = self.shareInfo.count * self.shareInfo.reward_unit
else
self.bottomShareSuccessNum2Text.text = self.shareInfo.maxRewards
end
self.bottomShareSuccessTmp.gameObject:SetActive(true)
end
-- 设置倒计时为显示
if self.countDown and self.countDown.gameObject then
self:InitCountDown()
self.countDown.gameObject:SetActive(true)
end
if self.halfwayShare and self.halfwayShare.gameObject then
self.halfwayShare.gameObject:SetActive(true)
end
else
-- 无人查看
-- 设置右侧分享成功标题为显示
if self.rightShareSuccessTitle and self.rightShareSuccessTitle.gameObject then
-- 直接使用sprite
self.rightShareSuccessTitleNum2Image.sprite = self
["cutDiagramSmall" .. self.shareInfo.reward_unit].sprite
self.rightShareSuccessTitle.gameObject:SetActive(true)
end
-- 设置已分享区域为显示
if self.hasShare and self.hasShare.gameObject then
self:UpdateMaxRewardsDisplay()
self.hasShare.gameObject:SetActive(true)
end
-- 设置底部无人查看视图为显示
if self.bottomNoView and self.bottomNoView.gameObject then
self.bottomNoView.gameObject:SetActive(true)
end
-- 设置倒计时为显示
if self.countDown and self.countDown.gameObject then
self:InitCountDown()
self.countDown.gameObject:SetActive(true)
end
if self.halfwayShare and self.halfwayShare.gameObject then
self.halfwayShare.gameObject:SetActive(true)
end
end
else
-- 倒计时结束
g_Log(TAG,"倒计时结束,获取分享信息")
self:GetShareInfo(function(success, shareInfo)
self.shareButton.interactable = true
if success then
self.shareInfo = shareInfo
end
end)
if viewCount > 0 then
-- -- 有人查看
self:StopBarrageSystem()
self:InitBarrage()
-- 设置等待领取UI状态
if self.rightWaitCollectTitle and self.rightWaitCollectTitle.gameObject then
self.rightWaitCollectTitle.gameObject:SetActive(true)
end
-- 设置奖励数量为显示
if self.awardNum and self.awardNum.gameObject then
-- 更新奖励数量显示
self:UpdateAwardNum()
self.awardNum.gameObject:SetActive(true)
end
if self.hasShare and self.hasShare.gameObject then
self:UpdateMaxRewardsDisplay()
self.hasShare.gameObject:SetActive(true)
end
-- 设置底部等待领取标题为显示
if self.bottomWaitCollectTitle and self.bottomWaitCollectTitle.gameObject then
self.bottomWaitNum1Text.text = self.shareInfo.count
if self.shareInfo.count * self.shareInfo.reward_unit <= self.shareInfo.maxRewards then
self.bottomWaitNum2Text.text = self.shareInfo.count * self.shareInfo.reward_unit
else
self.bottomWaitNum2Text.text = self.shareInfo.maxRewards
end
-- self.bottomWaitCollectTitleRect.sizeDelta = CS.UnityEngine.Vector2(
-- self.bottomWaitCollectTitleText1Text.preferredWidth+self.bottomWaitCollectTitleText2Text.preferredWidth+self.bottomWaitNum1Text.preferredWidth+self.bottomWaitNum2Text.preferredWidth+22, self.bottomWaitCollectTitleRect.rect.height)
self.bottomWaitCollectTitle.gameObject:SetActive(true)
end
-- 设置领取按钮为显示
if self.getBtn and self.getBtn.gameObject then
-- 更新获取按钮上的数字显示
self:UpdateGetBtnNumbers()
self.getBtn.gameObject:SetActive(true)
end
else
-- 无人查看
-- 设置结束标签为显示
if self.endLabel and self.endLabel.gameObject then
self.endLabel.gameObject:SetActive(true)
end
-- 设置右侧结束标题为显示
if self.rightEndTitle and self.rightEndTitle.gameObject then
self.rightEndTitle.gameObject:SetActive(true)
end
-- 设置底部结束无人查看视图为显示
if self.bottomEndNoView and self.bottomEndNoView.gameObject then
self.bottomEndNoView.gameObject:SetActive(true)
end
end
end
elseif self.shareInfo.reportStatus == 3 then
-- 已领取状态
self:StopBarrageSystem()
self:InitBarrage()
g_Log(TAG,"self.shareInfo.reportStatus == 3 已领取状态")
if self.rightEndTitle and self.rightEndTitle.gameObject then
self.rightEndTitle.gameObject:SetActive(true)
end
-- 设置奖励数量为显示
if self.awardNum and self.awardNum.gameObject then
self:UpdateAwardNum()
self.awardNum.gameObject:SetActive(true)
end
-- 设置底部结束标题为显示
if self.bottomEndTitle and self.bottomEndTitle.gameObject then
self.bottomEndNum1Text.text = self.shareInfo.count
-- self.bottomEndTitleRect.sizeDelta = CS.UnityEngine.Vector2(
-- self.bottomEndText1Text.preferredWidth+self.bottomEndText2Text.preferredWidth+self.bottomEndNum1Text.preferredWidth, self.bottomEndTitleRect.rect.height)
self.bottomEndTitle.gameObject:SetActive(true)
end
-- 设置获取结束标签为显示
if self.getEndLabel and self.getEndLabel.gameObject then
self.getEndLabel.gameObject:SetActive(true)
end
return
elseif self.shareInfo.reportStatus == 1 or self.shareInfo.reportStatus == 0 then
-- 未分享状态
-- 设置右侧开始分享标题为显示
if self.rightStartShareTitle and self.rightStartShareTitle.gameObject then
-- 直接使用sprite
-- 获取最大奖励值
local reward_unit = self.shareInfo.reward_unit
-- 将最大奖励值转换为字符串,然后分解为个位数
local reward_unit = tostring(reward_unit)
local digits = {}
-- 从字符串中提取每一位数字
for i = 1, #reward_unit do
digits[i] = tonumber(string.sub(reward_unit, i, i))
end
if #digits == 1 then
self.rightStartShareTitleNum21Image.sprite = self["cutDiagramMedium" .. digits[1]].sprite
self.rightStartShareTitleNum21.gameObject:SetActive(true)
self.rightStartShareTitleNum2.gameObject:SetActive(false)
elseif #digits == 2 then
self.rightStartShareTitleNum21Image.sprite = self["cutDiagramMedium" .. digits[2]].sprite
self.rightStartShareTitleNum21.gameObject:SetActive(true)
self.rightStartShareTitleNum2Image.sprite = self["cutDiagramMedium" .. digits[1]].sprite
self.rightStartShareTitleNum2.gameObject:SetActive(true)
end
-- 更新最大奖励显示
self:UpdateMaxRewardsDisplay()
self.rightStartShareTitle.gameObject:SetActive(true)
end
-- 设置已分享区域为显示
if self.hasShare and self.hasShare.gameObject then
-- 更新最大奖励显示
self:UpdateMaxRewardsDisplay()
self.hasShare.gameObject:SetActive(true)
end
-- 设置底部开始分享模板为显示
if self.bottomStartShareTmp and self.bottomStartShareTmp.gameObject then
self.bottomStartShareNum2Text.text = self.shareInfo.reward_unit
self.bottomStartShareNum3Text.text = self.shareInfo.maxRewards
-- self.bottomStartShareTmpRect.sizeDelta = CS.UnityEngine.Vector2(
-- self.bottomStartShareTmpText1Text.preferredWidth+self.bottomStartShareTmpText2Text.preferredWidth+self.bottomStartShareNum1Text.preferredWidth+self.bottomStartShareNum2Text.preferredWidth+self.bottomStartShareNum3Text.preferredWidth+22*2, self.bottomStartShareTmpRect.rect.height)
self.bottomStartShareTmp.gameObject:SetActive(true)
end
-- 设置分享按钮为显示
if self.share and self.share.gameObject then
self.share.gameObject:SetActive(true)
end
-- elseif self.shareInfo.reportStatus == 0 then
-- -- 不可分享状态
end
end)
end
function FsyncElement:ClosePanel(needDestroy)
self:StopBarrageSystem()
if self.readBookPanel and self.readBookPanel.gameObject.activeSelf == true then
self.readBookPanel.gameObject:SetActive(false)
end
if needDestroy and self.readBookPanel then
self:DestroyView()
end
end
-- 隐藏所有UI元素
function FsyncElement:HideAllUIElements()
-- 隐藏右侧标题区域
if self.rightStartShareTitle and self.rightStartShareTitle.gameObject then
self.rightStartShareTitle.gameObject:SetActive(false)
end
if self.rightShareSuccessTitle and self.rightShareSuccessTitle.gameObject then
self.rightShareSuccessTitle.gameObject:SetActive(false)
end
if self.rightWaitCollectTitle and self.rightWaitCollectTitle.gameObject then
self.rightWaitCollectTitle.gameObject:SetActive(false)
end
if self.rightEndTitle and self.rightEndTitle.gameObject then
self.rightEndTitle.gameObject:SetActive(false)
end
-- 隐藏底部区域
if self.bottomStartShareTmp and self.bottomStartShareTmp.gameObject then
self.bottomStartShareTmp.gameObject:SetActive(false)
end
if self.bottomShareSuccessTmp and self.bottomShareSuccessTmp.gameObject then
self.bottomShareSuccessTmp.gameObject:SetActive(false)
end
if self.bottomWaitCollectTitle and self.bottomWaitCollectTitle.gameObject then
self.bottomWaitCollectTitle.gameObject:SetActive(false)
end
if self.bottomEndTitle and self.bottomEndTitle.gameObject then
self.bottomEndTitle.gameObject:SetActive(false)
end
if self.bottomNoView and self.bottomNoView.gameObject then
self.bottomNoView.gameObject:SetActive(false)
end
if self.bottomEndNoView and self.bottomEndNoView.gameObject then
self.bottomEndNoView.gameObject:SetActive(false)
end
if self.halfwayShare and self.halfwayShare.gameObject then
self.halfwayShare.gameObject:SetActive(false)
end
-- 隐藏奖励相关区域
if self.awardNum and self.awardNum.gameObject then
self.awardNum.gameObject:SetActive(false)
end
if self.awardPlus and self.awardPlus.gameObject then
self.awardPlus.gameObject:SetActive(false)
end
if self.awardNum0 and self.awardNum0.gameObject then
self.awardNum0.gameObject:SetActive(false)
end
if self.awardNum1 and self.awardNum1.gameObject then
self.awardNum1.gameObject:SetActive(false)
end
if self.awardNum2 and self.awardNum2.gameObject then
self.awardNum2.gameObject:SetActive(false)
end
-- 隐藏已分享区域
if self.hasShare and self.hasShare.gameObject then
self.hasShare.gameObject:SetActive(false)
end
-- 隐藏倒计时区域
if self.countDown and self.countDown.gameObject then
self.countDown.gameObject:SetActive(false)
end
if self.endLabel and self.endLabel.gameObject then
self.endLabel.gameObject:SetActive(false)
end
if self.getEndLabel and self.getEndLabel.gameObject then
self.getEndLabel.gameObject:SetActive(false)
end
-- 隐藏按钮区域
if self.getBtn and self.getBtn.gameObject then
self.getBtn.gameObject:SetActive(false)
end
if self.share and self.share.gameObject then
self.share.gameObject:SetActive(false)
end
if self.halfwayShare and self.halfwayShare.gameObject then
self.halfwayShare.gameObject:SetActive(false)
end
-- 隐藏最大奖励数字
if self.num3 and self.num3.gameObject then
self.num3.gameObject:SetActive(false)
end
if self.num4 and self.num4.gameObject then
self.num4.gameObject:SetActive(false)
end
if self.num5 and self.num5.gameObject then
self.num5.gameObject:SetActive(false)
end
end
function FsyncElement:DestroyView()
-- 移除按钮监听
if self.shareButton then
self.shareButton.onClick:RemoveAllListeners()
end
if self.halfwayShareBtn then
self.halfwayShareBtn.onClick:RemoveAllListeners()
end
if self.getBtnButton then
self.getBtnButton.onClick:RemoveAllListeners()
end
-- 取消倒计时定时器
if self.countDownTimerId then
self.commonService:UnregisterGlobalTimer(self.countDownTimerId)
self.countDownTimerId = nil
end
-- 清理弹幕相关
-- self:StopBarrageSystem()
-- 清理弹幕对象池
for _, barrage in ipairs(self.barragePool or {}) do
if barrage.instance then
CS.UnityEngine.GameObject.DestroyImmediate(barrage.instance)
end
end
self.barragePool = {}
self.activeBarrages = {}
-- 清理redImages引用
if self.redImages then
for i = 0, 9 do
self.redImages[i] = nil
end
self.redImages = nil
end
-- 销毁根物体
if self.objRoot then
CS.UnityEngine.GameObject.DestroyImmediate(self.objRoot)
self.objRoot = nil
end
if self.readBookPanel then
CS.UnityEngine.GameObject.DestroyImmediate(self.readBookPanel.gameObject)
self.readBookPanel = nil
end
-- 清理面板引用
self.dialogContentRect = nil
-- 释放预制体资源
if self.prefab then
ResourceManager:ReleaseObject(self.prefab)
self.prefab = nil
end
self.pageMonitorService:recordPageClose(PageId)
-- 重置状态变量
self.isBarrageRunning = false
self.isInCountdown = true
-- self.hasCollectedReward = false
end
function FsyncElement:ShareReadBookReport()
local image = "https://static0.xesimg.com/next-studio-pub/app/1736943865007/zQsexNIiSJTCdgnwr9AZ.png"
self.content = {
title = self.shareInfo.title,
-- contentDesc = self.shareInfo.contentDesc,
url = self.shareInfo.url,
imageType = "network",
image = image,
thumbImageUrl = image,
previewImageUrl = image
}
local param = { type = "WeChatTimeline", contentType = "web", content = self.content }
APIBridge.RequestAsync('app.api.share.shareToNative', param, function(res)
if res then
g_Log(TAG, "分享微信朋友圈,回调--->" .. table.dump(res))
end
end)
end
-- 收到/恢复IRC消息
-- @param key 订阅的消息key
-- @param value 消息集合体
-- @param isResume 是否为恢复消息
function FsyncElement:ReceiveMessage(key, value, isResume)
-- TODO:
end
-- 发送KEY-VALUE 消息
-- @param key 自定义/协议key
-- @param body table 消息体
function FsyncElement:SendCustomMessage(key, body)
self:SendMessage(key, body)
end
-- 自己avatar对象创建完成
-- @param avatar 对应自己的Fsync_avatar对象
function FsyncElement:SelfAvatarCreated(avatar)
end
-- 自己avatar对象人物模型加载完成ba
-- @param avatar 对应自己的Fsync_avatar对象
function FsyncElement:SelfAvatarPrefabLoaded(avatar)
end
-- avatar对象创建完成,包含他人和自己
-- @param avatar 对应自己的Fsync_avatar对象
function FsyncElement:AvatarCreated(avatar)
end
------------------------蓝图组件相应方法---------------------------------------------
--是否是异步恢复如果是需要改成true
function FsyncElement:LogicMapIsAsyncRecorver()
return false
end
--开始恢复方法(断线重连的时候用)
function FsyncElement:LogicMapStartRecover()
FsyncElement.super:LogicMapStartRecover()
--TODO
end
--结束恢复方法 (断线重连的时候用)
function FsyncElement:LogicMapEndRecover()
FsyncElement.super:LogicMapEndRecover(self)
--TODO
end
--所有的组件恢复完成
function FsyncElement:LogicMapAllComponentRecoverComplete()
end
--收到Trigger事件
function FsyncElement:OnReceiveTriggerEvent(interfaceId)
end
--收到GetData事件
function FsyncElement:OnReceiveGetDataEvent(interfaceId)
return nil
end
------------------------蓝图组件相应方法End---------------------------------------------
---接口请求
function FsyncElement:ShareReadBook(callback)
self.domain = "https://app.chuangjing.com/abc-api"
local url = self.domain .. "/v3/article-share/do"
if App.IsStudioClient then
url = "https://yapi.xesv5.com/mock/2041/v3/article-share/do"
end
local params = {
}
local success = function(resp)
if resp and resp ~= "" then
local msg = nil
if type(resp) == "string" then
msg = self.jsonService:decode(resp)
end
if msg and msg.code == 0 then
local data = msg.data
if data and type(data) == "table" then
-- callback(true)
callback(data.result)
end
end
else
callback(false)
end
end
local fail = function(err)
callback(false)
end
self:HttpRequest(url, params, success, fail)
end
function FsyncElement:AwardPrizes(callback)
self.domain = "https://app.chuangjing.com/abc-api"
local url = self.domain .. "/v3/article-share/reward"
if App.IsStudioClient then
url = "https://yapi.xesv5.com/mock/2041/v3/article-share/reward"
end
local params = {
}
local success = function(resp)
if resp and resp ~= "" then
local msg = nil
if type(resp) == "string" then
msg = self.jsonService:decode(resp)
end
if msg and msg.code == 0 then
local data = msg.data
if data and type(data) == "table" then
self.rewardNum = data.count
callback(true)
end
end
end
end
local fail = function(err)
callback(false)
end
self:HttpRequest(url, params, success, fail)
end
---获取分享信息
function FsyncElement:GetShareInfo(callback)
-- if self.shareInfo and self.requestTime and os.time() - self.requestTime < 30 then
-- callback(true, self.shareInfo)
-- return
-- end
self.requestTime = os.time()
self.domain = "https://app.chuangjing.com/abc-api"
local url = self.domain .. "/v3/article-share/info"
if App.IsStudioClient then
url = "https://yapi.xesv5.com/mock/2041/v3/article-share/info"
end
local params = {
}
local success = function(resp)
if resp and resp ~= "" then
local msg = nil
if type(resp) == "string" then
msg = self.jsonService:decode(resp)
end
if msg and msg.code == 0 then
local data = msg.data
if data and type(data) == "table" then
local shareInfo = {
reward_unit = data.reward_unit,
userId = data.userId,
reportStatus = data.report_status, --2:已分享 1:未分享
bookId = data.book_id,
levelNo = data.level_no,
title = data.title,
-- contentDesc = data.contentDesc,
url = data.url,
maxRewards = data.max_rewards, -- 最大奖励
endTime = data.end_time, -- 剩余时间
count = data.count, -- 查看人数
friends = data.friends -- 好友列表
}
-- 确保maxRewards是数字
if shareInfo.maxRewards and type(shareInfo.maxRewards) == "string" then
shareInfo.maxRewards = tonumber(shareInfo.maxRewards) or 0
elseif not shareInfo.maxRewards then
shareInfo.maxRewards = 0
end
g_Log(TAG,
string.format("获取分享信息成功: maxRewards=%d, count=%d", shareInfo.maxRewards, shareInfo.count or 0))
self.shareInfo = shareInfo
-- 初始化cachedFriends如果它是nil
callback(true, shareInfo)
end
end
else
callback(false)
end
end
local fail = function(err)
callback(false)
end
self:HttpRequest(url, params, success, fail)
end
function FsyncElement:HttpRequest(url, params, success, fail)
if App.IsStudioClient then
self.httpService:PostForm(url, params, {}, success, fail)
else
APIBridge.RequestAsync('api.httpclient.request', {
["url"] = url,
["headers"] = {
["Content-Type"] = "application/json"
},
["data"] = params
}, function(res)
if res ~= nil and res.responseString ~= nil and res.isSuccessed then
local resp = res.responseString
success(resp)
else
fail(res)
end
end)
end
end
---埋点方法
function FsyncElement:reportData(event, label, value, action)
if not App.IsStudioClient then
NextStudioComponentStatisticsAPI.ComponentStatisticsWithParam(event, "84169", "Special-Interaction", label,
action, value)
end
end
function FsyncElement:InitCountDown()
-- self.commonService:StartCoroutine(function()
-- self.commonService:Yield(self.commonService:WaitUntil(function()
-- return self.shareInfo
-- end))
g_Log(TAG,"初始化倒计时")
if self.shareInfo then
-- 解析接口返回的endTime字段,格式如:"2天23小时59分"
local days, hours, minutes = 0, 0, 0
if self.shareInfo.endTime and self.shareInfo.endTime ~= "" then
local endTimeStr = self.shareInfo.endTime
-- 解析天数
local daysStr = string.match(endTimeStr, "(%d+)天")
if daysStr then
days = tonumber(daysStr) or 0
end
-- 解析小时
local hoursStr = string.match(endTimeStr, "(%d+)小时") or string.match(endTimeStr, "(%d+)时")
if hoursStr then
hours = tonumber(hoursStr) or 0
end
-- 解析分钟
local minutesStr = string.match(endTimeStr, "(%d+)分")
if minutesStr then
minutes = tonumber(minutesStr) or 0
end
g_Log(TAG, string.format("解析倒计时: %d天%02d时%02d分", days, hours, minutes))
else
g_Log(TAG, "倒计时字符串为空或不存在")
end
-- 预加载red0~red9图片
self.redImages = {}
for i = 0, 9 do
-- 直接存储Image组件的sprite
self.redImages[i] = self["cutDiagramRed" .. i]
end
-- 更新倒计时显示,显示的分钟数比实际剩余时间多一分钟
local function updateCountdownDisplay(remainDays, remainHours, remainMinutes, remainSeconds)
-- 调整显示的分钟数,如果秒数大于0,则分钟数+1
local displayMinutes = remainMinutes
if remainSeconds > 0 then
displayMinutes = remainMinutes + 1
-- 处理进位
if displayMinutes == 60 then
displayMinutes = 0
remainHours = remainHours + 1
if remainHours == 24 then
remainHours = 0
remainDays = remainDays + 1
end
end
end
-- 更新天数显示
self:UpdateNumberImage(self.daynum, remainDays)
-- 更新小时显示(两位数)
local hourTens = math.floor(remainHours / 10)
local hourOnes = remainHours % 10
self:UpdateNumberImage(self.hournum0, hourTens)
self:UpdateNumberImage(self.hournum1, hourOnes)
-- 更新分钟显示(两位数)
local minuteTens = math.floor(displayMinutes / 10)
local minuteOnes = displayMinutes % 10
self:UpdateNumberImage(self.minutenum0, minuteTens)
self:UpdateNumberImage(self.minutenum1, minuteOnes)
-- 记录日志
g_Log(TAG, string.format("倒计时更新: 实际剩余时间=%d天%02d小时%02d分%02d秒, 显示=%d天%02d小时%02d分",
remainDays, remainHours, remainMinutes, remainSeconds, remainDays, remainHours, displayMinutes))
end
-- 倒计时结束时更新UI状态
local function onCountdownFinished()
g_Log(TAG, "倒计时结束,更新UI状态")
--解决闪烁问题
self.isInCountdown = false
-- 隐藏倒计时UI
if self.countDown and self.countDown.gameObject then
self.countDown.gameObject:SetActive(false)
end
-- 更新UI显示
self:SetViewByShareInfo()
end
g_Log(TAG,"计算总秒数 和判断是否在倒计时中self.isInCountdown",self.isInCountdown)
-- 计算总秒数
local totalSeconds = days * 86400 + hours * 3600 + minutes * 60
local endTime = os.time() + totalSeconds
-- 立即检查是否应该显示倒计时
if totalSeconds > 0 and self.shareInfo.reportStatus == 2 and self.isInCountdown then
-- 显示倒计时UI
if self.countDown and self.countDown.gameObject then
self.countDown.gameObject:SetActive(true)
end
-- 注册全局定时器,每秒更新一次倒计时(改为每秒更新以获得更流畅的体验)
self.countDownTimerId = self.commonService:RegisterGlobalTimer(1, function()
-- g_Log(TAG,"计算总秒数 和判断是否在倒计时中self.isInCountdown",self.isInCountdown)
local now = os.time()
local diff = endTime - now
if diff <= 0 then
-- 倒计时结束
g_Log(TAG, "倒计时结束注销定时器self.countDownTimerId",self.countDownTimerId)
self.commonService:UnregisterGlobalTimer(self.countDownTimerId)
self.countDownTimerId = nil
self.isInCountdown = false
onCountdownFinished()
return
end
local remainDays = math.floor(diff / 86400)
local remainHours = math.floor((diff % 86400) / 3600)
local remainMinutes = math.floor((diff % 3600) / 60)
local remainSeconds = diff % 60
-- 只有当秒数为0或者分钟或更高单位变化时才更新UI显示
-- 或者当秒数变化导致显示的分钟数变化时也更新UI
local displayMinutes = remainMinutes
if remainSeconds > 0 then
displayMinutes = remainMinutes + 1
end
if remainSeconds == 0 or (not self.lastRemainingMinutes) or self.lastRemainingMinutes ~= remainMinutes or
(not self.lastRemainingHours) or self.lastRemainingHours ~= remainHours or
(not self.lastRemainingDays) or self.lastRemainingDays ~= remainDays or
(not self.lastDisplayMinutes) or self.lastDisplayMinutes ~= displayMinutes then
-- 更新UI显示
updateCountdownDisplay(remainDays, remainHours, remainMinutes, remainSeconds)
-- 记录当前时间,用于下次比较
self.lastRemainingMinutes = remainMinutes
self.lastRemainingHours = remainHours
self.lastRemainingDays = remainDays
self.lastDisplayMinutes = displayMinutes
end
end, true)
else
-- 不需要显示倒计时,确保倒计时UI被隐藏
if self.countDown and self.countDown.gameObject then
self.countDown.gameObject:SetActive(false)
end
-- 如果不是倒计时状态,可能是已经结束或者未开始
if self.shareInfo.reportStatus == 2 or self.shareInfo.reportStatus == 3 then
-- 已分享状态但不在倒计时中,说明倒计时已结束
onCountdownFinished()
end
end
end
-- end)
end
-- 脚本释放
function FsyncElement:Exit()
self:StopBarrageSystem()
-- 清理对象池
for _, barrage in ipairs(self.barragePool) do
if barrage.instance then
GameObject.Destroy(barrage.instance)
end
end
self.barragePool = {}
self.activeBarrages = {}
-- 取消倒计时定时器
if self.countDownTimerId then
self.commonService:UnregisterGlobalTimer(self.countDownTimerId)
self.countDownTimerId = nil
end
FsyncElement.super.Exit(self)
end
return FsyncElement