private List<Node> GetParents(Node sourceNode) { List<Node> results = new List<Node>(); if (sourceNode.Location.Y - 1 >= 0) { var north = NodeMap[sourceNode.Location.X, sourceNode.Location.Y - 1]; results.Add(north); } if (sourceNode.Location.Y + 1 <= NodeMap.GetLength(0) - 1) { var south = NodeMap[sourceNode.Location.X, sourceNode.Location.Y + 1]; results.Add(south); } if (sourceNode.Location.X + 1 <= NodeMap.GetLength(1) - 1) { var east = NodeMap[sourceNode.Location.X + 1, sourceNode.Location.Y]; results.Add(east); } if (sourceNode.Location.X - 1 >= 0) { var west = NodeMap[sourceNode.Location.X - 1, sourceNode.Location.Y]; results.Add(west); } return results; }
private void AssignCost(int cost, Node node) { if (cost < node.MovementCost) { if (node.Type == Tile.IMPASSABLE_WOOD || node.Type == Tile.GOLD_MINE_1) { node.Passable = false; node.MovementCost = -1; } else if (node.Type == Tile.GOLD_MINE_2 || node.Type == Tile.GOLD_MINE_3 || node.Type == Tile.GOLD_MINE_4 || node.Type == Tile.GOLD_MINE_NEUTRAL || node.Type == Tile.TAVERN || node.Type == Tile.HERO_1 || node.Type == Tile.HERO_2 || node.Type == Tile.HERO_3 || node.Type == Tile.HERO_4) { node.MovementCost = cost; node.Passable = false; } else { node.MovementCost = cost; node.Passable = true; } } }
private void FindAllRoutes(int depth, Node parentNode) { depth++; foreach (var node in parentNode.Parents.Where(n => n.MovementCost > depth)) { AssignCost(depth, node); if (node.Passable) { FindAllRoutes(depth, node); } } }
private Node[,] ConvertToNodeMap(Tile[,] board) { Node[,] nodemap = new Node[board.GetLength(0), board.GetLength(1)]; int count = 0; for (int xIndex = 0; xIndex < board.GetLength(0); xIndex++) { for (int yIndex = 0; yIndex < board.GetLength(1); yIndex++) { nodemap[xIndex, yIndex] = new Node(board[xIndex, yIndex], xIndex, yIndex) {Id = count}; count++; } } return nodemap; }