Small optimisations
This commit is contained in:
+14
-1
@@ -18,6 +18,7 @@ import Geometry
|
||||
--import Picture
|
||||
import qualified IntMapHelp as IM
|
||||
|
||||
import Data.Foldable
|
||||
import Control.Lens
|
||||
--import Control.Monad.State
|
||||
--import Data.List
|
||||
@@ -88,7 +89,19 @@ wallsOnCirc p r = IM.filter f
|
||||
f wl = uncurry circOnSeg (_wlLine wl) p r
|
||||
|
||||
wallsOnScreen :: World -> IM.IntMap Wall
|
||||
wallsOnScreen w = wallsNearZones (zoneOfScreen w) w
|
||||
wallsOnScreen w -- = wallsNearZones (zoneOfScreen w) w
|
||||
= foldl' (flip $ IM.union . \i -> innerFold (f i (_wallsZone w))) IM.empty xs
|
||||
where
|
||||
innerFold m = foldl' (flip $ IM.union . \ j -> f j m) IM.empty ys
|
||||
|
||||
f i m = case IM.lookup i m of
|
||||
Just val -> val
|
||||
_ -> IM.empty
|
||||
(x,y) = zoneOfPoint $ _cameraCenter w
|
||||
n = ceiling (wh / (_cameraZoom w * zoneSize))
|
||||
wh = max (getWindowX w) (getWindowY w)
|
||||
xs = [x - n .. x + n]
|
||||
ys = [y - n .. y + n]
|
||||
|
||||
allWalls :: World -> IM.IntMap Wall
|
||||
allWalls w = IM.unions $ concatMap IM.elems $ IM.elems $ _wallsZone w
|
||||
|
||||
Reference in New Issue
Block a user