From eee9343313d0599f7c0be47e5fbddc444eb19457 Mon Sep 17 00:00:00 2001 From: nek0 Date: Sat, 10 Mar 2018 10:07:37 +0100 Subject: [PATCH] tinkering with collision --- src/Test.hs | 49 +++++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/src/Test.hs b/src/Test.hs index a9950ce..159e32d 100644 --- a/src/Test.hs +++ b/src/Test.hs @@ -152,15 +152,28 @@ updateMap dt = do { pos = Set $ pos' + dpos * Prelude.foldl (checkBoundsCollision pos' npos) (V2 1 1) - ((imgObstacle (imgMat (stateData ud) M.! (floor nr, floor nc))) ++ - Prelude.map (\(Boundaries (minr, minc) (maxr, maxc)) -> - let deltar = fromIntegral (floor pr - floor nr) - deltac = fromIntegral (floor pc - floor nc) - in Boundaries - (minr + deltar, minc + deltac) - (maxr + deltar, maxc + deltac) - ) - (imgObstacle (imgMat (stateData ud) M.! (floor pr, floor pc)))) + ( + -- (imgObstacle (imgMat (stateData ud) M.! (floor nr, floor nc))) ++ + -- Prelude.map (\(Boundaries (minr, minc) (maxr, maxc)) -> + -- let deltar = fromIntegral (floor pr - floor nr) + -- deltac = fromIntegral (floor pc - floor nc) + -- in Boundaries + -- (minr + deltar, minc + deltac) + -- (maxr + deltar, maxc + deltac) + -- ) + concatMap + (\(dr, dc) -> + let bs = imgObstacle + (imgMat (stateData ud) M.! + (floor (nr + dr), floor (nc + dc))) + in Prelude.map (\(Boundaries (minr, minc) (maxr, maxc))-> + Boundaries + (minr + dr, minc + dc) + (maxr + dr, maxc + dc) + ) bs + ) + ((,) <$> [-1..1] <*> [-1..1]) + ) } return ent putAffection ud @@ -258,28 +271,28 @@ checkBoundsCollision -> V2 Double checkBoundsCollision (V2 pr pc) (V2 fr fc) (V2 mr mc) (Boundaries (minr, minc) (maxr, maxc)) - | ntestr && ntestc && not testr = V2 (0 * mr) (1 * mc) | ntestc && ntestr && not testc = V2 (1 * mr) (0 * mc) + | ntestr && ntestc && not testr = V2 (0 * mr) (1 * mc) | not ntestr && not ntestc = V2 (1 * mr) (1 * mc) | not ntestr && ntestc = V2 (1 * mr) (1 * mc) | not ntestc && ntestr = V2 (1 * mr) (1 * mc) | otherwise = V2 (0 * mr) (0 * mc) where ntestr - | ndistr <= hheight + 0.07 = True - | ncdistsq <= 0.005 = True + | ndistr <= hheight + 0.15 = True + -- | ncdistsq <= 0.005 = True | otherwise = False ntestc - | ndistc <= hwidth + 0.07 = True - | ncdistsq <= 0.005 = True + | ndistc <= hwidth + 0.15 = True + -- | ncdistsq <= 0.005 = True | otherwise = False testr - | distr <= hheight + 0.07 = True - | cdistsq <= 0.005 = True + | distr <= hheight + 0.15 = True + -- | cdistsq <= 0.005 = True | otherwise = False testc - | distc <= hwidth + 0.07 = True - | cdistsq <= 0.005 = True + | distc <= hwidth + 0.15 = True + -- | cdistsq <= 0.005 = True | otherwise = False ndistr = abs (fr - (fromIntegral (floor fr :: Int) + (minr + hheight))) ndistc = abs (fc - (fromIntegral (floor fc :: Int) + (minc + hwidth)))