public Tile[] FiltraTile(Func<Tile, bool> condizione) { Tile[] tiles = new Tile[0]; foreach (Tile t in _listaCaselle) { if (condizione(t)) tiles = Enumerable.Empty<Tile>().Concat(Enumerable.Repeat(t, 1)).ToArray(); } return tiles; }
public int Tile2Id(Tile tile) { return _listaCaselle.IndexOf(tile); }
/// <summary>Fornisce la lista dei tile adiacenti a questo tile.</summary> public Tile[] TileAdiacenti(bool compresoTarget, bool compreseDiagonali) { Tile[] tiles = new Tile[9]; int dir = 1, max = (int)Direzioni.Destra; if (compreseDiagonali) max = (int)Direzioni.BassoADestra; if (compresoTarget) dir = 0; while (dir <= max) { tiles[dir] = this + (Direzioni)(dir++); } return tiles; }
/// <summary>Calcola se questo tile è uno degli 8 vicini al tile argomento</summary><param name="compreseDiagonali">Se false, controlliamo solo in alto, in basso, a sin e a dx</param> public bool Adiacente(Tile centro, bool compreseDiagonali) { int max = compreseDiagonali ? (int)Direzioni.BassoADestra : (int)Direzioni.Destra; for (int dir = 1; dir <= max; dir++) { if (this.Equals(centro + (Direzioni)dir)) return true; } return false; }
/// <summary> /// restituisce l'array con gli id delle caselle da percorrere per raggiungere il tile targetId /// </summary> public int[] PercorsoXCasella(Tile target) { if (target != null) return PercorsoXCasella(target.ID); else return new int[0]; }
public int DistanzaCasella(Tile tile) { return PercorsoXCasella(tile).Length; }
/// <summary> /// Restituisce il vettore che rappresenta le coordinate in pixel dell'angolo superiore sinistro del Tile argomento /// </summary> /// <param name="tile">Casella o pianeta</param> /// <returns>L'angolo superiore sinistro (coordinate in Pixel)</returns> public Vector2 Tile2Pixel(Tile tile) { return id2Pixel(tile.ID); }