Yampa-0.10.7: examples/yampa-game/YampaSDL.hs
module YampaSDL where
import Data.IORef
import FRP.Yampa as Yampa
import Graphics.UI.SDL as SDL
type TimeRef = IORef Int
yampaSDLTimeInit :: IO TimeRef
yampaSDLTimeInit = do
timeRef <- newIORef (0 :: Int)
_ <- yampaSDLTimeSense timeRef
_ <- yampaSDLTimeSense timeRef
_ <- yampaSDLTimeSense timeRef
_ <- yampaSDLTimeSense timeRef
return timeRef
-- | Updates the time in an IO Ref and returns the time difference
updateTime :: IORef Int -> Int -> IO Int
updateTime timeRef newTime = do
previousTime <- readIORef timeRef
writeIORef timeRef newTime
return (newTime - previousTime)
yampaSDLTimeSense :: IORef Int -> IO Yampa.DTime
yampaSDLTimeSense timeRef = do
-- Get time passed since SDL init
newTime <- fmap fromIntegral SDL.getTicks
-- Obtain time difference
dt <- updateTime timeRef newTime
let dtSecs = fromIntegral dt / 100
return dtSecs