8c4bd41668
EN: 1.13.0.124 CN: 1.13.0.124 JP: 1.13.0.128 KR: 1.13.0.130
164 lines
4.7 KiB
Lua
164 lines
4.7 KiB
Lua
local SoldierSandtableFxCtrl = class("SoldierSandtableFxCtrl", BaseCtrl)
|
|
local nTime = 0.5
|
|
local fxType = {
|
|
Gray = 1,
|
|
Green = 2,
|
|
Blue = 3,
|
|
Purple = 4,
|
|
Gold = 5,
|
|
Coin = 99
|
|
}
|
|
SoldierSandtableFxCtrl._mapNodeConfig = {
|
|
RoleSlide_Coin = {},
|
|
RoleSlide_Blue = {nCount = 5},
|
|
RoleSlide_Gold = {nCount = 5},
|
|
RoleSlide_Gray = {nCount = 6},
|
|
RoleSlide_Green = {nCount = 5},
|
|
RoleSlide_Purple = {nCount = 5}
|
|
}
|
|
SoldierSandtableFxCtrl._mapEventConfig = {}
|
|
SoldierSandtableFxCtrl._mapRedDotConfig = {}
|
|
function SoldierSandtableFxCtrl:Awake()
|
|
end
|
|
function SoldierSandtableFxCtrl:OnEnable()
|
|
self:InitFx()
|
|
end
|
|
function SoldierSandtableFxCtrl:InitFx()
|
|
self._mapNode.RoleSlide_Coin:SetActive(false)
|
|
self.tbUnUseNode = {
|
|
[fxType.Coin] = {},
|
|
[fxType.Blue] = {},
|
|
[fxType.Gold] = {},
|
|
[fxType.Gray] = {},
|
|
[fxType.Green] = {},
|
|
[fxType.Purple] = {}
|
|
}
|
|
self.tbUseNode = {
|
|
[fxType.Coin] = {},
|
|
[fxType.Blue] = {},
|
|
[fxType.Gold] = {},
|
|
[fxType.Gray] = {},
|
|
[fxType.Green] = {},
|
|
[fxType.Purple] = {}
|
|
}
|
|
table.insert(self.tbUnUseNode[fxType.Coin], self._mapNode.RoleSlide_Coin)
|
|
for _, v in ipairs(self._mapNode.RoleSlide_Blue) do
|
|
v:SetActive(false)
|
|
table.insert(self.tbUnUseNode[fxType.Blue], v)
|
|
end
|
|
for _, v in ipairs(self._mapNode.RoleSlide_Gold) do
|
|
v:SetActive(false)
|
|
table.insert(self.tbUnUseNode[fxType.Gold], v)
|
|
end
|
|
for _, v in ipairs(self._mapNode.RoleSlide_Gray) do
|
|
v:SetActive(false)
|
|
table.insert(self.tbUnUseNode[fxType.Gray], v)
|
|
end
|
|
for _, v in ipairs(self._mapNode.RoleSlide_Green) do
|
|
v:SetActive(false)
|
|
table.insert(self.tbUnUseNode[fxType.Green], v)
|
|
end
|
|
for _, v in ipairs(self._mapNode.RoleSlide_Purple) do
|
|
v:SetActive(false)
|
|
table.insert(self.tbUnUseNode[fxType.Purple], v)
|
|
end
|
|
end
|
|
function SoldierSandtableFxCtrl:PlayFx(tbfx, callback)
|
|
for nType, v in pairs(tbfx) do
|
|
if nType == fxType.Coin then
|
|
local go = self:GetUnUseNode(nType)
|
|
self:PlayFxItem(go, v[1].from, v[1].to, nType)
|
|
elseif nType == fxType.Blue then
|
|
for i = 1, #v do
|
|
local go = self:GetUnUseNode(nType)
|
|
self:PlayFxItem(go, v[i].from, v[i].to, nType)
|
|
end
|
|
elseif nType == fxType.Gold then
|
|
for i = 1, #v do
|
|
local go = self:GetUnUseNode(nType)
|
|
self:PlayFxItem(go, v[i].from, v[i].to, nType)
|
|
end
|
|
elseif nType == fxType.Gray then
|
|
for i = 1, #v do
|
|
local go = self:GetUnUseNode(nType)
|
|
self:PlayFxItem(go, v[i].from, v[i].to, nType)
|
|
end
|
|
elseif nType == fxType.Green then
|
|
for i = 1, #v do
|
|
local go = self:GetUnUseNode(nType)
|
|
self:PlayFxItem(go, v[i].from, v[i].to, nType)
|
|
end
|
|
elseif nType == fxType.Purple then
|
|
for i = 1, #v do
|
|
local go = self:GetUnUseNode(nType)
|
|
self:PlayFxItem(go, v[i].from, v[i].to, nType)
|
|
end
|
|
end
|
|
end
|
|
self:AddTimer(1, nTime - 0.2, function()
|
|
if callback ~= nil then
|
|
callback()
|
|
end
|
|
end, true, true, true)
|
|
end
|
|
function SoldierSandtableFxCtrl:PlayFxItem(go, from, to, nType)
|
|
if go == nil then
|
|
return
|
|
end
|
|
go:SetActive(true)
|
|
go.transform.position = from.position
|
|
local boomfx = go.transform:Find("P_Ecplor_Cbess")
|
|
boomfx.gameObject:SetActive(true)
|
|
local trail = go.transform:Find("P_Slide_Cbess")
|
|
local animaFunc = function()
|
|
local beginPos = from.position
|
|
local endPos = to.position
|
|
local controlPos = Vector3((beginPos.x + endPos.x) / 2.0, (beginPos.y + endPos.y) / 2.0, 0)
|
|
local wait = function()
|
|
local totalMoveTime = nTime - 0.2
|
|
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 = 100 * normalizedTime * 2
|
|
angleZ = angleZ <= 100 and angleZ or 100
|
|
go.transform.localEulerAngles = Vector3(0, 0, angleZ)
|
|
go.transform.position = Vector3(x, y, z)
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
end
|
|
go:SetActive(false)
|
|
self:BackUseNode(nType, go)
|
|
end
|
|
cs_coroutine.start(wait)
|
|
end
|
|
self:AddTimer(1, 0.2, function()
|
|
boomfx.gameObject:SetActive(false)
|
|
animaFunc()
|
|
end, true, true, true)
|
|
end
|
|
function SoldierSandtableFxCtrl:GetUnUseNode(nType)
|
|
if self.tbUnUseNode[nType] == nil then
|
|
return nil
|
|
end
|
|
local go = table.remove(self.tbUnUseNode[nType], 1)
|
|
if go == nil then
|
|
return nil
|
|
end
|
|
table.insert(self.tbUseNode[nType], go)
|
|
return go
|
|
end
|
|
function SoldierSandtableFxCtrl:BackUseNode(nType, go)
|
|
if self.tbUseNode[nType] == nil then
|
|
return nil
|
|
end
|
|
local index = table.indexof(self.tbUseNode[nType], go)
|
|
table.remove(self.tbUseNode[nType], index)
|
|
table.insert(self.tbUnUseNode[nType], go)
|
|
end
|
|
function SoldierSandtableFxCtrl:OnEvent_AAA()
|
|
end
|
|
return SoldierSandtableFxCtrl
|