module Affection.Util
where
import Affection.Types
import Affection.Logging
import qualified SDL
import System.Clock
import Control.Monad.State
preHandleEvents :: [SDL.Event] -> Affection us [SDL.EventPayload]
preHandleEvents evs =
return $ map SDL.eventPayload evs
getAffection :: Affection us us
getAffection = do
ad <- get
return $ userState ad
putAffection
:: us
-> Affection us ()
putAffection us = do
ad <- get
put $ ad
{ userState = us }
delaySec
:: Int
-> IO ()
delaySec dur = SDL.delay (fromIntegral $ dur * 1000)
getElapsedTime :: Affection us Double
getElapsedTime =
elapsedTime <$> get
getDelta :: Affection us Double
getDelta =
deltaTime <$> get
quit :: Affection us ()
quit = do
ad <- get
put $ ad { quitEvent = True }
toggleScreen :: Affection us ()
toggleScreen = do
ad <- get
newMode <- case screenMode ad of
SDL.Windowed -> do
SDL.setWindowMode (drawWindow ad) SDL.FullscreenDesktop
return SDL.FullscreenDesktop
SDL.FullscreenDesktop -> do
SDL.setWindowMode (drawWindow ad) SDL.Windowed
return SDL.Windowed
x -> do
liftIO $ logIO Warn ("Unknown Screen mode: " ++ show x)
return x
now <- liftIO $ getTime Monotonic
put ad
{ sysTime = now
, screenMode = newMode
}