public void GenerateMap() { Map = new DungeonMap(); int roomCount = Random.Range(Constants.FT_RoomCountMax, Constants.FT_RoomCountMin); for(int i=0; i < roomCount; i++) { RoomClass room = new RoomClass(); room.Background = RoomSprites[Random.Range(0, RoomSprites.Length - 1)]; room.Type = RoomTypes[Random.Range(0, RoomTypes.Length - 1)]; room.Furniture = SetRoomFurniture(room); if (room.Type == FloodedTempleRoomType.Shop) { for(int j=0; j < Constants.FT_ItemsPerShop; j++) { room.ActiveItems.Add(ItemCollection.GetRandomItem()); } } else if (room.Type == FloodedTempleRoomType.Rest) { room.ActiveItems.Add(new FakeAltar()); } else if (room.Type == FloodedTempleRoomType.Training) { room.Enemy = FT_EnemyCollection.GetRandomEnemy(); } Map.Compartments.Add(room); if (i < roomCount - 1) { PassageClass passage = new PassageClass(); passage.Tiles = new PassageTile[Random.Range(Constants.FT_PassageTileLengthMin, Constants.FT_PassageTileLengthMax)]; AbActiveItem[] activeItems = new AbActiveItem[passage.Tiles.Length * 4]; //#todo generate doors activeItems[1] = new FakeAltar(); //activeItems[1].Action = previous; activeItems[activeItems.Length-2] = new FakeAltar(); //activeItems[activeItems.Length-2].Action = next; for (int j = 3; j < activeItems.Length-2; j++) { if (Random.Range(1, 100) <= Constants.FT_AltarChance) { activeItems[j] = FT_AltarCollection.GetRandomAltar(); j += Constants.FT_SameEventsMinDistance - 1; } } AbEnemy[] enemies = new AbEnemy[passage.Tiles.Length * 4]; for (int j = 2; j < enemies.Length; j++) { if (Random.Range(1, 100) <= Constants.FT_AltarChance) { if (activeItems[j]!=null) { enemies[j-1] = FT_EnemyCollection.GetRandomEnemy(); } else { enemies[j] = FT_EnemyCollection.GetRandomEnemy(); } j += Constants.FT_SameEventsMinDistance - 1; } } for (int j = 0; j < passage.Tiles.Length; j++) { PassageTile passageTile = new PassageTile(); passageTile.Background = PassageSprites[Random.Range(0, PassageSprites.Length - 1)]; for(int k = 0; k < Constants.FT_EventSlotsPerPassageTile; k++) { passageTile.ActiveItems[k] = activeItems[j * 4 + k]; } for (int k = 0; k < Constants.FT_EventSlotsPerPassageTile; k++) { passageTile.Enemies[k] = enemies[j * 4 + k]; } passage.Tiles[j] = passageTile; } Map.Compartments.Add(passage); } } }
public void GenerateMap() { Map = new DungeonMap(); int roomCount = Random.Range(Constants.FT_RoomCountMax, Constants.FT_RoomCountMin); bool isRestExists = false; bool isTrainingExists = false; bool isShopExists = false; for (int i=0; i < roomCount; i++) { RoomClass room = new RoomClass(); if (Map.Compartments.Count == 0) { room.Type = FloodedTempleRoomTypes.Start; room.Background = StartRoomSprite; room.Furniture = SetRoomFurniture(room); Map.Compartments.Add(room); } else if (Map.Compartments.Count == (roomCount - 1) * 2) { room.Type = FloodedTempleRoomTypes.Final; room.Background = FinalRoomSprite; room.Furniture = SetRoomFurniture(room); room.ActiveItems.Add(FT_AltarCollection.TheRivenMaskAltar); room.Enemy = FT_EnemyCollection.DDTheRock; Map.Compartments.Add(room); } else { do { room.Type = MinorRoomTypes[Random.Range(0, MinorRoomTypes.Length)]; } while (!(room.Type == FloodedTempleRoomTypes.Training && !isTrainingExists || room.Type == FloodedTempleRoomTypes.Shop && !isShopExists || room.Type == FloodedTempleRoomTypes.Rest && !isRestExists || isTrainingExists && isShopExists && isRestExists)); if (room.Type == FloodedTempleRoomTypes.Training) { isTrainingExists = true; } else if(room.Type == FloodedTempleRoomTypes.Shop) { isShopExists = true; } else if (room.Type == FloodedTempleRoomTypes.Rest) { isRestExists = true; } room.Background = MinorRoomSprites[(int)room.Type-1]; room.Furniture = SetRoomFurniture(room); if (room.Type == FloodedTempleRoomTypes.Shop) { for (int j = 0; j < Random.Range(1, Constants.FT_ItemsPerShop); j++) { room.ActiveItems.Add(ItemCollection.GetRandomItem()); } } else if (room.Type == FloodedTempleRoomTypes.Rest) { room.ActiveItems.Add(FT_AltarCollection.RestRoomAltar); } else if (room.Type == FloodedTempleRoomTypes.Training) { room.Enemy = FT_EnemyCollection.GetRandomMinorBoss(); } Map.Compartments.Add(room); } if (i < roomCount - 1) { PassageClass passage = new PassageClass(); passage.Tiles = new PassageTile[Random.Range(Constants.FT_PassageMinTileLength, Constants.FT_PassageMaxTileLength+1)]; AbActiveItem[] activeItems = new AbActiveItem[passage.Tiles.Length * 4]; for (int j = 3; j < activeItems.Length-2; j++) { if ((j%Constants.FT_EventSlotsPerPassageTile==2 || j % Constants.FT_EventSlotsPerPassageTile == 3) && Random.Range(1, 100) <= Constants.FT_AltarChance) { activeItems[j] = FT_AltarCollection.GetRandomAltar(); j += Constants.FT_SameEventsMinDistance - 1; } } AbEnemy[] enemies = new AbEnemy[passage.Tiles.Length * 4]; if (i == 0) { enemies[2] = FT_EnemyCollection.TutorialTurtle; } for (int j = 2; j < enemies.Length; j++) { if (i == 0) { j += Constants.FT_SameEventsMinDistance - 1; } else { if (j % Constants.FT_EventSlotsPerPassageTile != 0 && Random.Range(1, 100) <= Constants.FT_EnemyChance) { if (activeItems[j] != null) { enemies[j - 1] = FT_EnemyCollection.GetRandomTrashEnemy(); } else { enemies[j] = FT_EnemyCollection.GetRandomTrashEnemy(); } j += Constants.FT_SameEventsMinDistance - 1; } } } for (int j = 0; j < passage.Tiles.Length; j++) { PassageTile passageTile = new PassageTile(); passageTile.Background = PassageSprites[Random.Range(0, PassageSprites.Length)]; for(int k = 0; k < Constants.FT_EventSlotsPerPassageTile; k++) { passageTile.ActiveItems[k] = activeItems[j * 4 + k]; } for (int k = 0; k < Constants.FT_EventSlotsPerPassageTile; k++) { passageTile.Enemies[k] = enemies[j * 4 + k]; } passage.Tiles[j] = passageTile; } Map.Compartments.Add(passage); } } }