Files
StellaSora_DataLua/lua/game/ui/disc/livediscctrl.lua
T
SL1900 5e0d58cfad Initial version - 1.2.0.60
EN: 1.2.0.60
CN: 1.2.0.61
JP: 1.2.0.63
KR: 1.2.0.67
2025-12-03 01:00:00 +09:00

173 lines
5.5 KiB
Lua

local BaseCtrl = require("GameCore.UI.BaseCtrl")
local LiveDiscCtrl = class("LiveDiscCtrl", BaseCtrl)
local PathType = CS.DG.Tweening.PathType
local LoopType = CS.DG.Tweening.LoopType
local GameResourceLoader = require("Game.Common.Resource.GameResourceLoader")
LiveDiscCtrl._mapNodeConfig = {
CardDrag = {
sComponentName = "UIDrag",
callback = "OnUIDrag_Drag"
},
rImgDisc = {sComponentName = "RawImage"},
btnOpenFull = {
sNodeName = "CardDrag",
sComponentName = "UIButton",
callback = "OnBtnClick_OpenFull"
},
btnFull = {
sComponentName = "UIButton",
callback = "OnBtnClick_OpenFull"
}
}
LiveDiscCtrl._mapEventConfig = {}
function LiveDiscCtrl:Awake()
self.bMobile = NovaAPI.IsMobilePlatform()
end
function LiveDiscCtrl:OnEnable()
self.callback = nil
end
function LiveDiscCtrl:OnDisable()
self:ClearClickCallback()
self:ReleaseRawImage()
end
function LiveDiscCtrl:SetDiscActive(bGoActice, bBtnAcitve)
self._mapNode.rImgDisc.gameObject:SetActive(bGoActice)
self._mapNode.CardDrag.gameObject:SetActive(not self.bMobile)
self._mapNode.btnFull.gameObject:SetActive(self.bMobile)
self._mapNode.btnOpenFull.interactable = bBtnAcitve
self._mapNode.btnFull.interactable = bBtnAcitve
end
function LiveDiscCtrl:SetClickCallback(callback)
self.callback = callback
end
function LiveDiscCtrl:ClearClickCallback()
self.callback = nil
end
function LiveDiscCtrl:SetRawImage(sDiscBg, nRarity)
local bSSR = nRarity == GameEnum.itemRarity.SSR
if self.uiRoot == nil then
self.uiRoot = PanelManager.GetUIRoot()
end
if self.goRender == nil then
local renderPrefab = self:LoadAsset("UI/Disc/Disc_OffScreen_Renderer.prefab")
self.goRender = instantiate(renderPrefab, self.uiRoot)
self.camera = self.goRender.transform:Find("----Renderer----/OffScreen2DCamera"):GetComponent("Camera")
local nScale = self.bMobile and math.floor(Settings.CURRENT_CANVAS_FULL_RECT_HEIGHT * Settings.RENDERTEXTURE_SIZE_FACTOR) or math.floor(2048 * Settings.RENDERTEXTURE_SIZE_FACTOR)
self.rt2d = GameUIUtils.GenerateRenderTextureFor2D(nScale, nScale)
self.rt2d.name = "LiveDisc"
self.camera.targetTexture = self.rt2d
NovaAPI.SetTexture(self._mapNode.rImgDisc, self.rt2d)
end
local discRoot = self.goRender.transform:Find("----Renderer----/Canvas")
if discRoot.transform.childCount > 0 then
for i = discRoot.transform.childCount, 1, -1 do
local obj = discRoot.transform:GetChild(i - 1).gameObject
destroyImmediate(obj)
end
end
local discPrefab
local sRootPath = Settings.AB_ROOT_PATH
if type(sDiscBg) == "string" and sDiscBg ~= "" then
local sPrefab = sDiscBg .. AllEnum.DiscBgSurfix.Card .. ".prefab"
if GameResourceLoader.ExistsAsset(sRootPath .. sPrefab) == true then
discPrefab = self:LoadAsset(sPrefab)
end
end
local bNoneAsset = false
if discPrefab == nil then
discPrefab = self:LoadAsset("Disc/Common/Common.prefab")
bNoneAsset = true
end
if discPrefab then
local goDisc = instantiate(discPrefab, discRoot)
if not bSSR or bNoneAsset then
goDisc.transform.localPosition = Vector3(0, -11, 0)
local imgIcon = goDisc.transform:Find("layer_-1/icon"):GetComponent("Image")
local imgFrame = goDisc.transform:Find("layer_-1/frame"):GetComponent("Image")
self:SetPngSprite(imgIcon, sDiscBg .. AllEnum.DiscBgSurfix.Image)
self:SetSprite_FrameColor(imgFrame, nRarity, AllEnum.FrameType_New.SuperscriptDB, true)
end
self.trTarget = goDisc.transform:Find("Gyroscope/Target").transform
NovaAPI.SetComponentEnable(self.trTarget:GetComponent("Image"), false)
NovaAPI.SetComponentEnable(goDisc.transform:Find("Gyroscope/Axis"):GetComponent("Image"), false)
if not self.bMobile then
self.trTarget.localPosition = Vector3(-8, 0, 0)
local tbPath = {
[1] = Vector3(-8, 0, 0),
[2] = Vector3(8, 0, 0)
}
local nTime = 8
if self.tweener then
self.tweener:Kill()
self.tweener = nil
end
self.tweener = self.trTarget:DOLocalPath(tbPath, nTime, PathType.Linear):SetLoops(-1, LoopType.Yoyo):SetEase(Ease.InOutSine):SetUpdate(true)
end
end
end
function LiveDiscCtrl:ReleaseRawImage()
if self.camera and self.camera:IsNull() == false then
self.camera.targetTexture = nil
self.camera = nil
end
NovaAPI.SetTexture(self._mapNode.rImgDisc, nil)
if self.rt2d then
GameUIUtils.ReleaseRenderTexture(self.rt2d)
self.rt2d = nil
end
if self.goRender then
destroy(self.goRender)
self.goRender = nil
end
if self.tweener then
self.tweener:Kill()
self.tweener = nil
end
end
function LiveDiscCtrl:OnUIDrag_Drag(mDrag)
if self.bMobile then
return
end
local clamp = function(value, min, max)
if value < min then
value = min
elseif max < value then
value = max
end
return value
end
if mDrag.DragEventType == AllEnum.UIDragType.DragStart then
self.bStartDrag = true
if self.tweener then
self.tweener:Pause()
end
elseif mDrag.DragEventType == AllEnum.UIDragType.Drag then
if true == self.bStartDrag then
local nX = self.trTarget.localPosition.x + (mDrag.EventData.delta.x or 0)
local nY = self.trTarget.localPosition.y + (mDrag.EventData.delta.y or 0)
nX = clamp(nX, -100, 100)
nY = clamp(nY, -100, 100)
self.trTarget.localPosition = Vector3(nX, nY, 0)
end
elseif mDrag.DragEventType == AllEnum.UIDragType.DragEnd then
self.bStartDrag = false
self.trTarget.localPosition = Vector3(0, 0, 0)
if self.tweener then
self.tweener:Play()
end
end
end
function LiveDiscCtrl:GetCanOpenFullState()
return not self.bStartDrag
end
function LiveDiscCtrl:OnBtnClick_OpenFull()
if self.bStartDrag then
return
end
EventManager.Hit("ClickLiveDisc")
if self.callback then
self.callback()
end
end
return LiveDiscCtrl