52 lines
1.3 KiB
Haskell
52 lines
1.3 KiB
Haskell
module Dodge.Render.InfoBox (
|
|
renderInfoListAt,
|
|
renderInfoListsAt,
|
|
) where
|
|
|
|
-- this should be imported implicitly
|
|
import Dodge.Base
|
|
import Dodge.Data.Camera
|
|
import Dodge.Data.CardinalPoint
|
|
import Dodge.Data.Config
|
|
import Dodge.Data.SelectionList
|
|
import Dodge.Render.Connectors
|
|
import Dodge.Render.List
|
|
import Geometry
|
|
import Picture
|
|
|
|
renderInfoListAt ::
|
|
Float ->
|
|
Float ->
|
|
Configuration ->
|
|
Camera ->
|
|
(Point2, [String]) ->
|
|
Picture
|
|
renderInfoListAt x y cfig cam (p, ss) =
|
|
toTopLeft cfig (renderListAt x y (zip ss (repeat white)))
|
|
<> color white (lConnect (V2 (x - hw) (hh -25 - y)) (worldPosToScreen cam p))
|
|
<> toTopLeft
|
|
cfig
|
|
( translate x (- y) $
|
|
listCursorChooseBorderScale
|
|
0
|
|
1
|
|
(BoundaryCursor [North, South])
|
|
0
|
|
0
|
|
white
|
|
19
|
|
(length ss)
|
|
)
|
|
where
|
|
hw = halfWidth cfig
|
|
hh = halfHeight cfig
|
|
|
|
renderInfoListsAt :: Float -> Float -> Configuration -> Camera -> [(Point2, [String])] -> Picture
|
|
renderInfoListsAt x y cfig w =
|
|
fst . foldr f (mempty, 0)
|
|
where
|
|
f (p, ss) (pic, offset) =
|
|
( pic <> renderInfoListAt x (y + offset) cfig w (p, ss)
|
|
, offset + 20 * fromIntegral (length ss)
|
|
)
|