-- which part of the wall is seen
seenWallType :: SpriteEnv -> Point -> Maybe WallType
seenWallType env (x,y) =
    let lvl  = spriteLevel env
        f p' = maybe False (not . isWall) (findTileAt p' lvl) && p' `elem` (spriteSeen env)
        fixWall Wall = if ((x+1),y) `elem` (spriteSeen env) || ((x-1),y) `elem` (spriteSeen env) then WallEW
                       else if (x,y+1) `elem` (spriteSeen env) || (x,y-1) `elem` (spriteSeen env) then WallNS
                       else Wall
        fixWall t    = t
    in  fixWall <$> filterWallType f (x,y) <$> wallType lvl (x,y)
seenWallType :: SpriteEnv -> Point -> Maybe WallType
seenWallType env (x,y) =
    let lvl  = spriteLevel env
        f p' = maybe False (not . isWall) (findTileAt p' lvl) && p' `elem` (spriteSeen env)
        fixWall Wall = if ((x+1),y) `elem` (spriteSeen env) || ((x-1),y) `elem` (spriteSeen env) then WallEW
                       else if (x,y+1) `elem` (spriteSeen env) || (x,y-1) `elem` (spriteSeen env) then WallNS
                       else Wall
        fixWall t    = t
    in  fixWall <$> filterWallType f (x,y) <$> wallType lvl (x,y)
seenWallType env (x,y) =
    let lvl  = spriteLevel env
        f p' = maybe False (not . isWall) (findTileAt p' lvl) && p' `elem` (spriteSeen env)
        fixWall Wall = if ((x+1),y) `elem` (spriteSeen env) || ((x-1),y) `elem` (spriteSeen env) then WallEW
                       else if (x,y+1) `elem` (spriteSeen env) || (x,y-1) `elem` (spriteSeen env) then WallNS
                       else Wall
        fixWall t    = t
    in  fixWall <$> filterWallType f (x,y) <$> wallType lvl (x,y)