public static TileWithFacing Face(this TileWithFacing startVec, HexDirection direction)
    {
        TileCoords newFacing;

        if (HexMapHelper.GetTileShape(startVec.position) == TileShape.Hexagon)
        {
            newFacing = HexMapHelper.GetTileInHexDirection(startVec.position, startVec.facing, direction);
        }
        else
        {
            newFacing = GetNewTileWhenLeavingPentagon(startVec.position, startVec.facing, direction, PentagonTraversalStrategy.LeanLeft);
        }
        return(new TileWithFacing()
        {
            position = startVec.position, facing = newFacing
        });
    }
    public static TileWithFacing Traverse(this TileWithFacing startVec, HexDirection direction, int steps = 1, PentagonTraversalStrategy strategy = PentagonTraversalStrategy.LeanLeft)
    {
        TileCoords currentTile   = startVec.position;
        TileCoords currentFacing = startVec.facing;

        for (int step = 0; step < steps; step++)
        {
            TileCoords newTile;
            if (HexMapHelper.GetTileShape(currentTile) == TileShape.Hexagon)
            {
                newTile = HexMapHelper.GetTileInHexDirection(currentTile, currentFacing, direction);
            }
            else
            {
                //We're stepping out of a Pentagon using HexDirection. What do we do?
                newTile = GetNewTileWhenLeavingPentagon(currentTile, currentFacing, direction, strategy);
            }
            direction = HexDirection.Forward;

            if (HexMapHelper.GetTileShape(newTile) == TileShape.Hexagon)
            {
                currentFacing = HexMapHelper.GetTileInHexDirection(newTile, currentTile, HexDirection.Backward);
            }
            else
            {
                //We're stepping into a Pentagon with Hex Directions. What do we do?
                currentFacing = GetFacingWhenEnteringPentagon(currentTile, newTile, strategy);
            }

            currentTile = newTile;
        }
        return(new TileWithFacing()
        {
            position = currentTile, facing = currentFacing
        });
    }