diff options
| -rw-r--r-- | Spear/Math/Octree.hs | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/Spear/Math/Octree.hs b/Spear/Math/Octree.hs index 74689a0..1e257eb 100644 --- a/Spear/Math/Octree.hs +++ b/Spear/Math/Octree.hs | |||
| @@ -26,22 +26,22 @@ import qualified Data.Foldable as F | |||
| 26 | data Octree e | 26 | data Octree e |
| 27 | = Octree | 27 | = Octree |
| 28 | { | 28 | { |
| 29 | root :: AABB, | 29 | root :: !AABB, |
| 30 | ents :: [e], | 30 | ents :: ![e], |
| 31 | c1 :: Octree e, | 31 | c1 :: !(Octree e), |
| 32 | c2 :: Octree e, | 32 | c2 :: !(Octree e), |
| 33 | c3 :: Octree e, | 33 | c3 :: !(Octree e), |
| 34 | c4 :: Octree e, | 34 | c4 :: !(Octree e), |
| 35 | c5 :: Octree e, | 35 | c5 :: !(Octree e), |
| 36 | c6 :: Octree e, | 36 | c6 :: !(Octree e), |
| 37 | c7 :: Octree e, | 37 | c7 :: !(Octree e), |
| 38 | c8 :: Octree e | 38 | c8 :: !(Octree e) |
| 39 | } | 39 | } |
| 40 | | | 40 | | |
| 41 | Leaf | 41 | Leaf |
| 42 | { | 42 | { |
| 43 | root :: AABB, | 43 | root :: !AABB, |
| 44 | ents :: [e] | 44 | ents :: ![e] |
| 45 | } | 45 | } |
| 46 | 46 | ||
| 47 | 47 | ||
| @@ -180,7 +180,7 @@ extract (Octree root ents c1 c2 c3 c4 c5 c6 c7 c8) = (Octree root [] c1' c2' c3' | |||
| 180 | 180 | ||
| 181 | 181 | ||
| 182 | -- | Applies the given function to the entities in the octree. | 182 | -- | Applies the given function to the entities in the octree. |
| 183 | -- Entities that break out of their cell are reallocated appropiately. | 183 | -- Entities that break out of their cell are reallocated appropriately. |
| 184 | map :: (e -> AABB -> CollisionType) -> (e -> e) -> Octree e -> Octree e | 184 | map :: (e -> AABB -> CollisionType) -> (e -> e) -> Octree e -> Octree e |
| 185 | map testAABB f o = let (o', outliers) = map' testAABB f o in insertl testAABB o' outliers | 185 | map testAABB f o = let (o', outliers) = map' testAABB f o in insertl testAABB o' outliers |
| 186 | 186 | ||
| @@ -212,7 +212,7 @@ map' testAABB f (Octree root ents c1 c2 c3 c4 c5 c6 c7 c8) = | |||
| 212 | 212 | ||
| 213 | 213 | ||
| 214 | -- | Applies a function to the entity groups in the octree. | 214 | -- | Applies a function to the entity groups in the octree. |
| 215 | -- Entities that break out of their cell are reallocated appropiately. | 215 | -- Entities that break out of their cell are reallocated appropriately. |
| 216 | gmap :: (e -> AABB -> CollisionType) -> (e -> e -> e) -> Octree e -> Octree e | 216 | gmap :: (e -> AABB -> CollisionType) -> (e -> e -> e) -> Octree e -> Octree e |
| 217 | gmap testAABB f o = let (o', outliers) = gmap' testAABB f o in insertl testAABB o' outliers | 217 | gmap testAABB f o = let (o', outliers) = gmap' testAABB f o in insertl testAABB o' outliers |
| 218 | 218 | ||
| @@ -248,6 +248,7 @@ population = F.foldr (\_ acc -> acc+1) 0 | |||
| 248 | 248 | ||
| 249 | 249 | ||
| 250 | instance Functor Octree where | 250 | instance Functor Octree where |
| 251 | |||
| 251 | fmap f (Leaf root ents) = Leaf root $ fmap f ents | 252 | fmap f (Leaf root ents) = Leaf root $ fmap f ents |
| 252 | 253 | ||
| 253 | fmap f (Octree root ents c1 c2 c3 c4 c5 c6 c7 c8) = | 254 | fmap f (Octree root ents c1 c2 c3 c4 c5 c6 c7 c8) = |
| @@ -265,6 +266,7 @@ instance Functor Octree where | |||
| 265 | 266 | ||
| 266 | 267 | ||
| 267 | instance F.Foldable Octree where | 268 | instance F.Foldable Octree where |
| 269 | |||
| 268 | foldMap f (Leaf root ents) = mconcat . fmap f $ ents | 270 | foldMap f (Leaf root ents) = mconcat . fmap f $ ents |
| 269 | 271 | ||
| 270 | foldMap f (Octree root ents c1 c2 c3 c4 c5 c6 c7 c8) = | 272 | foldMap f (Octree root ents c1 c2 c3 c4 c5 c6 c7 c8) = |
