28 lines
913 B
Haskell
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))
|