From c8b81e90e59b3dc3000b87780c90d54add61c16b Mon Sep 17 00:00:00 2001 From: nek0 Date: Fri, 10 Aug 2018 10:29:12 +0200 Subject: [PATCH] add progress bar --- src/MainGame/WorldMap.hs | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/MainGame/WorldMap.hs b/src/MainGame/WorldMap.hs index 2104f3b..9dc3948 100644 --- a/src/MainGame/WorldMap.hs +++ b/src/MainGame/WorldMap.hs @@ -299,7 +299,7 @@ drawMap = do drawLoadScreen ud progress _ -> do dt <- getDelta - (_, (playerPos, posanims)) <- yieldSystemT (worldState ud) $ do + (_, (playerPos, posanims, posActions)) <- yieldSystemT (worldState ud) $ do pc <- fmap head $ efor allEnts $ do with player with pos @@ -311,7 +311,18 @@ drawMap = do pos' <- query pos mbnds <- queryMaybe obstacle return (pos', stat, mbnds) - return (pc, posanims) + posActions <- efor allEnts $ do + with objType + with objState + with objStateTime + with pos + pos' <- query pos + t <- query objType + s <- query objState + let maxt = actionTime t s + ttl <- query objStateTime + return (pos', realToFrac (1 - ttl / maxt)) + return (pc, posanims, posActions) let V2 pr pc = playerPos mat = imgMat (stateData ud) cols = fromIntegral (ncols mat) @@ -365,6 +376,23 @@ drawMap = do (\(j, t) -> drawTile ud ctx (partposanims M.! (i, j)) pr pc i j t) (reverse $ zip [1..] ls)) (zip [1..] (toLists mat)) + mapM_ (\(V2 sr sc, perc) -> do + let lx = realToFrac $ 640 + ((sc - pc) + + (sr - pr)) * (tileWidth / 2) :: CFloat + ly = realToFrac $ 360 - (tileHeight / 2) + ((sr - pr) - + (sc - pc)) * (tileHeight / 2) :: CFloat + fillColor ctx (rgb 0 255 0) + strokeColor ctx (rgb 0 255 0) + strokeWidth ctx 2 + beginPath ctx + rect ctx (lx - 25) (ly - 50) 50 10 + stroke ctx + closePath ctx + beginPath ctx + rect ctx (lx - 25 * perc) (ly - 50) (50 * perc) 10 + fill ctx + closePath ctx + ) posActions fontSize ctx 20 fontFace ctx (assetFonts ud Map.! FontBedstead) textAlign ctx (S.fromList [AlignCenter,AlignTop])