using System; using System.Collections.Generic; using HexCore; namespace ConsoleApp.Maps { public class HexMap : IHexMap { private int _mapHeight; private int _mapWidth; public Cell[,] Map { get; } public Cell StartingCell { get; } public Cell LastCell { get; } public Graph HexGraph { get; } /// /// Generate Hex map with cells of 25cm X 25cm /// /// /// public HexMap(int x, int y) { //convert to cm x *= 100; y *= 100; //calculate number of cells on x and y axis var xCellCount = (int)Math.Ceiling((decimal) (x) / 25); var yCellCount = (int)Math.Ceiling((decimal) (y) / 25); _mapHeight = yCellCount; _mapWidth = xCellCount; //Initialize Map Map = new Cell[xCellCount, yCellCount]; //set Starting cell; StartingCell = Map[0, 0]; var unclearedTerrain = new TerrainType(1, "uncleared"); var clearedTerrain = new TerrainType(2, "cleared"); //Populate Map var list = new List(); for (int i = 0; i < _mapHeight; i++) { for (int j = 0; j < _mapWidth; j++) { list.Add(new CellState(false, new Coordinate2D(i, j, OffsetTypes.OddRowsRight), unclearedTerrain)); } } var movement = new MovementType(1, "default"); var movementTypes = new MovementTypes( new ITerrainType[] { unclearedTerrain, clearedTerrain }, new Dictionary> { [movement] = new Dictionary { [unclearedTerrain] = 1, [clearedTerrain] = 2 } } ); HexGraph = GraphFactory.CreateRectangularGraph(_mapWidth, _mapHeight, movementTypes, unclearedTerrain); } public List PossibleMoves(ICell currentCell) { var x = currentCell.X; var y = currentCell.Y; var possibles = new List(); if(currentCell.Y != _mapHeight) possibles.Add(GlobalDirection.North); if(currentCell.Y != 0) possibles.Add(GlobalDirection.South); if(currentCell.X != _mapWidth && currentCell.Y != _mapHeight) possibles.Add(GlobalDirection.NorthEast); return possibles; } } }