3 | module IdrisGL.Animate
5 | import IdrisGL.Picture
6 | import IdrisGL.DataType
8 | import IdrisGL.SDL.SDL_event
9 | import IdrisGL.SDL.SDL_video
10 | import IdrisGL.SDL.SDL_render
11 | import IdrisGL.SDL.SDL_surface
12 | import IdrisGL.SDL.SDL_timer
21 | animate : (window : Display)
22 | -> (bgColor : Color)
24 | -> (picF : (Double -> Picture))
26 | animate window bgColor tps picF = do
27 | win <- createWin window
28 | ren <- createRenderer win
36 | loop : Renderer -> Win -> Event -> Double -> IO ()
37 | loop ren win e lastTime =
38 | if !getSecondsTicks - lastTime < tps
39 | then loop' ren win e lastTime
41 | setRenderDrawColor ren bgColor
43 | loadPicture (picF !getSecondsTicks) ren win
45 | loop' ren win e !getSecondsTicks
47 | loop' : Renderer -> Win -> Event -> Double -> IO ()
48 | loop' ren win e lastTime with (eveType e)
49 | loop' _ _ _ _ | E_QUIT = pure ()
50 | loop' ren win e lastTime | _ = loop ren win e lastTime