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
This commit is contained in:
@@ -0,0 +1,395 @@
|
||||
local GoldenSpyFloorCtrl = class("GoldenSpyFloorCtrl", BaseCtrl)
|
||||
local LevelPrefabPath = "UI_Activity/_400008/LevelPrefab/"
|
||||
GoldenSpyFloorCtrl._mapNodeConfig = {
|
||||
HookCtrl = {
|
||||
sNodeName = "HookRoot",
|
||||
sCtrlName = "Game.UI.Activity.GoldenSpy.GoldenSpyHookCtrl"
|
||||
},
|
||||
PrefabRoot = {
|
||||
sNodeName = "PrefabRoot",
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
floorItemRoot = {
|
||||
sNodeName = "floorItemRoot",
|
||||
sComponentName = "RectTransform"
|
||||
}
|
||||
}
|
||||
local itemCtrlPath = "Game.UI.Activity.GoldenSpy."
|
||||
local ItemHitAreaType = {
|
||||
[1] = AllEnum.GoldenSpyHitAreaType.Rectangle,
|
||||
[2] = AllEnum.GoldenSpyHitAreaType.Rectangle,
|
||||
[3] = AllEnum.GoldenSpyHitAreaType.Circle,
|
||||
[4] = AllEnum.GoldenSpyHitAreaType.Rectangle,
|
||||
[5] = AllEnum.GoldenSpyHitAreaType.Rectangle,
|
||||
[6] = AllEnum.GoldenSpyHitAreaType.Rectangle,
|
||||
[7] = AllEnum.GoldenSpyHitAreaType.Rectangle,
|
||||
[8] = AllEnum.GoldenSpyHitAreaType.Rectangle,
|
||||
[9] = AllEnum.GoldenSpyHitAreaType.Circle,
|
||||
[10] = AllEnum.GoldenSpyHitAreaType.Rectangle
|
||||
}
|
||||
function GoldenSpyFloorCtrl:Awake()
|
||||
end
|
||||
function GoldenSpyFloorCtrl:Init(levelId, floorId, levelCtrl)
|
||||
self.levelId = levelId
|
||||
self.floorId = floorId
|
||||
self.levelCtrl = levelCtrl
|
||||
if self.prefab ~= nil then
|
||||
for i = #self.tbItem, 1, -1 do
|
||||
self:UnbindCtrlByNode(self.tbItem[i].Ctrl)
|
||||
end
|
||||
for i = #self.tbTrap, 1, -1 do
|
||||
self:UnbindCtrlByNode(self.tbTrap[i].Ctrl)
|
||||
end
|
||||
for i = #self.tbNeedRemoveItem, 1, -1 do
|
||||
self:UnbindCtrlByNode(self.tbNeedRemoveItem[i].Ctrl)
|
||||
end
|
||||
destroy(self.prefab)
|
||||
end
|
||||
self.tbItem = {}
|
||||
self.tbNeedRemoveItem = {}
|
||||
self.tbTrap = {}
|
||||
self.prefab = nil
|
||||
local floorCfg = ConfigTable.GetData("GoldenSpyFloor", floorId)
|
||||
if floorCfg == nil then
|
||||
return
|
||||
end
|
||||
local nPrefabName = self.levelCtrl.GoldenSpyLevelData:GetLevelPrefabName()
|
||||
local goLevelPerfab = self:LoadAsset(LevelPrefabPath .. nPrefabName .. ".prefab")
|
||||
self.prefab = instantiate(goLevelPerfab, self._mapNode.floorItemRoot)
|
||||
self.prefab.transform.localPosition = Vector3.zero
|
||||
self.prefab.transform.localScale = Vector3.one
|
||||
self.prefab.transform.localRotation = Quaternion.identity
|
||||
self:InitItem()
|
||||
self:InitRandomBuff()
|
||||
self:InitTrap()
|
||||
self.bInvincible = false
|
||||
self._mapNode.HookCtrl:Init(self.levelId, self.floorId, self, self.levelCtrl.GoldenSpyLevelData, self.levelCtrl.GoldenSpyFloorData)
|
||||
end
|
||||
function GoldenSpyFloorCtrl:InitItem()
|
||||
if self.prefab == nil then
|
||||
return
|
||||
end
|
||||
local itemRoot = self.prefab.transform:Find("ItemRoot")
|
||||
if itemRoot == nil then
|
||||
return
|
||||
end
|
||||
local levelCfg = ConfigTable.GetData("GoldenSpyLevel", self.levelId)
|
||||
local nChildCount = itemRoot.transform.childCount
|
||||
for i = 1, nChildCount do
|
||||
local child = itemRoot.transform:GetChild(i - 1)
|
||||
local nItemId = tonumber(child.gameObject.name)
|
||||
local itemCfg = ConfigTable.GetData("GoldenSpyItem", nItemId)
|
||||
if itemCfg ~= nil then
|
||||
local itemCtrl = self:BindCtrlByNode(child.gameObject, itemCtrlPath .. itemCfg.luaCtrl)
|
||||
itemCtrl:Init()
|
||||
itemCtrl:SetData({
|
||||
nUid = #self.tbItem + i,
|
||||
nItemId = nItemId,
|
||||
nHitAreaType = ItemHitAreaType[itemCfg.ItemType]
|
||||
}, self, levelCfg.ConfigId)
|
||||
table.insert(self.tbItem, {Ctrl = itemCtrl})
|
||||
self.levelCtrl.GoldenSpyFloorData:SetItem(nItemId)
|
||||
end
|
||||
end
|
||||
end
|
||||
function GoldenSpyFloorCtrl:InitRandomBuff()
|
||||
local levelCfg = ConfigTable.GetData("GoldenSpyLevel", self.levelId)
|
||||
if levelCfg == nil then
|
||||
return
|
||||
end
|
||||
if levelCfg.LevelType ~= GameEnum.GoldenSpyLevelType.Random then
|
||||
return
|
||||
end
|
||||
local floorCfg = ConfigTable.GetData("GoldenSpyFloor", self.floorId)
|
||||
if floorCfg == nil then
|
||||
return
|
||||
end
|
||||
local buffRandomRoot = self.prefab.transform:Find("BuffRandomRoot")
|
||||
if buffRandomRoot == nil then
|
||||
return
|
||||
end
|
||||
local randomCount = floorCfg.BuffCardCount
|
||||
local nChildCount = buffRandomRoot.childCount
|
||||
local tbAllBuffPrefab = {}
|
||||
for i = 1, nChildCount do
|
||||
local child = buffRandomRoot.transform:GetChild(i - 1)
|
||||
table.insert(tbAllBuffPrefab, child)
|
||||
child.gameObject:SetActive(false)
|
||||
end
|
||||
if randomCount > nChildCount then
|
||||
return
|
||||
end
|
||||
local randomIndex = math.random(1, nChildCount)
|
||||
for i = 1, randomCount do
|
||||
local buff = tbAllBuffPrefab[randomIndex]
|
||||
buff.gameObject:SetActive(true)
|
||||
local nItemId = tonumber(buff.gameObject.name)
|
||||
local itemCfg = ConfigTable.GetData("GoldenSpyItem", nItemId)
|
||||
if itemCfg ~= nil then
|
||||
local buffCtrl = self:BindCtrlByNode(buff.gameObject, itemCtrlPath .. itemCfg.luaCtrl)
|
||||
buffCtrl:Init()
|
||||
buffCtrl:SetData({
|
||||
nUid = i,
|
||||
nItemId = nItemId,
|
||||
nHitAreaType = ItemHitAreaType[itemCfg.ItemType]
|
||||
}, self, levelCfg.ConfigId)
|
||||
table.insert(self.tbItem, {Ctrl = buffCtrl})
|
||||
randomIndex = randomIndex % nChildCount + 1
|
||||
self.levelCtrl.GoldenSpyFloorData:SetItem(nItemId)
|
||||
end
|
||||
end
|
||||
end
|
||||
function GoldenSpyFloorCtrl:InitTrap()
|
||||
if self.prefab == nil then
|
||||
return
|
||||
end
|
||||
local trapRoot = self.prefab.transform:Find("TrapRoot")
|
||||
if trapRoot == nil then
|
||||
return
|
||||
end
|
||||
local nChildCount = trapRoot.transform.childCount
|
||||
for i = 1, nChildCount do
|
||||
local child = trapRoot.transform:GetChild(i - 1)
|
||||
local trapId = tonumber(child.gameObject.name)
|
||||
local trapCfg = ConfigTable.GetData("GoldenSpyObstacle", trapId)
|
||||
if trapCfg ~= nil then
|
||||
local trapCtrl = self:BindCtrlByNode(child.gameObject, itemCtrlPath .. trapCfg.luaCtrl)
|
||||
trapCtrl:Init()
|
||||
trapCtrl:SetData({nTrapId = trapId}, self)
|
||||
table.insert(self.tbTrap, {Ctrl = trapCtrl})
|
||||
end
|
||||
end
|
||||
end
|
||||
function GoldenSpyFloorCtrl:StartFloor()
|
||||
self.bStartFloor = true
|
||||
local hookCtrl = self._mapNode.HookCtrl
|
||||
hookCtrl:StartSwing()
|
||||
for _, v in ipairs(self.tbItem) do
|
||||
v.Ctrl:StartFloor()
|
||||
end
|
||||
for _, v in ipairs(self.tbTrap) do
|
||||
if v.Ctrl ~= nil then
|
||||
v.Ctrl:StartFloor()
|
||||
end
|
||||
end
|
||||
end
|
||||
function GoldenSpyFloorCtrl:FinishFloor()
|
||||
self.bStartFloor = false
|
||||
self:Exit()
|
||||
end
|
||||
function GoldenSpyFloorCtrl:GetHookEndPos()
|
||||
return self._mapNode.HookCtrl:GetHookEndWorldPosition()
|
||||
end
|
||||
function GoldenSpyFloorCtrl:GetHookEndPosInRectLocal(targetRect)
|
||||
if targetRect == nil or targetRect:IsNull() then
|
||||
return nil
|
||||
end
|
||||
local hookCtrl = self._mapNode.HookCtrl
|
||||
if hookCtrl == nil then
|
||||
return nil
|
||||
end
|
||||
local hookPos = hookCtrl:GetHookEndWorldPosition()
|
||||
local hookRootTr = hookCtrl.gameObject.transform
|
||||
local posInCommon = hookRootTr:TransformPoint(hookPos)
|
||||
return targetRect:InverseTransformPoint(posInCommon)
|
||||
end
|
||||
function GoldenSpyFloorCtrl:GetHookRadius()
|
||||
return self.levelCtrl:GetHookRadius()
|
||||
end
|
||||
function GoldenSpyFloorCtrl:ResumeHookSwing()
|
||||
local hookCtrl = self._mapNode.HookCtrl
|
||||
if hookCtrl and hookCtrl.ResumeSwing then
|
||||
hookCtrl:ResumeSwing(true)
|
||||
end
|
||||
end
|
||||
function GoldenSpyFloorCtrl:Shoot(nSpeed, nRadius, nFactor, onRetractComplete, onCatched, onCatchedComplete)
|
||||
local hookCtrl = self._mapNode.HookCtrl
|
||||
if not hookCtrl or not hookCtrl:IsSwinging() then
|
||||
return
|
||||
end
|
||||
hookCtrl:PauseSwing()
|
||||
self.bInvincible = false
|
||||
hookCtrl:StartExtend(nSpeed, nRadius, nFactor, function()
|
||||
if onRetractComplete then
|
||||
onRetractComplete()
|
||||
end
|
||||
end, function(itemCtrl)
|
||||
if onCatched then
|
||||
onCatched(itemCtrl)
|
||||
end
|
||||
if itemCtrl:GetItemCfg().ItemType == GameEnum.GoldenSpyItem.Boom then
|
||||
self:RemoveItem(itemCtrl)
|
||||
return
|
||||
end
|
||||
self.catchedItem = itemCtrl
|
||||
end, function(itemCtrl)
|
||||
if itemCtrl == nil or itemCtrl:GetItemCfg().ItemType == GameEnum.GoldenSpyItem.Boom then
|
||||
return
|
||||
end
|
||||
for i = #self.tbItem, 1, -1 do
|
||||
if self.tbItem[i].Ctrl == itemCtrl then
|
||||
table.insert(self.tbNeedRemoveItem, self.tbItem[i])
|
||||
table.remove(self.tbItem, i)
|
||||
break
|
||||
end
|
||||
end
|
||||
self.catchedItem = nil
|
||||
self.bInvincible = false
|
||||
if onCatchedComplete then
|
||||
onCatchedComplete(itemCtrl)
|
||||
end
|
||||
end)
|
||||
end
|
||||
function GoldenSpyFloorCtrl:RemoveItem(itemCtrl)
|
||||
local bDelSuccess = false
|
||||
for i = #self.tbItem, 1, -1 do
|
||||
if self.tbItem[i].Ctrl == itemCtrl then
|
||||
table.insert(self.tbNeedRemoveItem, self.tbItem[i])
|
||||
table.remove(self.tbItem, i)
|
||||
bDelSuccess = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if bDelSuccess then
|
||||
self.levelCtrl.GoldenSpyFloorData:DeleteItem(itemCtrl:GetItemCfg().Id)
|
||||
end
|
||||
end
|
||||
function GoldenSpyFloorCtrl:DropItem()
|
||||
if self.catchedItem == nil then
|
||||
return
|
||||
end
|
||||
local hookCtrl = self._mapNode.HookCtrl
|
||||
hookCtrl:DropItem()
|
||||
self.levelCtrl:DropItem()
|
||||
self.catchedItem.gameObject.transform.parent = self.catchedItem:GetParent()
|
||||
self.catchedItem = nil
|
||||
end
|
||||
function GoldenSpyFloorCtrl:SetHookIsInvincible(bInvincible)
|
||||
self.bInvincible = bInvincible
|
||||
end
|
||||
function GoldenSpyFloorCtrl:GetHookIsInvincible()
|
||||
return self.bInvincible
|
||||
end
|
||||
function GoldenSpyFloorCtrl:GetHookHitArea()
|
||||
local hookCtrl = self._mapNode.HookCtrl
|
||||
if hookCtrl and hookCtrl.GetHookHitArea then
|
||||
return hookCtrl:GetHookHitArea()
|
||||
end
|
||||
return nil
|
||||
end
|
||||
function GoldenSpyFloorCtrl:SubTime(nTime)
|
||||
self.levelCtrl:SubTime(nTime)
|
||||
end
|
||||
function GoldenSpyFloorCtrl:DoStartRetract()
|
||||
self.levelCtrl:StartRetract()
|
||||
end
|
||||
function GoldenSpyFloorCtrl:StartRetract(finishCallback)
|
||||
local hookCtrl = self._mapNode.HookCtrl
|
||||
if hookCtrl and hookCtrl.StartRetract then
|
||||
hookCtrl:StartRetract(self.levelCtrl:GetHookBaseSpeed(), function()
|
||||
self:ResumeHookSwing()
|
||||
if finishCallback then
|
||||
finishCallback()
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
function GoldenSpyFloorCtrl:StartBoom(useCallback, finishCallback)
|
||||
if self.catchedItem == nil then
|
||||
return false
|
||||
end
|
||||
if useCallback then
|
||||
useCallback()
|
||||
end
|
||||
self.catchedItem:OnSkill_Boom(function()
|
||||
self:RemoveItem(self.catchedItem)
|
||||
self.catchedItem = nil
|
||||
self._mapNode.HookCtrl:DropItem()
|
||||
self:StartRetract(finishCallback)
|
||||
end)
|
||||
return true
|
||||
end
|
||||
function GoldenSpyFloorCtrl:CheckHasFrozenItem()
|
||||
for _, v in ipairs(self.tbItem) do
|
||||
local itemCfg = v.Ctrl:GetItemCfg()
|
||||
if itemCfg.ItemType == GameEnum.GoldenSpyItem.Companion or itemCfg.ItemType == GameEnum.GoldenSpyItem.Patrol then
|
||||
return true
|
||||
end
|
||||
end
|
||||
if #self.tbTrap > 0 then
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
function GoldenSpyFloorCtrl:StartFrozen()
|
||||
for _, v in ipairs(self.tbItem) do
|
||||
if v.Ctrl ~= nil and v.Ctrl ~= self.catchedItem then
|
||||
v.Ctrl:OnSkill_Frozen()
|
||||
end
|
||||
end
|
||||
for _, v in ipairs(self.tbTrap) do
|
||||
if v.Ctrl ~= nil then
|
||||
v.Ctrl:OnSkill_Frozen()
|
||||
end
|
||||
end
|
||||
end
|
||||
function GoldenSpyFloorCtrl:StopFrozen()
|
||||
for _, v in ipairs(self.tbItem) do
|
||||
if v.Ctrl ~= nil and v.Ctrl ~= self.catchedItem then
|
||||
v.Ctrl:OnSkill_Frozen_Resume()
|
||||
end
|
||||
end
|
||||
for _, v in ipairs(self.tbTrap) do
|
||||
if v.Ctrl ~= nil then
|
||||
v.Ctrl:OnSkill_Frozen_Resume()
|
||||
end
|
||||
end
|
||||
end
|
||||
function GoldenSpyFloorCtrl:Pause()
|
||||
self._mapNode.HookCtrl:Pause()
|
||||
for _, v in ipairs(self.tbItem) do
|
||||
if v.Ctrl ~= nil then
|
||||
v.Ctrl:Pause()
|
||||
end
|
||||
end
|
||||
for _, v in ipairs(self.tbTrap) do
|
||||
if v.Ctrl ~= nil then
|
||||
v.Ctrl:Pause()
|
||||
end
|
||||
end
|
||||
end
|
||||
function GoldenSpyFloorCtrl:Exit()
|
||||
if self.prefab ~= nil then
|
||||
for i = #self.tbItem, 1, -1 do
|
||||
self.tbItem[i].Ctrl:FinishFloor()
|
||||
self:UnbindCtrlByNode(self.tbItem[i].Ctrl)
|
||||
end
|
||||
for i = #self.tbTrap, 1, -1 do
|
||||
self.tbTrap[i].Ctrl:FinishFloor()
|
||||
self:UnbindCtrlByNode(self.tbTrap[i].Ctrl)
|
||||
end
|
||||
for i = #self.tbNeedRemoveItem, 1, -1 do
|
||||
self:UnbindCtrlByNode(self.tbNeedRemoveItem[i].Ctrl)
|
||||
end
|
||||
destroy(self.prefab)
|
||||
end
|
||||
self.tbItem = {}
|
||||
self.tbTrap = {}
|
||||
self.tbNeedRemoveItem = {}
|
||||
self.prefab = nil
|
||||
self._mapNode.HookCtrl:Exit()
|
||||
end
|
||||
function GoldenSpyFloorCtrl:Continue()
|
||||
self._mapNode.HookCtrl:Continue()
|
||||
for _, v in ipairs(self.tbItem) do
|
||||
if v.Ctrl ~= nil then
|
||||
v.Ctrl:Resume()
|
||||
end
|
||||
end
|
||||
for _, v in ipairs(self.tbTrap) do
|
||||
if v.Ctrl ~= nil then
|
||||
v.Ctrl:Resume()
|
||||
end
|
||||
end
|
||||
end
|
||||
return GoldenSpyFloorCtrl
|
||||
Reference in New Issue
Block a user