local EventSystem = require('Event/EventSystem') local Base = require("Battle/Logic/Level/LevelItemFactory/LevelItem") local LevelItem_RandomScenePoint = class("LevelItem_RandomScenePoint", Base) function LevelItem_RandomScenePoint:initialize(data) Base.initialize(self,data) --二维数据[GroupIndex][PointIndex] self.groupIndexEntity = {} end function LevelItem_RandomScenePoint:OnActive() if Base.OnActive(self) then EventSystem.Regist(EventID.RandomScenePoint_BornOneCharacter, self.BornOneCharacter, self) EventSystem.Regist(EventID.RandomScenePoint_RemoveOneCharacter, self.RemoveOneCharacter, self) EventSystem.Dispatch(EventID.RandomScenePoint_OnActive, self.LevelItemID) return true end end function LevelItem_RandomScenePoint:BornOneCharacter(itemId, characterType, characterId, groupIndex, pointIndex) if itemId ~= self.LevelItemID then return end if groupIndex > #self.ItemData.ScenePointGroupList then return end if pointIndex > #self.ItemData.ScenePointGroupList[groupIndex] then return end local pointData = self.ItemData.ScenePointGroupList[groupIndex][pointIndex] EntityFactory.SetType_ID(characterType, characterId) EntityFactory.SetPos_Dir(pointData.Position, pointData.Rotation) EntityFactory.SetParams("BornItemID", self.LevelItemID) local entity = EntityFactory.DoCreateEntity() if not self.groupIndexEntity[groupIndex] then self.groupIndexEntity[groupIndex] = {} end self.groupIndexEntity[groupIndex][pointIndex] = entity EventSystem.Dispatch(EventID.RandomScenePoint_BornOneCharacterComplete, self.LevelItemID, groupIndex, pointIndex, entity) end function LevelItem_RandomScenePoint:RemoveOneCharacter(itemId, groupIndex, pointIndex) if itemId ~= self.LevelItemID then return end if groupIndex > #self.ItemData.ScenePointGroupList then return end if pointIndex > #self.ItemData.ScenePointGroupList[groupIndex] then return end if self.groupIndexEntity[groupIndex] and self.groupIndexEntity[groupIndex][pointIndex] then local removeEntity = self.groupIndexEntity[groupIndex][pointIndex] if removeEntity then SystemManager.OnUnload(removeEntity,true) self.groupIndexEntity[groupIndex][pointIndex] = nil end end end function LevelItem_RandomScenePoint:GetEntity(groupIndex, pointIndex) return self.groupIndexEntity[groupIndex][pointIndex] end function LevelItem_RandomScenePoint:OnDeactive() if Base.OnDeactive(self) then EventSystem.UnRegist(EventID.RandomScenePoint_BornOneCharacter, self.BornOneCharacter, self) EventSystem.UnRegist(EventID.RandomScenePoint_RemoveOneCharacter, self.RemoveOneCharacter, self) return true end end function LevelItem_RandomScenePoint:OnDestroy() Base.OnDestroy(self) self:DeleteAll(true) end function LevelItem_RandomScenePoint:DeleteAll() for __, groupEntity in pairs(self.groupIndexEntity) do for __, entity in pairs(groupEntity) do SystemManager.OnUnload(entity, true) end end self.groupIndexEntity = {} end return LevelItem_RandomScenePoint