2025-06-04 05:02:57 +08:00

141 lines
3.5 KiB
Plaintext

FunctionPurify = class("FunctionPurify")
function FunctionPurify.Me()
if nil == FunctionPurify.me then
FunctionPurify.me = FunctionPurify.new()
end
return FunctionPurify.me
end
function FunctionPurify:ctor()
self.timeTick = TimeTickManager.Me():CreateTick(0,100,self.RefreshFlagTime,self)
self:Reset()
end
function FunctionPurify:Reset()
self.running = false
self.monsters = {}
self.dropItems = {}
self.monsterPurifyFlag = {}
end
function FunctionPurify:MonsterNeedPurify(id)
return self.monsters[id] ~= nil
end
function FunctionPurify:AddDrops(item)
-- print("凈化延遲掉落",item.id)
local items = self.dropItems[item.sourceID]
if(items==nil) then
items = {}
self.dropItems[item.sourceID] = items
end
items[#items + 1] = item
end
function FunctionPurify:StartDarkCover(id)
local monster = SceneNpcProxy.Instance:Find(id)
if(monster) then
-- local effectCtrl = EffectHelper.PlayAt(ResourceIDHelper.IDEffectCommon(EffectMap.Maps.DarkLight),monster.roleAgent.gameObject.transform.position)
-- local simplePlayer = effectCtrl.effect:AddComponent(SimpleAnimatorPlayer)
-- self.monsters[id] = simplePlayer
-- simplePlayer.animatorHelper:PlayForce("darklight1",1)
end
end
function FunctionPurify:StartPurifyByServerSkill(data)
-- if(self.running) then return end
local monsters = {}
local hits = data.data.hitedTargets
for i=1,#hits do
monsters[#monsters+1] = hits[i].charid
end
-- if(data.data.number==SkillLogic.PHASE_NONE) then
-- else
self:StartPurify(monsters)
-- end
end
function FunctionPurify:StartPurify(monsters)
if(not monsters or #monsters==0) then return end
-- self.running = true
for i=1,#monsters do
self:StartPurifyMonster(monsters[i])
end
end
--嘗試凈化(播抖動動畫)
function FunctionPurify:TryPurifyMonster(id)
local simplePlayer = self.monsters[id]
if(simplePlayer) then
simplePlayer.animatorHelper:PlayForce("darklight2",1)
self:AddFlag(id)
end
end
--開始凈化(水晶凈化)
function FunctionPurify:StartPurifyMonster(id)
local data = self.monsterPurifyFlag[id]
if(data) then
data.confirmPurify = true
self:CheckCanRealPurify(id,data)
end
end
function FunctionPurify:AddFlag(id)
self.monsterPurifyFlag[id] = {time=0,confirmPurify=false}
self.timeTick:StartTick()
end
function FunctionPurify:CheckCanRealPurify(id,data)
if(data.confirmPurify and data.time>=3000) then
self:RealPurify(id)
end
end
function FunctionPurify:RealPurify(id)
local simplePlayer = self.monsters[id]
if(simplePlayer) then
self.monsterPurifyFlag[id] = nil
simplePlayer.animatorHelper.loopCountChangedListener = function (state, oldLoopCount, newLoopCount)
if(state:IsName("darklight3"))then
self:RemoveSimplePlayer(id)
self:StartDropMonsterItems(id)
self:RemoveMonster(id)
end
end
simplePlayer.animatorHelper:PlayForce("darklight3",1)
end
end
function FunctionPurify:StartDropMonsterItems(id)
if(self.dropItems[id]) then
FunctionSceneItemCommand.Me():DropItems(self.dropItems[id])
self.dropItems[id] = nil
end
end
function FunctionPurify:RemoveMonster(id)
SceneNpcProxy.Instance:RemoveSome({id})
end
function FunctionPurify:RemoveSimplePlayer(id)
local simplePlayer = self.monsters[id]
if(simplePlayer) then
GameObject.Destroy(simplePlayer.gameObject)
end
self.monsters[id] = nil
end
function FunctionPurify:RefreshFlagTime(delta)
local count = 0
for k,v in pairs(self.monsterPurifyFlag) do
count = count + 1
v.time = v.time + delta
self:CheckCanRealPurify(k,v)
end
if(count==0) then
self.timeTick:ClearTick()
end
end