Fix crWallCollisions by using a rectangle zone instead of a point
This commit is contained in:
@@ -15,7 +15,7 @@ module Dodge.Zoning.Base
|
||||
|
||||
import Control.Lens
|
||||
import qualified Data.IntSet as IS
|
||||
import Data.Maybe
|
||||
--import Data.Maybe
|
||||
import Geometry
|
||||
import Geometry.Zone
|
||||
import qualified IntMapHelp as IM
|
||||
@@ -24,6 +24,7 @@ zoneOfCirc :: Float -> Point2 -> Float -> [Int2]
|
||||
zoneOfCirc zsize p r = zoneOfRect zsize (p +.+ V2 r r) (p -.- V2 r r)
|
||||
|
||||
zoneOfRect :: Float -> Point2 -> Point2 -> [Int2]
|
||||
{-# INLINE zoneOfRect #-}
|
||||
zoneOfRect s sp ep = [V2 x y | x <- makeIntInterval sx ex, y <- makeIntInterval sy ey]
|
||||
where
|
||||
V2 sx sy = zoneOfPoint s sp
|
||||
@@ -45,9 +46,10 @@ zoneOfSeg :: Float -> Point2 -> Point2 -> [Int2]
|
||||
{-# INLINE zoneOfSeg #-}
|
||||
zoneOfSeg s sp ep = map (zoneOfPoint s) (sp : xIntercepts s sp ep ++ yIntercepts' s sp ep)
|
||||
|
||||
-- | zoneExtract (V2 x y) == fromMaybe mempty . (^? ix x . ix y)
|
||||
zoneExtract :: Monoid m => Int2 -> IM.IntMap (IM.IntMap m) -> m
|
||||
{-# INLINE zoneExtract #-}
|
||||
zoneExtract (V2 x y) = fromMaybe mempty . (^? ix x . ix y)
|
||||
zoneExtract (V2 x y) = foldOf (ix x . ix y)
|
||||
|
||||
zonesExtract :: Monoid m => IM.IntMap (IM.IntMap m) -> [Int2] -> m
|
||||
{-# INLINE zonesExtract #-}
|
||||
|
||||
@@ -16,4 +16,4 @@ nearSeg size f sp ep w = zonesExtract (f $ w ^. cWorld . lWorld) (zoneOfSeg size
|
||||
|
||||
nearRect :: Monoid m => Float -> (LWorld -> IM.IntMap (IM.IntMap m)) -> Point2 -> Point2 -> World -> m
|
||||
{-# INLINE nearRect #-}
|
||||
nearRect size f sp ep w = zonesExtract (f $ w ^. cWorld . lWorld) (zoneOfSeg size sp ep)
|
||||
nearRect size f sp ep w = zonesExtract (f $ w ^. cWorld . lWorld) (zoneOfRect size sp ep)
|
||||
|
||||
@@ -12,7 +12,6 @@ import Dodge.Zoning.Common
|
||||
|
||||
wlIXsNearPoint :: Point2 -> World -> IS.IntSet
|
||||
wlIXsNearPoint = nearPoint wlZoneSize _wlZoning
|
||||
--wlIXsNearPoint p w = zoneExtract (zoneOfPoint wlZoneSize p) (w ^. cWorld . lWorld . wlZoning)
|
||||
|
||||
wlIXsNearSeg :: Point2 -> Point2 -> World -> IS.IntSet
|
||||
{-# INLINE wlIXsNearSeg #-}
|
||||
|
||||
Reference in New Issue
Block a user