46 lines
1.3 KiB
Haskell
46 lines
1.3 KiB
Haskell
module Dodge.Render.Picture (
|
|
fixedCoordPictures,
|
|
) where
|
|
|
|
import Control.Lens
|
|
import Dodge.Base.WinScale
|
|
import Dodge.Base.Window
|
|
import Dodge.Data.Universe
|
|
import Dodge.Render.HUD
|
|
import Dodge.Render.List
|
|
import Dodge.Render.MenuScreen
|
|
import Geometry
|
|
import Picture
|
|
|
|
fixedCoordPictures :: Universe -> Picture
|
|
fixedCoordPictures u = drawMenuOrHUD cfig u
|
|
<> drawConcurrentMessage u
|
|
<> customMouseCursor cfig (u ^. uvWorld . input)
|
|
<> listPicturesAt (halfWidth cfig) 0 cfig (map text (_uvTestString u u))
|
|
where
|
|
cfig = _uvConfig u
|
|
|
|
drawMenuOrHUD :: Configuration -> Universe -> Picture
|
|
drawMenuOrHUD cfig u = case u ^. uvScreenLayers of
|
|
[] -> drawHUD (u ^. uvConfig) (u ^. uvWorld)
|
|
(lay : _) -> drawMenuScreen cfig lay
|
|
|
|
drawConcurrentMessage :: Universe -> Picture
|
|
drawConcurrentMessage u =
|
|
stackPicturesAt
|
|
(halfWidth cfig)
|
|
(_windowY cfig - 50)
|
|
cfig
|
|
(map (centerText . f) $ u ^.. uvSideEffects . each)
|
|
where
|
|
cfig = _uvConfig u
|
|
f (RunningSideEffect ce) = ce ++ " IN PROGRESS"
|
|
f x = _ceString x ++ " QUEUED"
|
|
|
|
customMouseCursor :: Configuration -> Input -> Picture
|
|
customMouseCursor cfig inp =
|
|
winScale cfig
|
|
. uncurryV translate (_mousePos inp)
|
|
. color white
|
|
$ pictures [line [V2 (-5) 0, V2 5 0], line [V2 0 (-5), V2 0 5]]
|