module Graphics.Gloss.Interface.FRP.Sodium (playSodium, InputEvent) where
import Graphics.Gloss
import Graphics.Gloss.Interface.IO.Game (playIO)
import qualified Graphics.Gloss.Interface.IO.Game as G
import FRP.Sodium
import Control.Monad (void)
type InputEvent = G.Event
playSodium ∷ Display
→ Color
→ Int
→ ( Event Float
→ Event InputEvent
→ Reactive (Behavior Picture))
→ IO ()
playSodium display colour frequency mPicture = do
(unreg, bPicture, pushTick, pushInput) ← sync $ do
(eTick, pushTick ) ← newEvent
(eInput, pushInput) ← newEvent
bPicture ← mPicture eTick eInput
unreg ← listen (value bPicture) . const $ return ()
return (unreg, bPicture, pushTick, pushInput)
playIO display colour frequency ()
(\ _ → sync $ sample bPicture)
(\ ev _ → void . sync $ pushInput ev )
(\ time _ → void . sync $ pushTick time )
unreg