public MapGenerator(IRMap map, IMobPackManager mobPackManager) { _map = map; _mobPackManager = mobPackManager; _rows = map.Rows; _cols = map.Columns; _directions = RHelper.GetDirections(); _oppositeDirections = new Dictionary <Direction, Direction> { { Direction.North, Direction.South }, { Direction.East, Direction.West }, { Direction.South, Direction.North }, { Direction.West, Direction.East }, { Direction.Center, Direction.Center } }; var roomGen = new RoomGenerator(5, 5, 10, 10, _map); var corridorGen = new HallwayGenerator(20, 20, 50, 50, _map); var drunkDrigger = new DrunkDigger(50, 50, 100, 100, _map); var treasureRoomGen = new TreasureRoom(5, 5, 13, 13, _map); _generators = new RandomContainer <IGenerator> { { roomGen, 60 }, { corridorGen, 5 }, { drunkDrigger, 180 }, { treasureRoomGen, 2 } }; roomGen.EnableEnemySpawning(_mobPackManager, 15); drunkDrigger.EnableEnemySpawning(_mobPackManager, 20); }
public virtual void EnableEnemySpawning(IMobPackManager mobPackManager, int chance) { _spawningEnabled = true; _spawnChance = chance; _packManager = mobPackManager; }
public IMapGenerator CreateMapGenerator(IRMap map, IMobPackManager mobPackManager) { return(new MapGenerator(map, mobPackManager)); }
public void DrawMap(IRMap map, IOverworldCamera camera, IOverworldPlayer player, IMobPackManager mobPackManager, IStatistics statistics, IRConsole target = null) { var targetConsole = target ?? RootConsole; Clear(); var viewPort = camera.ViewPort; for (var row = 0; row <= viewPort.Height; ++row) { for (var col = 0; col <= viewPort.Width; ++col) { var charCell = ' '; var cellColour = TCODColor.white; var mapRow = viewPort.Y + row; var mapCol = viewPort.X + col; var cell = map[mapRow, mapCol]; cellColour = GetRarityColour(cell, cellColour); if (cell.Is(RCell.Wall)) { charCell = '#'; } if (cell.Is(RCell.Floor)) { charCell = '.'; } if (cell.Is(RCell.Door)) { charCell = 'D'; } if (cell.Is(RCell.Small)) { charCell = 'S'; } if (cell.Is(RCell.Normal)) { charCell = 'N'; } if (cell.Is(RCell.Big)) { charCell = 'B'; } if (cell.Is(RCell.Grand)) { charCell = 'G'; } if (cell.Is(RCell.Portal)) { charCell = 'O'; } foreach (var pack in from pack in mobPackManager.MobPacks let packX = pack.Position.X let packY = pack.Position.Y where mapCol == packX && mapRow == packY && player.CanSee(packX, packY) select pack) { charCell = 'E'; cellColour = pack.Strength.GetAssociatedColour(); } if (mapCol == player.Position.X && mapRow == player.Position.Y) { charCell = '@'; cellColour = TCODColor.white; } var visitedMod = .2f; if (player.CanSee(mapCol, mapRow)) { if (!cell.Is(RCell.Visited)) { statistics.AddToStatistic(Statistic.SquaresRevealed, 1); } visitedMod = 1f; map[mapRow, mapCol] |= RCell.Visited; } if (cell.Is(RCell.Dark)) { visitedMod *= 0.5f; } if (!cell.Is(RCell.Visited)) { continue; } cellColour = cellColour.Multiply(visitedMod); SetCharacter(col, row, charCell, cellColour); } } targetConsole.Blit(this, Bounds, _posX, _posY); }