public List <TileResult> GetTilesFromAllDirections(Tile origin, int offset, int length, TileFilterMode filterMode = TileFilterMode.None) { Assert.IsNotNull(origin); var hitTiles = new List <TileResult>(); foreach (var direction in GridHelper.AllDirections) { var offsetTile = GetTile(origin.transform.GetGridPosition() + GridHelper.DirectionToVector(direction) * offset); if (offsetTile != null) { hitTiles.AddRange(GetTiles(offsetTile, direction, 0, length, filterMode)); } } return(hitTiles); }
public List <TileResult> GetTiles(Tile origin, WorldDirection direction, int offset, int length, TileFilterMode filterMode = TileFilterMode.None) { Assert.IsNotNull(origin, "Origin tile is null."); length = Mathf.Min(GridSize, length); var hitTiles = new List <TileResult>(); // Start one tile away from origin. for (int i = offset + 1; i < offset + 1 + length; i++) { var vectorFromDirection = GridHelper.DirectionToVector(direction); var nextTile = GetTile(origin.transform.GetGridPosition() + vectorFromDirection * i); if (nextTile) { if (filterMode != TileFilterMode.None && nextTile.Blocked) { if (filterMode == TileFilterMode.ContiguousTilesInclusive) { hitTiles.Add(new TileResult(nextTile, i)); } break; } hitTiles.Add(new TileResult(nextTile, i)); } } return(hitTiles); }