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