Files
StellaSora_DataLua/lua/game/ui/activity/throwgifts/itemselect/throwgiftitemselectctrl.lua
T
SL1900 e0549005e1 Update - 1.9.0.103
EN: 1.9.0.103
CN: 1.9.0.104
JP: 1.9.0.106
KR: 1.9.0.108
2026-04-18 00:15:00 +09:00

172 lines
6.3 KiB
Lua

local ThrowGiftItemSelectCtrl = class("ThrowGiftItemSelectCtrl", BaseCtrl)
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
ThrowGiftItemSelectCtrl._mapNodeConfig = {
btnItemSelect = {
nCount = 2,
sComponentName = "NaviButton",
callback = "OnBtnClick_Item"
},
btnItemSelectCtrl = {
sNodeName = "btnItemSelect",
nCount = 2,
sCtrlName = "Game.UI.Activity.ThrowGifts.ItemSelect.ThrowGiftItemSelectGridCtrl"
},
rtPos = {nCount = 2}
}
ThrowGiftItemSelectCtrl._mapEventConfig = {
ThrowGiftItemSelectConfirmClick = "OnEvent_ThrowGiftItemSelectConfirmClick",
GamepadUIChange = "OnEvent_GamepadUIChange"
}
ThrowGiftItemSelectCtrl._mapRedDotConfig = {}
function ThrowGiftItemSelectCtrl:Awake()
self.tbGamepadUINode = self:GetGamepadUINode()
end
function ThrowGiftItemSelectCtrl:FadeIn()
end
function ThrowGiftItemSelectCtrl:FadeOut()
end
function ThrowGiftItemSelectCtrl:OnEnable()
self.bSelected = false
self.curIdx = 0
self.tbOriginPos = {}
self.tbOriginPos[1] = self._mapNode.btnItemSelectCtrl[1].gameObject.transform.position
self.tbOriginPos[2] = self._mapNode.btnItemSelectCtrl[2].gameObject.transform.position
self.handler = {}
for k, v in ipairs(self._mapNode.btnItemSelect) do
self.handler[k] = ui_handler(self, self.OnBtnSelect_Item, v, k)
v.onSelect:AddListener(self.handler[k])
end
end
function ThrowGiftItemSelectCtrl:OnDisable()
for k, v in ipairs(self._mapNode.btnItemSelect) do
v.onSelect:RemoveListener(self.handler[k])
end
end
function ThrowGiftItemSelectCtrl:OnDestroy()
end
function ThrowGiftItemSelectCtrl:OnRelease()
end
function ThrowGiftItemSelectCtrl:Refresh(tbItem)
self._mapNode.btnItemSelectCtrl[1]:Refresh(tbItem[1])
self._mapNode.btnItemSelectCtrl[2]:Refresh(tbItem[2])
self._mapNode.btnItemSelectCtrl[1]:SetSelect(false)
self._mapNode.btnItemSelectCtrl[2]:SetSelect(false)
self._mapNode.btnItemSelectCtrl[1].gameObject.transform.position = self.tbOriginPos[1]
self._mapNode.btnItemSelectCtrl[2].gameObject.transform.position = self.tbOriginPos[2]
self._mapNode.btnItemSelectCtrl[1].gameObject.transform.localEulerAngles = Vector3(0, 0, 0)
self._mapNode.btnItemSelectCtrl[2].gameObject.transform.localEulerAngles = Vector3(0, 0, 0)
self._mapNode.btnItemSelectCtrl[1].gameObject:SetActive(true)
self._mapNode.btnItemSelectCtrl[2].gameObject:SetActive(true)
WwiseAudioMgr:PostEvent("Mode_Present_intensify")
self:ResetSelect(self._mapNode.btnItemSelect)
end
function ThrowGiftItemSelectCtrl:OpenPanel(tbItem, callback, curIdx)
GamepadUIManager.EnableGamepadUI("ThrowGiftItemSelectCtrl", self.tbGamepadUINode)
self.curPosIdx = curIdx
self.gameObject:SetActive(true)
self.callback = callback
self.bSelected = false
self.curIdx = 0
self.tbItems = tbItem
self.nCurItemsIdx = 1
self.tbResultIdx = {}
self:Refresh(self.tbItems[self.nCurItemsIdx])
end
function ThrowGiftItemSelectCtrl:ResetSelect(tbUI)
self.curIdx = 0
GamepadUIManager.SetNavigation(tbUI)
local animTime = 0.4
self:AddTimer(1, animTime, function()
if self.curIdx == 0 then
local nSelect = 1
GamepadUIManager.ClearSelectedUI()
GamepadUIManager.SetSelectedUI(self._mapNode.btnItemSelect[nSelect].gameObject)
if GamepadUIManager.GetCurUIType() == AllEnum.GamepadUIType.Mouse then
self:OnBtnClick_Item(self._mapNode.btnItemSelect[nSelect].gameObject, nSelect)
end
end
end, true, true, true)
end
function ThrowGiftItemSelectCtrl:OnBtnClick_Item(btn, nIdx)
WwiseAudioMgr:PostEvent("Mode_Present_intensify_choose")
if self.bSelected then
return
end
if self.curIdx == nIdx then
return
end
self._mapNode.btnItemSelectCtrl[1]:SetSelect(nIdx == 1)
self._mapNode.btnItemSelectCtrl[2]:SetSelect(nIdx == 2)
self.curIdx = nIdx
end
function ThrowGiftItemSelectCtrl:OnBtnSelect_Item(btn, nIndex)
local nUIType = GamepadUIManager.GetCurUIType()
if nUIType ~= AllEnum.GamepadUIType.Other and nUIType ~= AllEnum.GamepadUIType.Mouse then
self:OnBtnClick_Item(btn, nIndex)
end
end
function ThrowGiftItemSelectCtrl:OnEvent_ThrowGiftItemSelectConfirmClick()
if self.bSelected then
return
end
if self.curIdx == 0 then
return
end
self.bSelected = true
self._mapNode.btnItemSelectCtrl[self.curIdx]:PlaySelectAnim()
table.insert(self.tbResultIdx, self.curIdx)
if self.nCurItemsIdx < #self.tbItems then
self.nCurItemsIdx = self.nCurItemsIdx + 1
self:Refresh(self.tbItems[self.nCurItemsIdx])
else
WwiseAudioMgr:PostEvent("Mode_Present_intensify_ok")
local endPos = self._mapNode.rtPos[self.curPosIdx].transform.position
local beginPos = self._mapNode.btnItemSelectCtrl[self.curIdx].gameObject.transform.position
local controlPos = Vector3(3, 5, 0)
for i = 1, 2 do
self._mapNode.btnItemSelectCtrl[i].gameObject:SetActive(i == self.curIdx)
end
local wait = function()
local totalMoveTime = 0.3
local moveTime = 0
local normalizedTime = 0
while normalizedTime < 1 do
moveTime = moveTime + CS.UnityEngine.Time.unscaledDeltaTime
normalizedTime = moveTime / totalMoveTime
normalizedTime = normalizedTime <= 1 and normalizedTime or 1
local x, y, z = UTILS.GetBezierPointByT(beginPos, controlPos, endPos, normalizedTime)
local angleZ = -180 * normalizedTime
self._mapNode.btnItemSelectCtrl[self.curIdx].gameObject.transform.localEulerAngles = Vector3(0, 0, angleZ)
self._mapNode.btnItemSelectCtrl[self.curIdx].gameObject.transform.position = Vector3(x, y, z)
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
end
if self.callback ~= nil and type(self.callback) == "function" then
self.callback(self.tbResultIdx)
end
self.gameObject:SetActive(false)
GamepadUIManager.DisableGamepadUI("ThrowGiftItemSelectCtrl")
end
if #self.tbResultIdx <= 1 then
cs_coroutine.start(wait)
else
if self.callback ~= nil and type(self.callback) == "function" then
self.callback(self.tbResultIdx)
end
self.gameObject:SetActive(false)
GamepadUIManager.DisableGamepadUI("ThrowGiftItemSelectCtrl")
end
end
end
function ThrowGiftItemSelectCtrl:OnEvent_GamepadUIChange(sName, nBeforeType, nAfterType)
if sName ~= "ThrowGiftItemSelectCtrl" then
return
end
if nBeforeType == AllEnum.GamepadUIType.Other or nBeforeType == AllEnum.GamepadUIType.Mouse then
local nSelect = self.curIdx ~= 0 and self.curIdx or 1
GamepadUIManager.ClearSelectedUI()
GamepadUIManager.SetSelectedUI(self._mapNode.btnItemSelect[nSelect].gameObject)
end
end
return ThrowGiftItemSelectCtrl