local Base = require("Battle/Logic/Level/LevelItemFactory/LevelItem") local LevelItem_Convey = class("LevelItem_Convey", Base) local EventSystem = require('Event/EventSystem') local ColliderManager = require("Battle/Logic/Level/ColliderManager") local VisualObject = require("Battle/Expression/VisualObject") local PATH_EFFECT = ConstAssetPathConfig.PATH_EFFECT1 function LevelItem_Convey:initialize(data) Base.initialize(self,data) if data.ColliderType == LuaConst.LevelShapeType.Circle then self._colliderID = ColliderManager.CreateCircleCollider(data.ItemPos,data.Radius * data.Radius) elseif data.ColliderType == LuaConst.LevelShapeType.Square then self._colliderID = ColliderManager.CreateRectCollider(data.ItemPos,data.ItemDir,data.Length,data.Width) end ColliderManager.AddEnterEvent(self._colliderID,self.OnEnterConvey,self) end --region --***************生命周期***************-- function LevelItem_Convey:OnActive() if Base.OnActive(self) then ColliderManager.ActiveCollider(self._colliderID, LogicUpdateManager.ValidSyncEntityIter) local itemData = self.ItemData if not string.isNilOrEmpty(itemData.Effect) then local path = string.format(PATH_EFFECT,itemData.Effect) local px, pz = FP.tonumberV2(itemData.ItemPos) local dx, dz = FP.tonumberV2(itemData.ItemDir) self._trigger = VisualObject.CreateConveyEffectTrigger(ExpLevelManager.SceneObjParent,path,itemData.ShowRadius,itemData.Name) self._trigger:SetPositionAndDirection(dx, dz,px, 0, pz) end return true end end function LevelItem_Convey:OnDeactive() if Base.OnDeactive(self) then ColliderManager.DeActiveCollider(self._colliderID) if self._trigger then self._trigger:Dispose() self._trigger = nil end return true end end function LevelItem_Convey:OnDestroy() Base.OnDestroy(self) ColliderManager.DestroyCollider(self._colliderID) self._colliderID = nil end --endregion 生命周期 --region --***************事件相关***************-- function LevelItem_Convey:OnEnterConvey() if LevelManager.IsTown then if MDL.Team.IsTrainFollowing(LogicUpdateManager._curEntity) then --主城可以访问MDL, 可以访问主视角代码 --在主城里,处于火车跟随状态中,不进行Convey return end end EventSystem.Dispatch(EventID.Level_ConveyLevelByItem ,self.LevelItemID) end function LevelItem_Convey:DoAction(actionType, ...) Base.DoAction(self, actionType, ...) if actionType == LuaConst.LevelActionType.Convey_Active then self:OnActive() end end --endregion 事件相关 return LevelItem_Convey