-
Notifications
You must be signed in to change notification settings - Fork 16
/
LevelState.hs
34 lines (31 loc) · 1.24 KB
/
LevelState.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
module LevelState where
import qualified Color
import Geometry
import Level
import State
import Item
import Grammar
import qualified Terrain
viewTile :: Bool -> Tile -> Assocs -> (Char, Color.Color)
viewTile b (Tile t []) a = Terrain.viewTerrain 0 b t
viewTile b (Tile t (i:_)) a = Item.viewItem (ikind i) a
-- | Produces a textual description of the terrain and items at an already
-- explored location. Mute for unknown locations.
-- The "detailed" variant is for use in the targeting mode.
lookAt :: Bool -> Bool -> State -> LMap -> Loc -> String -> String
lookAt detailed canSee s lmap loc msg
| detailed =
Terrain.lookTerrain (tterrain (lmap `rememberAt` loc)) ++ " " ++ msg ++ isd
| otherwise = msg ++ isd
where
is = titems (lmap `rememberAt` loc)
prefixSee = if canSee then "You see " else "You remember "
prefixThere = if canSee
then "There are several objects here"
else "You remember several objects here"
isd = case is of
[] -> ""
[i] -> prefixSee ++ objectItem s i ++ "."
[i,j] -> prefixSee ++ objectItem s i ++ " and "
++ objectItem s j ++ "."
_ -> prefixThere ++ if detailed then ":" else "."