82 lines
2.6 KiB
Lua
82 lines
2.6 KiB
Lua
|
local XGoldenMinerBaseObj = require("XEntity/XGoldenMiner/Object/XGoldenMinerBaseObj")
|
||
|
|
||
|
--黄金矿工炸弹
|
||
|
local XGoldenMinerBoom = XClass(XGoldenMinerBaseObj, "XGoldenMinerBoom")
|
||
|
|
||
|
function XGoldenMinerBoom:Ctor()
|
||
|
self.IsNotHideInputHandle = false
|
||
|
self.BoomCollider = self.Transform:GetComponent("CircleCollider2D")
|
||
|
if not self:IsBoomCollider() then
|
||
|
return
|
||
|
end
|
||
|
self.BoomCollider.enabled = false
|
||
|
end
|
||
|
|
||
|
function XGoldenMinerBoom:InitTriggerBoomFunc(triggerBoomFunc)
|
||
|
self.TriggerBoomFunc = triggerBoomFunc
|
||
|
end
|
||
|
|
||
|
function XGoldenMinerBoom:OnTriggerEnter(collider)
|
||
|
--触发对象不是钩爪
|
||
|
local goldenMinerStoneId = tonumber(collider.gameObject.name)
|
||
|
if XTool.IsNumberValid(goldenMinerStoneId) then
|
||
|
local stoneType = XGoldenMinerConfigs.GetStoneType(goldenMinerStoneId)
|
||
|
if stoneType == XGoldenMinerConfigs.StoneType.Boom and not XTool.UObjIsNil(self.GameObject) then
|
||
|
self.IsNotHideInputHandle = true
|
||
|
self:SetObjToTriggerParent(true)
|
||
|
end
|
||
|
return
|
||
|
end
|
||
|
|
||
|
if not self:IsBoomCollider() or XTool.UObjIsNil(collider.transform:GetComponent("Rigidbody2D")) or not self:IsActiveGoInputHandler() then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
self.IsNotHideInputHandle = true
|
||
|
|
||
|
if self.TrigerCallback then
|
||
|
self.TrigerCallback(self)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XGoldenMinerBoom:SetObjToTriggerParent(isLoadEffect)
|
||
|
self.IsNotHideInputHandle = true
|
||
|
self.BoomCollider.enabled = true
|
||
|
self.BoomCollider.isTrigger = true
|
||
|
|
||
|
local destroyTime = isLoadEffect and 0.5 or 0.05 --需要加载爆炸特效时延迟销毁时间加长
|
||
|
if isLoadEffect then
|
||
|
local effect = XGoldenMinerConfigs.GetStoneCatchEffect(self:GetId())
|
||
|
self:LoadResource(self.Transform, effect)
|
||
|
end
|
||
|
|
||
|
self:StopDestroyTimer()
|
||
|
self.DestroyTime = XScheduleManager.ScheduleForeverEx(function()
|
||
|
destroyTime = destroyTime - CS.UnityEngine.Time.deltaTime
|
||
|
if not XTool.UObjIsNil(self.GameObject) and destroyTime <= 0 then
|
||
|
XUiHelper.Destroy(self.GameObject)
|
||
|
self:StopDestroyTimer()
|
||
|
end
|
||
|
end, 0)
|
||
|
end
|
||
|
|
||
|
function XGoldenMinerBoom:SetGoInputHandlerActive(isActive)
|
||
|
XGoldenMinerBoom.Super.SetGoInputHandlerActive(self, self.IsNotHideInputHandle or isActive)
|
||
|
end
|
||
|
|
||
|
function XGoldenMinerBoom:IsBoomCollider()
|
||
|
if XTool.UObjIsNil(self.BoomCollider) then
|
||
|
XLog.Error("炸弹未找到CircleCollider2D组件")
|
||
|
return false
|
||
|
end
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
function XGoldenMinerBoom:StopDestroyTimer()
|
||
|
if self.DestroyTime then
|
||
|
XScheduleManager.UnSchedule(self.DestroyTime)
|
||
|
self.DestroyTime = nil
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return XGoldenMinerBoom
|