diff --git a/src/MainGame/WorldMap.hs b/src/MainGame/WorldMap.hs index 28a4b3a..aae85b8 100644 --- a/src/MainGame/WorldMap.hs +++ b/src/MainGame/WorldMap.hs @@ -556,33 +556,47 @@ drawMap = do drawLoadScreen ud progress _ -> do dt <- getDelta - (_, (playerPos, posanims, posActions)) <- yieldSystemT (worldState ud) $ do - pc <- efor allEnts $ do - with player - with pos - query pos - posanims <- efor allEnts $ do - with anim - with pos - stat <- query anim - pos' <- query pos - mbnds <- queryMaybe obstacle - return (pos', stat, mbnds) - posActions <- efor allEnts $ do - with objType - with objState - with objStateTime - with objPlayerActivated - with pos - pos' <- query pos - t <- query objType - s <- query objState - pa <- query objPlayerActivated - let maxt = actionTime t s - ttl <- query objStateTime - return (pos', pa, realToFrac (1 - ttl / maxt)) - return (head pc, posanims, posActions) - let V2 pr pc = playerPos + (_, dat) <- yieldSystemT (worldState ud) $ do + efor allEnts $ do + with pos + pos' <- query pos + player <- queryMaybe player + stat <- queryMaybe anim + mbnds <- queryMaybe obstacle + t <- queryMaybe objType + s <- queryMaybe objState + pa <- queryMaybe objPlayerActivated + ttl <- queryMaybe objStateTime + let maxt = fromMaybe 1 (actionTime <$> t <*> s) + first = if isJust player + then Just + pos' + else Nothing + secnd = if isJust stat + then Just + ( pos' + , fromJust stat + , mbnds + ) + else Nothing + third = if isJust t && isJust s + then Just + ( pos' + , fromMaybe False pa + , realToFrac (1 - fromMaybe 0 ttl / maxt) + ) + else Nothing + return (first, secnd, third) + let ((playerPos:_), posanims, posActions) = Prelude.foldl + (\(amppo, ampan, ampac) (mppo, mpan, mpac) -> + ( if isJust mppo then fromJust mppo : amppo else amppo + , if isJust mpan then fromJust mpan : ampan else ampan + , if isJust mpac then fromJust mpac : ampac else ampac + ) + ) + ([], [], []) + dat + V2 pr pc = playerPos MainData _ _ _ _ gr = stateData ud seekGraph = Types.connects (head gr) ++ tail gr room = Prelude.filter (inBounds (fmap floor playerPos) . bounds) seekGraph