Files
loop/src/Dodge/Concurrent.hs
T
2022-08-25 09:52:12 +01:00

28 lines
913 B
Haskell

module Dodge.Concurrent where
--import qualified Data.Set as S
import Control.Lens
import Dodge.Data.Universe
--import Control.Concurrent
--import SDL.Input.Keyboard.Codes
conEffects :: Universe -> ConcurrentEffect Universe
conEffects u = case u ^. uvConcEffects of
NewConcEffect{_ceFunction = eff} -> eff
_ -> NoConcurrentEffect
tryConcEffect :: Bool -> String -> IO (Universe -> Maybe Universe) -> Universe -> Universe
tryConcEffect bl str eff u = case u ^. uvConcEffects of
NoConcEffect -> u & uvConcEffects .~ NewConcEffect (ConcurrentEffect setstr (clearConcEff eff)) str bl
_ -> u
where
setstr
| bl = uvConcEffects .~ BlockingConcEffect str
| otherwise = uvConcEffects .~ BackgroundConcEffect str
clearConcEff :: IO (Universe -> Maybe Universe) -> IO (Universe -> Maybe Universe)
clearConcEff eff = do
f <- eff
return (f . (uvConcEffects .~ NoConcEffect))