Files
SL1900 eafd8f4088 Update - 1.9.0.107
EN: 1.9.0.107
CN: 1.9.0.108
JP: 1.9.0.112
KR: 1.9.0.112
2026-05-14 16:00:00 +09:00

235 lines
8.4 KiB
Lua

local BreakOutPlaySkillCtrl = class("BreakOutPlaySkillCtrl", BaseCtrl)
local AdventureModuleHelper = CS.AdventureModuleHelper
local InputManagerIns = CS.InputManager.Instance
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
BreakOutPlaySkillCtrl._mapNodeConfig = {
goJoystick = {
sNodeName = "--joystick--"
},
rtJoystick = {
sNodeName = "--joystick--",
sComponentName = "RectTransform"
},
cgJoystick = {
sNodeName = "--joystick--",
sComponentName = "CanvasGroup"
},
Skill_Pos = {sComponentName = "Transform"},
Shoot_Pos = {sComponentName = "Transform"},
cgSafeAreaRoot = {
sNodeName = "--safeAreaRoot--",
sComponentName = "CanvasGroup"
},
break_Skill = {
sNodeName = "btnSkill",
sCtrlName = "Game.UI.Play_BreakOut_30101.BreakOutSkillBtnCtrl"
},
break_Shoot = {
sNodeName = "btnShoot",
sCtrlName = "Game.UI.Play_BreakOut_30101.BreakOutSkillBtnCtrl"
}
}
local SKILL_SHOOT = 1
local SKILL_ULTRA = 4
BreakOutPlaySkillCtrl._mapEventConfig = {
LoadLevelRefresh = "OnEvent_LoadLevelRefresh",
PlayerAdventureActorCastSkill = "OnEvent_UseSkillSuc",
ButtonStateChange = "OnEvent_BtnStateChange",
SetVariableJoystickMode = "OnEvent_SetVariableJoystickMode",
BrickActorEnergy = "OnEvent_RefreshSkillState",
Brick_ShootButtonState = "OnEvent_RefreshShootState",
SetBreakOutPlaySkill_Visible = "OnEvent_BreakOutPlaySkillVisible",
OnEvent_ClearState = "OnEvent_ClearState"
}
function BreakOutPlaySkillCtrl:Awake()
local param = self:GetPanelParam()
if type(param) == "table" then
self.nActId = param[1]
self.nLevelId = param[2]
self.nCurCharId = param[3]
end
self.BreakOutData = PlayerData.Activity:GetActivityDataById(self.nActId)
self.tbDefine_BreakOutPlayBtn = {
[1] = {
btnTyp = SKILL_SHOOT,
BreakOutSkillBtnCtrl = self._mapNode.break_Shoot,
sName = "Fire1",
nHoldThreshold = 0.1
},
[2] = {
btnTyp = SKILL_ULTRA,
BreakOutSkillBtnCtrl = self._mapNode.break_Skill,
sName = "Fire4",
nHoldThreshold = 0.1
}
}
self.nCurPlayerId = nil
self.skillTipTime = 0
self.dodgeTipTime = 0
end
function BreakOutPlaySkillCtrl:OnEnable()
if NovaAPI.IsMobilePlatform() or NovaAPI.IsEditorPlatform() then
self._mapNode.goJoystick:SetActive(true)
NovaAPI.RegisterVirtualJoystick("Horizontal", "Vertical", self._mapNode.goJoystick)
else
self._mapNode.goJoystick:SetActive(false)
end
local nW = math.floor(Settings.CURRENT_CANVAS_FULL_RECT_WIDTH)
local nH = math.floor(Settings.CURRENT_CANVAS_FULL_RECT_HEIGHT)
self._mapNode.rtJoystick.sizeDelta = Vector2(nW / 2, nH * 2 / 3)
for _, v in ipairs(self.tbDefine_BreakOutPlayBtn) do
NovaAPI.RegisterRealButton(v.sName, v.nHoldThreshold)
local go = v.BreakOutSkillBtnCtrl ~= nil and v.BreakOutSkillBtnCtrl.gameObject or v.goBtn
NovaAPI.RegisterVirtualButton(v.sName, go)
NovaAPI.SetButtonExHoldThreshold(go, v.nHoldThreshold)
end
self:SetKeyLayout()
self:SetActionBind()
self:Refresh()
self:OnEvent_BreakOutPlaySkillVisible(false)
end
function BreakOutPlaySkillCtrl:OnDisable()
NovaAPI.UnRegisterVirtualJoystick("Horizontal", "Vertical")
for _, v in ipairs(self.tbDefine_BreakOutPlayBtn) do
NovaAPI.UnRegisterRealButton(v.sName)
NovaAPI.UnRegisterVirtualButton(v.sName)
end
end
function BreakOutPlaySkillCtrl:SetKeyLayout()
self:SetKeyPos(self._mapNode.break_Skill.gameObject:GetComponent("RectTransform"), self._mapNode.Skill_Pos)
self:SetKeyPos(self._mapNode.break_Shoot.gameObject:GetComponent("RectTransform"), self._mapNode.Shoot_Pos)
self._mapNode.break_Skill:SetCDTextSize()
self._mapNode.break_Shoot:SetCDTextSize()
end
function BreakOutPlaySkillCtrl:SetKeyPos(btnTra, parentTra)
btnTra:SetParent(parentTra)
btnTra.anchoredPosition = Vector2.zero
btnTra.localScale = Vector3.one
end
function BreakOutPlaySkillCtrl:OnEvent_LoadLevelRefresh()
self:Refresh()
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForSeconds(0.01))
self:OnEvent_BreakOutPlaySkillVisible(true)
end
cs_coroutine.start(wait)
end
function BreakOutPlaySkillCtrl:OnEvent_UseSkillSuc(nCharId, nSkillId)
for i, v in ipairs(self.tbDefine_BreakOutPlayBtn) do
if v.nCharId == nCharId and v.nSkillId == nSkillId and v.BreakOutSkillBtnCtrl ~= nil then
v.BreakOutSkillBtnCtrl:SetMainAlpha(false)
end
end
end
function BreakOutPlaySkillCtrl:OnEvent_BtnStateChange(sBtnName, nBtnState)
local func_CheckBtnState = function(tb)
for i, v in ipairs(tb) do
if v.sName == sBtnName and v.BreakOutSkillBtnCtrl ~= nil then
v.BreakOutSkillBtnCtrl:BtnStateChange(nBtnState)
end
end
end
func_CheckBtnState(self.tbDefine_BreakOutPlayBtn)
end
function BreakOutPlaySkillCtrl:Refresh()
for _, v in ipairs(self.tbDefine_BreakOutPlayBtn) do
if v.BreakOutSkillBtnCtrl ~= nil then
v.nCharId = self.nCurCharId
local tCharacterData = self.BreakOutData:GetDataFromBreakOutCharacter(self.nCurCharId)
if tCharacterData == nil then
printError("角色ID:" .. self.nCurCharId .. "在表中不存在数据信息")
return
end
v.nSkillId = tCharacterData.SkillId
local EET = tCharacterData.EET
local skillData = ConfigTable.GetData("Skill", v.nSkillId)
if skillData ~= nil then
v.BreakOutSkillBtnCtrl:InitSkillBtn(EET, skillData.Icon, v.nSkillId, v.btnTyp, self.nCurCharId, self.BreakOutData.BreakOutLevelData)
end
end
end
end
function BreakOutPlaySkillCtrl:OnEvent_ClearState()
local breakOutSkillBtnCtrl = self.tbDefine_BreakOutPlayBtn[2].BreakOutSkillBtnCtrl
if breakOutSkillBtnCtrl ~= nil then
local tCharacterData = self.BreakOutData:GetDataFromBreakOutCharacter(self.nCurCharId)
if tCharacterData == nil then
printError("角色ID:" .. self.nCurCharId .. "在表中不存在数据信息")
return
end
local nMaxSkillEnergy = tCharacterData.MP
local skillData = ConfigTable.GetData("Skill", tCharacterData.SkillId)
local nTotalCDTime = skillData.SkillCD
breakOutSkillBtnCtrl:RefreshSkillBtn(0.0, nMaxSkillEnergy, 0.0, nTotalCDTime)
end
end
function BreakOutPlaySkillCtrl:SetActionBind()
local set = function(config)
local bHas, tbControl = InputManagerIns:GetInputActionConfig(config.sName)
if bHas then
local sGamepadBind, mapKeyboardBind = "", {name = "", displayName = ""}
for i = 0, tbControl.Count - 1 do
local mapControl = tbControl[i]
if mapControl.isGamepad then
sGamepadBind = mapControl.name
elseif (mapControl.isKeyboard or mapControl.isMouse) and mapKeyboardBind.name == "" then
mapKeyboardBind.name = mapControl.name
mapKeyboardBind.displayName = mapControl.displayName
end
end
if config.BreakOutSkillBtnCtrl then
config.BreakOutSkillBtnCtrl:SetActionBind(sGamepadBind, mapKeyboardBind)
end
end
end
for _, v in ipairs(self.tbDefine_BreakOutPlayBtn) do
set(v)
end
end
function BreakOutPlaySkillCtrl:OnEvent_RefreshShootState(bEnableShoot)
self.tbDefine_BreakOutPlayBtn[1].BreakOutSkillBtnCtrl:SetMainAlpha(bEnableShoot)
end
function BreakOutPlaySkillCtrl:OnEvent_RefreshSkillState(CharacterId, SkillId, nCurSkillEnergy, nMaxSkillEnergy, nCurCDTime)
local breakOutSkillBtnCtrl = self.tbDefine_BreakOutPlayBtn[2].BreakOutSkillBtnCtrl
if CharacterId ~= self.nCurCharId then
return
end
local tCharacterData = self.BreakOutData:GetDataFromBreakOutCharacter(CharacterId)
if tCharacterData == nil then
printError("角色ID:" .. CharacterId .. "在表中不存在数据信息")
return
end
local skillData = ConfigTable.GetData("Skill", SkillId)
local nTotalCDTime = skillData.SkillCD
if breakOutSkillBtnCtrl ~= nil then
breakOutSkillBtnCtrl:RefreshSkillBtn(nCurSkillEnergy, nMaxSkillEnergy, nCurCDTime, nTotalCDTime)
end
end
function BreakOutPlaySkillCtrl:EnableBtnControl()
for _, v in ipairs(self.tbDefine_BreakOutPlayBtn) do
NovaAPI.SetRealButtonActive(v.sName, true)
end
end
function BreakOutPlaySkillCtrl:OnEvent_SetVariableJoystickMode()
if not NovaAPI.IsMobilePlatform() then
return
end
NovaAPI.SetVariableJoystickMode(self._mapNode.goJoystick)
end
function BreakOutPlaySkillCtrl:OnEvent_BreakOutPlaySkillVisible(bVisible)
self:SetAllVisible(bVisible)
end
function BreakOutPlaySkillCtrl:SetAllVisible(bVisible)
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgJoystick, bVisible == true and 0.3 or 0)
NovaAPI.SetCanvasGroupInteractable(self._mapNode.cgJoystick, true)
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cgJoystick, true)
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgSafeAreaRoot, bVisible == true and 1 or 0)
end
function BreakOutPlaySkillCtrl:OnEvent_SwitchUI()
PanelManager.SwitchUI()
end
function BreakOutPlaySkillCtrl:OnEvent_SwitchSkillBtn()
PanelManager.SwitchSkillBtn()
end
return BreakOutPlaySkillCtrl