local BaseObject = require "app/bf/unity/base_object" local EffectObject = class("EffectObject", BaseObject) local BF_EFFECT_HELPER = GConst.TYPEOF_UNITY_CLASS.BF_EFFECT_HELPER local abs = math.abs local DEFAULT_DELAY_TIME = 1 function EffectObject:ctor() self.timeScale = 1 end function EffectObject:initWithPrefab(assetPath, prefab) BaseObject.initWithPrefab(self, assetPath, prefab) self.effectHelper = self:getComponent(BF_EFFECT_HELPER) if self.effectHelper == nil then self.effectHelper = self:addComponent(BF_EFFECT_HELPER) end local animatorCount = self.effectHelper.AnimatorCount or 0 if animatorCount > 0 then self.animators = {} local animators = prefab:GetComponentsInChildren(GConst.TYPEOF_UNITY_CLASS.ANIMATOR, true) if animators then local len = animators.Length for i = 0, len - 1 do table.insert(self.animators, animators[i]) end end end end function EffectObject:play() self.effectHelper:Play() end -- 延迟播放 function EffectObject:playDelay(delayTime, hideBeforePlay) if delayTime <= 0 then self:play() return end if self._effectPlayScheduleId then self:unscheduleGlobal(self._effectPlayScheduleId) end if hideBeforePlay then self:setActive(false) end self._effectPlayScheduleId = self:performWithDelayGlobal(function() self._effectPlayScheduleId = nil if hideBeforePlay then self:setActive(true) end self:play() end, delayTime) return self._effectPlayScheduleId end function EffectObject:clear() if self._effectPlayScheduleId then self:unscheduleGlobal(self._effectPlayScheduleId) self._effectPlayScheduleId = nil end self.effectHelper:Clear() end function EffectObject:stop() if self._effectPlayScheduleId then self:unscheduleGlobal(self._effectPlayScheduleId) self._effectPlayScheduleId = nil end self.effectHelper:Stop() end function EffectObject:stopAndClear() if self._effectPlayScheduleId then self:unscheduleGlobal(self._effectPlayScheduleId) self._effectPlayScheduleId = nil end self.effectHelper:StopAndClear() end function EffectObject:pause() if self._effectPlayScheduleId then self:unscheduleGlobal(self._effectPlayScheduleId) self._effectPlayScheduleId = nil end self.effectHelper:Pause() end function EffectObject:setUIOrder(uiOrder) self.effectHelper:SetUIOrder(uiOrder) end function EffectObject:setSortingOrder(uiOrder, order) self.effectHelper:SetSortingOrder(uiOrder, order) end function EffectObject:changeSortingOrderToFudge(order, coefficient) self.effectHelper:ChangeSortingOrderToFudge(order, coefficient) end function EffectObject:initParticleSystemRendererList() self.effectHelper:InitParticleSystemRendererList() end function EffectObject:getDuration() return self.effectHelper.EffectDuration end function EffectObject:setTimeScale(timeScale) if abs(self.timeScale - timeScale) < 0.00001 then return end self.timeScale = timeScale self.effectHelper:SetTimeScale(timeScale) if self.animators then for k, v in ipairs(self.animators) do v.speed = timeScale end end end function EffectObject:setIsLoop(isLoop) self.isLoop = isLoop end function EffectObject:getIsLoop() return self.isLoop end function EffectObject:performDurationDelay(callback, diffDuration) if self.scheduleId then self:unscheduleGlobal(self.scheduleId) end local duration = self.effectHelper.EffectDuration if duration <= 0 then duration = DEFAULT_DELAY_TIME end duration = duration + (diffDuration or 0) duration = math.max(duration, 0) self.scheduleId = self:performWithDelayGlobal(function() self.scheduleId = nil callback() end, duration) return self.scheduleId end function EffectObject:setEulerAngles(x, y, z) if self.effectHelper then self.effectHelper:SetEulerAngles(x, y, z) else BaseObject.setEulerAngles(self, x, y, z) end end function EffectObject:setLocalEulerAngles(x, y, z) if self.effectHelper then self.effectHelper:SetLocalEulerAngles(x, y, z) else BaseObject.setLocalEulerAngles(self, x, y, z) end end function EffectObject:setLocalPosition(x, y, z) if self.effectHelper then self.effectHelper:SetLocalPosition(x, y, z) else BaseObject.setLocalPosition(self, x, y, z) end end function EffectObject:setPosition(x, y, z) if self.effectHelper then self.effectHelper:SetPosition(x, y, z) else BaseObject.setPosition(self, x, y, z) end end function EffectObject:setLocalScale(x, y, z) if self.effectHelper then self.effectHelper:SetLocalScale(x, y, z) else BaseObject.setLocalScale(self, x, y, z) end end function EffectObject:getIsEulerAnglesFlip() if self.effectHelper then return self.effectHelper.EulerAnglesFlip end return false end function EffectObject:setBattleScheduleId(id) self.battleScheduleId = id end function EffectObject:getBattleScheduleId() return self.battleScheduleId end function EffectObject:onDestroy() if self.scheduleId then self:unscheduleGlobal(self.scheduleId) self.scheduleId = nil end if self._effectPlayScheduleId then self:unscheduleGlobal(self._effectPlayScheduleId) self._effectPlayScheduleId = nil end BaseObject.onDestroy(self) self.effectHelper = nil self.animators = nil end return EffectObject