Пример #1
0
    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);
    }
Пример #2
0
    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);
    }