Files
loop/src/Dodge/Render/MenuScreen.hs
T
2025-01-07 00:58:23 +00:00

81 lines
2.1 KiB
Haskell

{- The menu picture. -}
module Dodge.Render.MenuScreen (
drawMenuScreen,
) where
import Dodge.ListDisplayParams
import Dodge.ScreenPos
import Dodge.Data.CardinalPoint
import Control.Lens
import Dodge.Render.List
import Dodge.Base.Window
import Dodge.Data.SelectionList
import Dodge.Data.Universe
import Picture
drawMenuScreen :: Configuration -> Maybe Int -> ScreenLayer -> Picture
drawMenuScreen cfig spos screen = case screen of
OptionScreen{_scTitle = titf, _scSelectionList = slist} ->
drawOptions optionListDisplayParams cfig titf spos slist
InputScreen inputstr help -> drawInputMenu cfig ('>' : inputstr) help
drawInputMenu ::
Configuration ->
-- | Title
String ->
-- | Help Text
String ->
Picture
drawInputMenu cfig title footer =
fold
[ darkenBackground cfig
, drawTitle cfig title
, drawFooterText cfig red footer
]
drawOptions ::
ListDisplayParams ->
Configuration ->
-- | Title
String ->
Maybe Int ->
[SelectionItem a] ->
Picture
drawOptions ldps cfig title msel sl =
darkenBackground cfig
<> drawTitle cfig title
<> drawSelectionList ldps cfig sl
<> translateScreenPos cfig (ldps ^. ldpPos) (drawCursorAt
msel
sl
ldps
50
(BoundaryCursor [North, South])
)
darkenBackground :: Configuration -> Picture
darkenBackground = color (withAlpha 0.5 black) . polygon . reverse . screenBox
drawTitle :: Configuration -> String -> Picture
drawTitle cfig = translate (- hw) (hh -80) . scale 0.4 0.4 . text
where
hh = halfHeight cfig
hw = halfWidth cfig
placeString ::
-- | x distance from center
Float ->
-- | y distance from center
Float ->
-- | scale
Float ->
String ->
Picture
placeString x y sc = color white . translate x y . scale sc sc . text
drawFooterText :: Configuration -> Color -> String -> Picture
drawFooterText cfig col = color col . placeString (- hw + 30) (- hh + 10) 0.1
where
hh = halfHeight cfig
hw = halfWidth cfig