Files
loop/src/Dodge/Render/Walls.hs
T
2022-06-07 18:22:43 +01:00

43 lines
1.2 KiB
Haskell

module Dodge.Render.Walls
( wallsToDrawStreams
) where
import Dodge.Data
import Dodge.Zone
import Dodge.Base.Collide
import Geometry
import ShapePicture
import Control.Lens
--import Data.Maybe
import qualified Control.Foldl as L
--import Data.List
--import qualified Data.IntMap.Strict as IM
wallsToDrawStreams
:: Configuration
-> World
-> ( [((Point2,Point2),Point4)] ,[((Point2,Point2),Point4)], SPic )
wallsToDrawStreams cfig w
= ( wls, wins,spic)
where
f wl = (_wlLine wl, _wlColor wl)
(wls, wins, spic) = L.fold ((,,)
<$> L.prefilter wlOpaqueDraw (L.premap f L.list)
<*> L.prefilter wlSeeThroughDraw (L.premap f L.list)
<*> L.premap getWallSPic L.mconcat
) (wallsDoubleScreen cfig w)
wlOpaqueDraw :: Wall -> Bool
wlOpaqueDraw wl = wlIsOpaque wl && _wlDraw wl
wlSeeThroughDraw :: Wall -> Bool
wlSeeThroughDraw wl = wlIsSeeThrough wl && _wlDraw wl
getWallSPic :: Wall -> SPic
getWallSPic wl = case wl ^? wlOpacity . opDraw of
Nothing -> mempty
Just f -> f wl
-- (wins,wls) = partition theTest . IM.elems . IM.filter _wlDraw $ wallsDoubleScreen cfig w
-- theTest wl = case _wlOpacity wl of
-- Opaque -> False
-- _ -> True