public void NodeToHexagon(List<Direction.EnumDirection> dirs, ref List<Hexagon> hexas, Hexagon root) { Hexagon currentHexa; currentHexa = root.GetTarget(dirs); //Logger.Error("posx : " + currentHexa._posX + "posy : " + currentHexa._posY + "used : " +NodeUsed); if (currentHexa != null && currentHexa._posX >=0 && currentHexa._posY >= 0 && NodeUsed && currentHexa.isVisible()) { hexas.Add(currentHexa); //Logger.Error("size ---------------->" + hexas.Count); } if ((currentHexa._posX == -1 && currentHexa._posY == -1) || currentHexa.isVisible()) { for (int i = 0; i < Nodes.Count; i++) { dirs.Add(Nodes[i]._direction); Nodes[i].NodeToHexagon(dirs, ref hexas, root); dirs.RemoveAt(dirs.Count - 1); } } }
public List<Hexagon> GetRange(Range r, Hexagon source) { int valueRange; if (r.Orientation == Orientation.EnumOrientation.Diagonal) { valueRange = r.MaxRange + PlayBoardManager.GetInstance().GetCurrentPlayer().RangeModifier * 2; } else { valueRange = r.MaxRange + PlayBoardManager.GetInstance().GetCurrentPlayer().RangeModifier; } if (valueRange < r.MinRange) valueRange = r.MinRange; List<Hexagon> hexas = new List<Hexagon>(); hexas.Add(source); if (r.Orientation == Orientation.EnumOrientation.Any) { for(int i = 0; i < _width; i++) { for(int j = 0; j < _height;j++) { if(source.Distance(_grid[i][j]) >= r.MinRange && source.Distance(_grid[i][j]) <= valueRange && source.Distance(_grid[i][j]) > 0) { hexas.Add(_grid[i][j]); } } } } else if (r.Orientation == Orientation.EnumOrientation.Line) { List<Direction.EnumDirection> dirs = Direction.GetLineEnum(); foreach (Direction.EnumDirection dir in dirs) { List<Direction.EnumDirection> directions = new List<Direction.EnumDirection>(); for (int i = 1; i < r.MinRange; i++) { directions.Add(dir); } for (int i = r.MinRange; i <= valueRange; i++) { directions.Add(dir); hexas.Add(source.GetTarget(directions)); } } } else if (r.Orientation == Orientation.EnumOrientation.Diagonal) { List<Direction.EnumDirection> dirs = Direction.GetDiagonalEnum(); foreach (Direction.EnumDirection dir in dirs) { List<Direction.EnumDirection> directions = new List<Direction.EnumDirection>(); for (int i = 2; i < r.MinRange; i+=2) { directions.Add(dir); } for (int i = r.MinRange; i <= valueRange; i+=2) { directions.Add(dir); hexas.Add(source.GetTarget(directions)); } } } return hexas; }