From 22c0c87284debe76db6a6667ec7e8b09bada855c Mon Sep 17 00:00:00 2001 From: nek0 Date: Sun, 4 Mar 2018 22:24:30 +0100 Subject: [PATCH] subtile collision for boxes --- assets/misc/box1.kra | Bin 504362 -> 503582 bytes assets/misc/box1.png | Bin 575 -> 574 bytes src/Test.hs | 182 +++++++++++++++++++++++++++++------------- src/Types/UserData.hs | 4 + 4 files changed, 130 insertions(+), 56 deletions(-) diff --git a/assets/misc/box1.kra b/assets/misc/box1.kra index 924b37dc4983577bf08b622a527e0a041d8baeae..25ba37d38ec7dfc0e243c2c0d6e7168132afbd79 100644 GIT binary patch delta 18544 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 delta 19237 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 minr && + nr - fromIntegral (floor nr) <= maxr) && + (nc - fromIntegral (floor nc) >= minc && + nc - fromIntegral (floor nc) <= maxc) && + (or - fromIntegral (floor or) < minr || + or - fromIntegral (floor or) > maxr) -> + defEntity' + { pos = Set (V2 or nc) + } + | (nr - fromIntegral (floor nr) >= minr && + nr - fromIntegral (floor nr) <= maxr) && + (nc - fromIntegral (floor nc) >= minc && + nc - fromIntegral (floor nc) <= maxc) && + (oc - fromIntegral (floor oc) < minc || + oc - fromIntegral (floor oc) > maxc) -> + defEntity' + { pos = Set (V2 nr oc) + } + | (nr - fromIntegral (floor nr) < minr || + nr - fromIntegral (floor nr) > maxr) && + (nc - fromIntegral (floor nc) < minc || + nc - fromIntegral (floor nc) > maxc) -> + defEntity' + { pos = Set npos + } + | (nr - fromIntegral (floor nr) < minr || + nr - fromIntegral (floor nr) > maxr) && + (nc - fromIntegral (floor nc) >= minc && + nc - fromIntegral (floor nc) <= maxc) -> + defEntity' + { pos = Set npos + } + | (nr - fromIntegral (floor nr) >= minr && + nr - fromIntegral (floor nr) <= maxr) && + (nc - fromIntegral (floor nc) < minc || + nc - fromIntegral (floor nc) > maxc) -> + defEntity' + { pos = Set npos + } + | otherwise -> + defEntity' + Nothing + | Wall /= matrix M.! (floor nr, floor nc) -> + defEntity' + { pos = Set npos + } + | Wall /= matrix M.! (floor nr, floor oc) -> + defEntity' + { pos = Set (V2 nr oc) + } + | Wall /= matrix M.! (floor or, floor nc) -> + defEntity' + { pos = Set (V2 or nc) + } + | otherwise -> + defEntity' return ent putAffection ud { worldState = nws @@ -178,43 +222,69 @@ drawTile -> Int -> Maybe ImgId -> IO () -drawTile ai ctx pr pc row col img = do - let tileWidth = 64 :: Double - tileHeight = 32 :: Double - save ctx - let x = realToFrac $ 640 + ((fromIntegral col - pc) + - (fromIntegral row - pr)) * (tileWidth / 2) - y = realToFrac $ 360 - (tileHeight / 2) + ((fromIntegral row - pr) - - (fromIntegral col - pc)) * (tileHeight / 2) - unless (img == Nothing) $ do - let dist = distance (V2 (fromIntegral row) (fromIntegral col)) - (V2 (realToFrac pr - 1) (realToFrac pc)) / 4 - fact = if (floor pr <= row && floor pc >= col) && isWall (fromJust img) - then min 1 dist - else 1 - paint <- imagePattern - ctx x (y - (74 * fact - realToFrac tileHeight)) - (realToFrac tileWidth) 74 - 0 - (ai Map.! fromJust img) - fact - beginPath ctx - if fact < 1 - then do - moveTo ctx x (y + (realToFrac tileHeight - 74 * fact)) - lineTo ctx (x + realToFrac tileWidth) (y + (realToFrac tileHeight - 74 * fact)) - lineTo ctx (x + realToFrac tileWidth) (y + realToFrac tileHeight / 2) - lineTo ctx (x + realToFrac tileWidth / 2) (y + realToFrac tileHeight) - lineTo ctx x (y + realToFrac tileHeight / 2) - closePath ctx - else - rect ctx x (y - (74 - realToFrac tileHeight)) (realToFrac tileWidth) 74 - fillPaint ctx paint - fill ctx - when (floor pr == row && floor pc == col) $ do - beginPath ctx - circle ctx 640 360 5 - closePath ctx - fillColor ctx (rgba 0 255 255 255) - fill ctx - restore ctx +drawTile ai ctx pr pc row col img = + do + save ctx + if (isNothing img) + then drawPlayer + else do + if (isNothing mb) + then do + drawImage + drawPlayer + else do + let (Boundaries (minr, minc) (maxr, maxc)) = fromJust mb + if (pr <= fromIntegral (floor pr) + minr && + pc >= fromIntegral (floor pc) + minc) + then do + drawPlayer + drawImage + else do + drawImage + drawPlayer + -- when (isNothing img) drawPlayer + restore ctx + where + tileWidth = 64 :: Double + tileHeight = 32 :: Double + x = realToFrac $ 640 + ((fromIntegral col - pc) + + (fromIntegral row - pr)) * (tileWidth / 2) + y = realToFrac $ 360 - (tileHeight / 2) + ((fromIntegral row - pr) - + (fromIntegral col - pc)) * (tileHeight / 2) + dist = distance (V2 (fromIntegral row) (fromIntegral col)) + (V2 (realToFrac pr - 1) (realToFrac pc)) / 4 + fact = + if (floor pr <= row && floor pc >= col) && + isWall (fromJust img) + then min 1 dist + else 1 + mb = imgObstacle img + drawImage = do + beginPath ctx + paint <- imagePattern + ctx x (y - (74 * fact - realToFrac tileHeight)) + (realToFrac tileWidth) 74 + 0 + (ai Map.! fromJust img) + fact + if fact < 1 + then do + moveTo ctx x (y + (realToFrac tileHeight - 74 * fact)) + lineTo ctx + (x + realToFrac tileWidth) + (y + (realToFrac tileHeight - 74 * fact)) + lineTo ctx (x + realToFrac tileWidth) (y + realToFrac tileHeight / 2) + lineTo ctx (x + realToFrac tileWidth / 2) (y + realToFrac tileHeight) + lineTo ctx x (y + realToFrac tileHeight / 2) + closePath ctx + else + rect ctx x (y - (74 - realToFrac tileHeight)) (realToFrac tileWidth) 74 + fillPaint ctx paint + fill ctx + drawPlayer = do + when (floor pr == row && floor pc == col) $ do + beginPath ctx + circle ctx 640 360 5 + closePath ctx + fillColor ctx (rgba 0 255 255 255) + fill ctx diff --git a/src/Types/UserData.hs b/src/Types/UserData.hs index add7d3d..a7d510b 100644 --- a/src/Types/UserData.hs +++ b/src/Types/UserData.hs @@ -58,6 +58,10 @@ isWall :: ImgId -> Bool isWall ImgMiscBox1 = False isWall _ = True +imgObstacle :: Maybe ImgId -> Maybe (Boundaries Double) +imgObstacle (Just ImgMiscBox1) = Just (Boundaries (0.2, 0.34) (0.8, 1)) +imgObstacle _ = Nothing + data FontId = FontBedstead deriving (Show, Eq, Ord, Enum)