public Tile[] GetNeighbours(Tile t) { int x = -t.Position.x; int z = t.Position.y; //Debug.Log("x: " + x + " and z: " + z); List <Tile> tiles = new List <Tile>(); if (x >= 1) { tiles.Add(PresentLevelTiles[x - 1, z]); } if (z < PresentLevelTiles.GetLength(1) - 2) { tiles.Add(PresentLevelTiles[x, z + 1]); } if (x < PresentLevelTiles.GetLength(0) - 2) { tiles.Add(PresentLevelTiles[x + 1, z]); } if (z >= 1) { tiles.Add(PresentLevelTiles[x, z - 1]); } return(tiles.ToArray()); }
/// <summary> /// Projde vsechny Tily v rozmezi width a height od vstupniho tilu a vrati je /// jako list /// </summary> /// <param name="centerTile">Tile kolem ktereho zjistujeme Tily</param> /// <param name="width">Vzdalenost v Z-tove ose</param> /// <param name="height">(Nepovinne) Vzdalenost v X-ove ose. Pokud neni uvedeno, je hodnota natavena na 0 /// => bude pouzita stejna hodnota jako width => ctvercova oblast kolem Tilu.</param> /// <returns></returns> public List <Tile> GetAllTilesAtDistance(Tile centerTile, int width, int height = 0) { List <Tile> l = new List <Tile>(); if (height == 0) { height = width; } int ZLeftLimit = (int)centerTile.Position.y - width; int ZRightLimit = (int)centerTile.Position.y + width; if (ZLeftLimit < 0) { ZLeftLimit = 0; } if (ZRightLimit > PresentLevelTiles.GetLength(1) - 1) { ZRightLimit = PresentLevelTiles.GetLength(1) - 1; } int XBottomLimit = (int)centerTile.Position.x * (-1) - width; int XTopLimit = (int)centerTile.Position.x * (-1) + width; if (XBottomLimit < 0) { XBottomLimit = 0; } if (XTopLimit > PresentLevelTiles.GetLength(0) - 1) { XTopLimit = PresentLevelTiles.GetLength(0) - 1; } Debug.Log("LIMITS: X:(" + XBottomLimit + "," + XTopLimit + ") Z(" + ZLeftLimit + "," + ZRightLimit + ")"); for (int i = XBottomLimit; i <= XTopLimit; i++) { for (int j = ZLeftLimit; j <= ZRightLimit; j++) { //Debug.Log(i + " " + j); Tile[] a = GetTile(new Vector3(i * -1, 0, j)); //a.SetTileToHighlited(); l.Add(a[0]); l.Add(a[1]); //Debug.Log("Tile added"); } } return(l); }