Last active
December 13, 2015 20:28
-
-
Save fowlmouth/4970500 to your computer and use it in GitHub Desktop.
nimrod sdl example using iterators as continuations
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sdl, sdl_gfx | |
discard sdl.init(INIT_EVERYTHING) | |
var screen = setvideomode(800,600,16,SWSURFACE) | |
iterator checkEvent {.closure.} = | |
var event_t: sdl.TEvent | |
var event = addr event_t | |
while true: | |
if sdl.pollEvent(event) > 0: | |
case event.kind | |
of QUITEV: | |
break | |
of KEYDOWN: | |
if evKeyboard(event).keysym.sym == K_ESCAPE: | |
break | |
else: nil | |
yield | |
iterator update {.closure.} = | |
while true: | |
yield | |
iterator draw {.closure.} = | |
discard screen.fillrect(nil, 0xFFEEFF) | |
while true: | |
discard screen.flip() | |
yield | |
proc run = | |
let tasks = [checkEvent, checkEvent, checkEvent, update, draw] | |
var task = 0 | |
var t = tasks[task] | |
while not finished(t): | |
t() | |
inc task | |
t = tasks[task mod tasks.len] | |
run() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment