conways-game-of-life/Graphics/Engine.hs

32 lines
798 B
Haskell
Raw Normal View History

2021-12-28 16:38:15 -05:00
{-# LANGUAGE LambdaCase #-}
2021-12-27 18:08:04 -05:00
module Graphics.Engine where
import Control.Arrow
import Control.Monad.Representable.Reader
import FRP.Yampa
import GOL.Engine
import GOL.Space
2021-12-28 16:38:15 -05:00
import Graphics.Config
import Graphics.Gloss
2021-12-27 18:08:04 -05:00
import Graphics.GlossUtils (InputEvent)
2021-12-28 16:38:15 -05:00
import Graphics.Gloss.Interface.IO.Game hiding (Event)
import qualified Graphics.Gloss.Interface.IO.Game as G
2021-12-27 18:08:04 -05:00
2021-12-28 16:38:15 -05:00
data Tick = Tick
2021-12-27 18:08:04 -05:00
initialSpace :: Space f => f Bool
initialSpace = tabulate $ const False
2021-12-28 16:38:15 -05:00
engine :: Space f => GOL f Bool -> SF (Event Tick) (GOL f Bool)
engine = accumHoldBy (\s _ -> tick s)
defaultPeriod = 0.5
repeatTick :: Time -> SF a (Event Tick)
repeatTick t = repeatedly t Tick
tickSignal :: SF (Event Time) (Event Tick)
tickSignal =
arr (\ev -> ((), fmap repeatTick ev))
>>> drSwitch (repeatTick defaultPeriod)