//When spawn a block, check if any monster already stores on this pos. private void HandleBlockSpawn(Block block) { //Room?? int blockKey = Block.GetBlockKey(block.Col, block.Row); List<MonsterRecord> recordList = monsterProxy.GetRecordBlockList(blockKey); if (recordList != null) { for (int i = 0; i < recordList.Count; ++i) { MonsterRecord record = recordList[i]; Monster monster = Monster.Create(record); InitMonsterInBlock(monster, record.WorldPosition.ToVector3()); } } else { int monsterCount = RandomUtils.Range(0, MazeDataManager.Instance.CurrentMazeData.MonsterMaxCount); for (int i = 0; i < monsterCount; ++i) { PositionScript birth = block.Script.GetRandomPosition(PositionType.Monster); if (birth != null) { Monster monster = Monster.Create(null); InitMonsterInBlock(monster, birth.transform.position); } } } }
private void HandleItemSpawn(Block block) { int blockKey = Block.GetBlockKey(block.Col, block.Row); List<ItemRecord> recordList = dropProxy.GetRecordList(blockKey); if (recordList != null) { for (int i = 0; i < recordList.Count; ++i) { ItemRecord record = recordList[i]; Item item = Item.Create(record); dropProxy.AddItem(item); } } }
public static Block Create(MazeNode node) { if (node == null) { BaseLogger.Log("null node"); return null; } ResourceManager resManager = ResourceManager.Instance; Block block = new Block(); block.Uid = Guid.NewGuid().ToString(); PassageType passageType = MazeUtil.GetPassageType(node); if (node is MazeRoom) { MazeRoom room = node as MazeRoom; block.Data = room.Data; } else { block.Data = BlockDataManager.Instance.GetRandomPassageData(passageType); } block.Script = resManager.LoadAsset<BlockScript>(ObjectType.GameObject, block.Data.GetResPath()); block.Script.Uid = block.Uid; block.Script.transform.parent = RootTransform.Instance.BlockRoot; if (node is MazeRoom) { MazeRoom room = node as MazeRoom; block.SetRotation(room.Direction); block.SetPosition(room.Col, room.Row); } else { block.SetPosition(node.Col, node.Row); int direction = MazeUtil.GetPassageDirection(node, passageType); block.SetRotation(direction); block.InitRandomDecorations(); } block.ExplorationType = node.ExplorationType; return block; }
private void HandleBlockSpawn(Block block) { int explorationCount = RandomUtils.Range(0, MazeDataManager.Instance.CurrentMazeData.ExplorationMaxCount); PositionScript birth = null; if (block.ExplorationType != ExplorationType.Common) { birth = block.Script.GetGlobalPosition(PositionType.Exploration); List<object> paramList = new List<object>(); paramList.Add(TransporterDirectionType.Forward); CreateExploration(block.ExplorationType, birth, paramList); explorationCount--; } for (int i = 0; i < explorationCount; ++i) { birth = block.Script.GetRandomPosition(PositionType.Exploration); CreateExploration(ExplorationType.Common, birth); } }
private void HandleItemDespawn(Block block) { List<Item> toDeleteDropList = new List<Item>(); dropProxy.IterateDrops((Item item) => { Vector2 itemPos = Maze.Instance.GetMazePosition(item.WorldPosition); if (block.Contains((int)itemPos.x, (int)itemPos.y)) { toDeleteDropList.Add(item); } }); int blockKey = Block.GetBlockKey(block.Col, block.Row); dropProxy.InitRecordList(blockKey); for (int i = 0; i < toDeleteDropList.Count; ++i) { Item drop = toDeleteDropList[i]; dropProxy.HideItem(drop.Uid); Item.Recycle(drop); } }
public static void Recycle(Block block) { if (block != null) { block.Data = null; block.Script.Reset(); ResourceManager.Instance.RecycleAsset(block.Script.gameObject); block.Script = null; } else { BaseLogger.Log("Recyle a null block!"); } }
private void OnDisposeBlock(Block block) { block.Script.gameObject.isStatic = false; DispatchNotification(NotificationEnum.BLOCK_DESPAWN, block); }
private void OnInitBlock(Block block) { block.Script.gameObject.isStatic = true; DispatchNotification(NotificationEnum.BLOCK_SPAWN, block); }
//When a block despawns, remove all monsters on it from the monsterDic, and store them in the recordDic private void HandleBlockDespawn(Block block) { List<Monster> toDeleteMonsterList = new List<Monster>(); monsterProxy.IterateMonstersInBlocks((Monster monster) => { Vector2 monsterPos = Maze.Instance.GetMazePosition(monster.WorldPosition); if (block.Contains((int)monsterPos.x, (int)monsterPos.y)) { toDeleteMonsterList.Add(monster); } }); int blockKey = Block.GetBlockKey(block.Col, block.Row); monsterProxy.InitRecordBlockList(blockKey); for (int i = 0; i < toDeleteMonsterList.Count; ++i) { Monster monster = toDeleteMonsterList[i]; battleProxy.RemoveMonster(monster.Uid); if (monster.Info.IsAlive) { monsterProxy.HideMonsterInBlock(monster.Uid); } else { monsterProxy.RemoveMonsterInBlock(monster.Uid); } Monster.Recycle(monster); } }
private void HandleNPCSpawn(Block block) { int npcCount = RandomUtils.Range(0, MazeDataManager.Instance.CurrentMazeData.MonsterMaxCount); for (int i = 0; i < npcCount; ++i) { PositionScript birth = block.Script.GetRandomPosition(PositionType.NPC); if (birth != null) { NPCData npcData = NPCDataManager.Instance.GetRandomNPCData(NPCAppearScene.Maze); NPCEventData eventData = NPCDataManager.Instance.GetRandomEventData(NPCAppearScene.Maze); NPC npc = NPC.Create(npcData.Kid, eventData.Kid); npc.SetPosition(birth.transform.position); npc.SetRotation(birth.transform.eulerAngles.y); npcProxy.AddNPC(npc); } } }
private void HandleNPCDespawn(Block block) { List<NPC> npcList = npcProxy.GetAllNPCs(); float blockSize = MazeDataManager.Instance.CurrentMazeData.BlockSize; int count = npcList.Count; for (int i = 0; i < count; ++i) { NPC npc = npcList[i]; int col, row; MazeUtil.GetMazePosition(npc.WorldPosition, blockSize, out col, out row); if (block.Contains(col, row)) { npcProxy.RemoveNPC(npc.Uid); NPC.Recycle(npc); } } }
private void HandleBlockDespawn(Block block) { List<Exploration> toDeleteList = new List<Exploration>(); explorationProxy.IterateInBlocks((Exploration expl) => { Vector2 pos = Maze.Instance.GetMazePosition(expl.WorldPosition); if (block.Contains((int)pos.x, (int)pos.y)) { toDeleteList.Add(expl); } }); for (int i = 0; i < toDeleteList.Count; ++i) { Exploration expl = toDeleteList[i]; explorationProxy.RemoveInBlock(expl.Uid); Exploration.Recycle(expl); } }