Beispiel #1
0
		//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);
					}
				}
			}
		}
Beispiel #2
0
		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);
				}
			}
		}
Beispiel #3
0
		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);
			}
		}
Beispiel #5
0
		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);
			}
		}
Beispiel #6
0
		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!");
			}
		}
Beispiel #7
0
		private void OnDisposeBlock(Block block)
		{
			block.Script.gameObject.isStatic = false;
            DispatchNotification(NotificationEnum.BLOCK_DESPAWN, block);
		}
Beispiel #8
0
		private void OnInitBlock(Block block)
		{
			block.Script.gameObject.isStatic = true;
            DispatchNotification(NotificationEnum.BLOCK_SPAWN, block);
		}
Beispiel #9
0
		//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);
			}
		}
Beispiel #10
0
		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);
				}
			}
		}
Beispiel #11
0
		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);
            }
		}