-- extra precaution, we avoid enemies during our path construction
adjacentSafe :: Activity -> Vertex -> Graph
adjacentSafe activity start pos =
    let board = activity^.activityGame.gameBoard
        tiles = S.toList $ adjacentTiles board pos
        heroHasEnoughHealth = activity^.activityHero.heroLife > 30
        worthEntering tile =
          let targetTile = fromMaybe WoodTile (tileAt board tile)
          in if heroHasEnoughHealth
               then targetTile /= WoodTile
               else targetTile /= WoodTile && not (isEnemyNearby activity pos)
    in if pos == start || fromMaybe WoodTile (tileAt board pos) == FreeTile
         then filter worthEntering tiles
         else []
adjacentSafe :: Activity -> Vertex -> Graph
adjacentSafe activity start pos =
    let board = activity^.activityGame.gameBoard
        tiles = S.toList $ adjacentTiles board pos
        heroHasEnoughHealth = activity^.activityHero.heroLife > 30
        worthEntering tile =
          let targetTile = fromMaybe WoodTile (tileAt board tile)
          in if heroHasEnoughHealth
               then targetTile /= WoodTile
               else targetTile /= WoodTile && not (isEnemyNearby activity pos)
    in if pos == start || fromMaybe WoodTile (tileAt board pos) == FreeTile
         then filter worthEntering tiles
         else []
adjacentSafe activity start pos =
    let board = activity^.activityGame.gameBoard
        tiles = S.toList $ adjacentTiles board pos
        heroHasEnoughHealth = activity^.activityHero.heroLife > 30
        worthEntering tile =
          let targetTile = fromMaybe WoodTile (tileAt board tile)
          in if heroHasEnoughHealth
               then targetTile /= WoodTile
               else targetTile /= WoodTile && not (isEnemyNearby activity pos)
    in if pos == start || fromMaybe WoodTile (tileAt board pos) == FreeTile
         then filter worthEntering tiles
         else []