/// <summary> /// Retrieve set of tiles in range of the specified tile using radius as a parameter. /// </summary> /// <param name="tile">Target tile.</param> /// <param name="radius">Radius of the range.</param> /// <returns></returns> public static HashSet <Tile> GetRange(Tile tile, int radius) { HashSet <Tile> setA = new HashSet <Tile>(); HashSet <Tile> setB = new HashSet <Tile>(); Hex hex = WorldManager.Hex; foreach (Tile t in WorldManager.World.Tiles) { if (Hex.AxisDistance(hex, tile, t, Hex.Axis.X) >= -radius && Hex.AxisDistance(hex, tile, t, Hex.Axis.X) <= radius) { setA.Add(t); } } foreach (Tile t in setA) { if (Hex.AxisDistance(hex, tile, t, Hex.Axis.Y) >= -radius && Hex.AxisDistance(hex, tile, t, Hex.Axis.Y) <= radius) { setB.Add(t); } } setA.Clear(); foreach (Tile t in setB) { if (Hex.AxisDistance(hex, tile, t, Hex.Axis.Z) >= -radius && Hex.AxisDistance(hex, tile, t, Hex.Axis.Z) <= radius) { setA.Add(t); } } setA.Remove(tile); return(setA); }