local Base = require("Battle/Logic/Level/LevelItemFactory/LevelItem") local LevelItem_Anchor = class("LevelItem_Anchor", Base) local EventSystem = require 'Event/EventSystem' function LevelItem_Anchor:initialize(data) Base.initialize(self,data) self.conditionTree = ConditionManager.GetConditionDataTree(data.ConditionStr) self._entityIDList = {} -- 此元素给哪些entity添加过锚点 end --region --***************生命周期***************-- function LevelItem_Anchor:OnActive() if Base.OnActive(self) then for i,entity in ipairs(LogicUpdateManager.EntityList_Sync) do self:AddAnchor(entity) end EventSystem.Regist(EventID.Level_OnCreatePlayerAllEntitys, self.OnAddNewFighter, self) -- 如果有后续出生的玩家也要给其加上锚点 EventSystem.Regist(EventID.Level_SwitchHero, self.OnSwitchHero, self) -- 关卡事件换成策划要求的固定阵容战斗 return true end end function LevelItem_Anchor:AddAnchor(entity) if not ConditionManager.MeetCondition(entity,self.conditionTree) then return end local itemData = self.ItemData local limitRadius = FP.tonumberV1(itemData.Radius) local mode = itemData.Mode -- LuaConst.EPosAnchorDistanceMode entity.components.move:AddPosAnchorByLevel(itemData.ItemPos, limitRadius, self.LevelItemID, mode) table.insert(self._entityIDList,entity.EntityID) end function LevelItem_Anchor:OnAddNewFighter(playerID) local heroEntities = LevelPlayerManager.GetPlayerEntitysByPlayerIDInRoom(playerID) for i,entity in ipairs(heroEntities) do self:AddAnchor(entity) end end function LevelItem_Anchor:OnSwitchHero(type, toEntity) if type == LuaConst.SwitchHeroType.LevelAction then-- 只有在非同步玩法才会有执行到这 local heroEntities = LevelPlayerManager.GetPlayerEntitysByPlayerIDInRoom(toEntity:GetPlayerID()) for i,entity in ipairs(heroEntities) do self:AddAnchor(entity) end end end function LevelItem_Anchor:OnDeactive() if Base.OnDeactive(self) then for _,eid in ipairs(self._entityIDList) do local entity = LogicUpdateManager._entityDic[eid] if entity then entity.components.move:RemovePosAnchorByLevel(self.LevelItemID) end end EventSystem.UnRegist(EventID.Level_OnCreatePlayerAllEntitys, self.OnAddNewFighter, self) EventSystem.UnRegist(EventID.Level_SwitchHero, self.OnSwitchHero, self) return true end end --endregion 生命周期 return LevelItem_Anchor