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) ]