43 lines
1.2 KiB
Haskell
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
|
|
|