module GridBounds.Bounds
( Bounds
, bound
, createGrid
, createCompressedGrid
) where
import GridBox.Grid (Grid)
import qualified GridBox.Grid as G
import GridBox.Row (Row)
import GridBox.Coordinate (fromBox)
import GridBox.Box (Box)
import GridBox.Compress (CompressedGrid, compressRow)
import GJK.Support (polySupport)
import GJK.Collision (collision)
import Data.Maybe (fromMaybe)
type Bounds = [(Double, Double)]
bound :: [Bounds] -> Grid -> Grid
bound bounds grid =
map (boundRow bounds) grid
boundRow :: [Bounds] -> Row -> Row
boundRow list row =
filter (isInBoundsList list) row
isInBoundsList :: [Bounds] -> Box -> Bool
isInBoundsList list box =
any (isInBounds box) list
isInBounds :: Box -> Bounds -> Bool
isInBounds box bounds =
fromMaybe False $ collision 1 (fromBox box, polySupport) (bounds, polySupport)
createGrid :: [Bounds] -> (Double, Double) -> Double -> Double -> Double -> Double -> [Box]
createGrid bounds size width height xOffset yOffset =
concat . bound bounds $ G.createGrid size width height xOffset yOffset
createCompressedGrid :: [Bounds] -> (Double, Double) -> Double -> Double -> Double -> Double -> CompressedGrid
createCompressedGrid bounds size width height xOffset yOffset =
compressRow $ createGrid bounds size width height xOffset yOffset