e0549005e1
EN: 1.9.0.103 CN: 1.9.0.104 JP: 1.9.0.106 KR: 1.9.0.108
187 lines
5.2 KiB
Lua
187 lines
5.2 KiB
Lua
local SubSkillDisplayCtrl = class("SubSkillDisplayCtrl", BaseCtrl)
|
|
local Actor2DManager = require("Game.Actor2D.Actor2DManager")
|
|
local LocalData = require("GameCore.Data.LocalData")
|
|
local LocalSettingData = require("GameCore.Data.LocalSettingData")
|
|
local RapidJson = require("rapidjson")
|
|
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
|
|
SubSkillDisplayCtrl._mapNodeConfig = {
|
|
rtDisplay = {
|
|
nCount = 2,
|
|
sCtrlName = "Game.UI.Battle.SubSkillDisplay.UltimateDisplayCtrl"
|
|
},
|
|
rtSubSkill = {
|
|
nCount = 2,
|
|
sCtrlName = "Game.UI.Battle.SubSkillDisplay.SkillDisplayCtrl"
|
|
}
|
|
}
|
|
SubSkillDisplayCtrl._mapEventConfig = {
|
|
CastAssistSkill = "OnEvent_CastAssistSkill",
|
|
[EventId.SubSkillDisplayInit] = "OnEvent_Init",
|
|
InputEnable = "OnEvent_InputEnable"
|
|
}
|
|
function SubSkillDisplayCtrl:Awake()
|
|
local sSavedDate = LocalData.GetPlayerLocalData("SkillShowDate")
|
|
local sDate = os.date("%x")
|
|
self.mapCharShow = {}
|
|
if sDate ~= sSavedDate then
|
|
LocalData.SetPlayerLocalData("SkillShowDate", sDate)
|
|
LocalData.SetPlayerLocalData("SkillShowCount", RapidJson.encode({}))
|
|
else
|
|
local sJson = LocalData.GetPlayerLocalData("SkillShowCount")
|
|
local mapData = decodeJson(sJson)
|
|
if mapData ~= nil then
|
|
for _, nCharId in ipairs(mapData) do
|
|
self.mapCharShow[nCharId] = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
function SubSkillDisplayCtrl:FadeIn()
|
|
end
|
|
function SubSkillDisplayCtrl:FadeOut()
|
|
end
|
|
function SubSkillDisplayCtrl:OnEnable()
|
|
local wait = function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
NovaAPI.ForceUpdateCanvases()
|
|
end
|
|
cs_coroutine.start(wait)
|
|
end
|
|
function SubSkillDisplayCtrl:OnDisable()
|
|
for _, mapData in pairs(self.mapChar) do
|
|
Actor2DManager.UnsetActor2D(false, mapData.Idx, true)
|
|
end
|
|
end
|
|
function SubSkillDisplayCtrl:OnDestroy()
|
|
end
|
|
function SubSkillDisplayCtrl:OnRelease()
|
|
end
|
|
function SubSkillDisplayCtrl:OnEvent_Init(tbTeam)
|
|
self.mapChar = {}
|
|
if #tbTeam < 3 then
|
|
printWarn("人数小于3")
|
|
return
|
|
end
|
|
for i = 2, 3 do
|
|
local charTid = tbTeam[i]
|
|
if charTid ~= nil and charTid ~= 0 then
|
|
local nSkillId = ConfigTable.GetData_Character(charTid).AssistSkillId
|
|
self.mapChar[charTid] = {
|
|
Idx = i,
|
|
nSkillId = nSkillId,
|
|
bPlaying = false,
|
|
rtIdx = i - 1,
|
|
nSkillShowIdx = 0
|
|
}
|
|
end
|
|
self._mapNode.rtDisplay[i - 1]:InitL2dRes(charTid, i)
|
|
end
|
|
end
|
|
function SubSkillDisplayCtrl:OnEvent_CastAssistSkill(nCharId)
|
|
if self.mapChar[nCharId] ~= nil then
|
|
local nSkillId = self.mapChar[nCharId].nSkillId
|
|
local checkType = self:CheckPlayType(nCharId)
|
|
if checkType == 0 then
|
|
return
|
|
elseif checkType == 1 then
|
|
self:UltimateDisplay(nCharId)
|
|
elseif checkType == 2 then
|
|
self:SkillDisplay(nCharId, nSkillId)
|
|
end
|
|
end
|
|
end
|
|
function SubSkillDisplayCtrl:OnEvent_InputEnable(bEnable)
|
|
if not bEnable then
|
|
self:InterrputAllDisplay()
|
|
end
|
|
end
|
|
function SubSkillDisplayCtrl:InterrputAllDisplay()
|
|
self._mapNode.rtDisplay[1]:InterrputAnim()
|
|
self._mapNode.rtDisplay[2]:InterrputAnim()
|
|
self._mapNode.rtSubSkill[1]:InterrputAnim()
|
|
self._mapNode.rtSubSkill[2]:InterrputAnim()
|
|
for _, mapSkill in pairs(self.mapChar) do
|
|
mapSkill.bPlaying = false
|
|
mapSkill.nSkillShowIdx = 0
|
|
end
|
|
end
|
|
function SubSkillDisplayCtrl:SkillDisplay(nCharId, nSkillId)
|
|
local mapData = self.mapChar[nCharId]
|
|
if mapData == nil then
|
|
return
|
|
end
|
|
local Callback = function()
|
|
mapData.nSkillShowIdx = 0
|
|
end
|
|
if mapData.nSkillShowIdx == 0 then
|
|
for nIdx, skillCtrl in ipairs(self._mapNode.rtSubSkill) do
|
|
if not skillCtrl.bPlaying then
|
|
skillCtrl:ShowSkillTips(nSkillId, nCharId, Callback)
|
|
mapData.nSkillShowIdx = nIdx
|
|
return
|
|
end
|
|
end
|
|
printError("没有槽位播放技能展示")
|
|
else
|
|
self._mapNode.rtSubSkill[mapData.nSkillShowIdx]:ShowSkillTips(nSkillId, nCharId, Callback)
|
|
WwiseAudioMgr:PostEvent("ui_tip_feadback")
|
|
end
|
|
end
|
|
function SubSkillDisplayCtrl:UltimateDisplay(nCharId)
|
|
local mapData = self.mapChar[nCharId]
|
|
if mapData == nil then
|
|
return
|
|
end
|
|
local Callback = function()
|
|
mapData.bPlaying = false
|
|
end
|
|
if mapData.bPlaying then
|
|
self._mapNode.rtDisplay[mapData.rtIdx]:ReShowSkill(Callback, mapData.Idx)
|
|
else
|
|
self._mapNode.rtDisplay[mapData.rtIdx]:ShowSkill(nCharId, mapData.Idx, Callback)
|
|
mapData.bPlaying = true
|
|
end
|
|
self._mapNode.rtDisplay[mapData.rtIdx % 2 + 1]:Set2SecondSkill()
|
|
end
|
|
function SubSkillDisplayCtrl:CheckPlayType(nCharId)
|
|
local bForce = self:CheckForcePlay()
|
|
local nType = LocalSettingData.GetLocalSettingData("AnimationSub")
|
|
if bForce then
|
|
nType = 2
|
|
end
|
|
if nType == 3 then
|
|
return 2
|
|
elseif nType == 2 then
|
|
if self.mapCharShow[nCharId] == nil then
|
|
self.mapCharShow[nCharId] = true
|
|
self:SetLocalData()
|
|
end
|
|
return 1
|
|
elseif nType == 1 then
|
|
if self.mapCharShow[nCharId] == nil then
|
|
self.mapCharShow[nCharId] = true
|
|
self:SetLocalData()
|
|
return 1
|
|
else
|
|
return 2
|
|
end
|
|
end
|
|
end
|
|
function SubSkillDisplayCtrl:SetLocalData()
|
|
local jsonData = {}
|
|
for nCharId, _ in pairs(self.mapCharShow) do
|
|
table.insert(jsonData, nCharId)
|
|
end
|
|
local sJson = RapidJson.encode(jsonData)
|
|
LocalData.SetPlayerLocalData("SkillShowCount", sJson)
|
|
return 1
|
|
end
|
|
function SubSkillDisplayCtrl:CheckForcePlay()
|
|
local tbDynamic = {
|
|
[GameEnum.dynamicLevelType.Trial] = true
|
|
}
|
|
local tbBattle = {}
|
|
return tbDynamic[self._panel.DynamicType] or tbBattle[self._panel.BattleType]
|
|
end
|
|
return SubSkillDisplayCtrl
|