85 lines
2.9 KiB
Haskell
85 lines
2.9 KiB
Haskell
module Dodge.Render.MenuScreen
|
|
( menuScreen
|
|
)
|
|
where
|
|
import Dodge.Data
|
|
import Dodge.LoadConfig
|
|
import Dodge.Base (halfWidth,halfHeight)
|
|
|
|
import Picture
|
|
|
|
menuScreen :: World -> Picture
|
|
menuScreen w = case _menuLayers w of
|
|
[] -> blank
|
|
(LevelMenu x:_) -> pictures
|
|
[color (withAlpha 0.5 black) $ polygon $ screenBox w
|
|
,tst (-100) 100 0.4 ("LEVEL "++show x)
|
|
]
|
|
(PauseMenu:_) -> pictures
|
|
[color (withAlpha 0.5 black) $ polygon $ screenBox w
|
|
,tst (-100) 100 0.4 "PAUSED"
|
|
,tst (-100) 50 0.2 "n - new level"
|
|
,tst (-100) 0 0.2 "r - restart"
|
|
,tst (-100) (-50) 0.2 "o - options"
|
|
,tst (-100) (-100) 0.2 "c - controls"
|
|
]
|
|
(GameOverMenu:_) -> pictures
|
|
[color (withAlpha 0.5 black) $ polygon $ screenBox w
|
|
,tst (-100) 100 0.4 "GAME OVER"
|
|
,tst (-100) 50 0.2 "n - new level"
|
|
,tst (-100) 0 0.2 "r - restart"
|
|
,tst (-100) (-50) 0.2 "o - options"
|
|
,tst (-100) (-100) 0.2 "c - controls"
|
|
]
|
|
(OptionMenu : _) -> pictures
|
|
[color (withAlpha 0.5 black) $ polygon $ screenBox w
|
|
,tst (-100) 100 0.4 "OPTIONS"
|
|
,tst (-180) 50 0.2 $ "y - master volume + u : " ++ mavol
|
|
,tst (-180) 0 0.2 $ "h - sound volume + j : " ++ snvol
|
|
,tst (-180) (-50) 0.2 $ "n - music volume + m : " ++ muvol
|
|
]
|
|
(ControlList : _) -> pictures
|
|
[color (withAlpha 0.5 black) $ polygon $ screenBox w
|
|
,tst (-100) 100 0.4 "CONTROLS"
|
|
,controlsList
|
|
]
|
|
(ConfigSaveScreen : _) -> pictures
|
|
[color (withAlpha 0.5 black) $ polygon $ screenBox w
|
|
,tst (-100) 100 0.4 "OPTIONS"
|
|
,tst (-180) 50 0.2 $ "y - master volume + u : " ++ mavol
|
|
,tst (-180) 0 0.2 $ "h - sound volume + j : " ++ snvol
|
|
,tst (-180) (-50) 0.2 $ "n - music volume + m : " ++ muvol
|
|
]
|
|
_ -> blank
|
|
where
|
|
tst x y sc t = translate x y $ scale sc sc $ color white $ text t
|
|
mavol = f $ _volume_master $ _config w
|
|
snvol = f $ _volume_sound $ _config w
|
|
muvol = f $ _volume_music $ _config w
|
|
f x = show $ round $ 10 * x
|
|
|
|
controlsList = pictures $ concat $ zipWith butAndEff
|
|
[("wasd", "movement")
|
|
,("[rmb]", "aim")
|
|
,("[rmb+lmb]", "shoot or use item")
|
|
,("[wheelscroll]" , "select item" )
|
|
,("[space]" , "pickup item" )
|
|
,("m" , "display map" )
|
|
,("f" , "drop item" )
|
|
,("c[esc]" , "pause" )
|
|
,("qe" , "rotate camera")
|
|
]
|
|
[60,30..]
|
|
where
|
|
butAndEff (btext,etext) y =
|
|
[translate (-250) y $ scale 0.15 0.15 $ color white $ text btext
|
|
,translate 0 y $ scale 0.15 0.15 $ color white $ text etext
|
|
]
|
|
|
|
screenBox w = [ (halfWidth w, halfHeight w)
|
|
, (-halfWidth w, halfHeight w)
|
|
, (-halfWidth w,-halfHeight w)
|
|
, ( halfWidth w,-halfHeight w)
|
|
]
|
|
|