diff options
| author | Drew DeVault <sir@cmpwn.com> | 2021-12-09 17:01:29 +0100 |
|---|---|---|
| committer | Drew DeVault <sir@cmpwn.com> | 2021-12-09 17:01:29 +0100 |
| commit | c4e22bac297ee3b235b2c41a1a3358bc133e476d (patch) | |
| tree | a1eccdf51d2bbf8e954332b62bd83c10f8705129 /cmd/demo | |
| parent | cmd/demo: remove unused variable (diff) | |
| download | hare-chip8-c4e22bac297ee3b235b2c41a1a3358bc133e476d.tar.gz | |
cmd/demo: further refactoring
Diffstat (limited to '')
| -rw-r--r-- | cmd/demo/main.ha | 129 |
1 files changed, 65 insertions, 64 deletions
diff --git a/cmd/demo/main.ha b/cmd/demo/main.ha index e3360be..8bd733d 100644 --- a/cmd/demo/main.ha +++ b/cmd/demo/main.ha @@ -20,6 +20,71 @@ type state = struct { cat: object, }; +export fn main() void = { + sdl2::init(sdl2::init_flags::VIDEO | sdl2::init_flags::GAMECONTROLLER); + defer sdl2::quit(); + image::init(image::init_flags::PNG | image::init_flags::JPG); + defer image::quit(); + + const title = strings::to_c("Hare SDL2 demo"); + defer free(title); + const win = match (sdl2::create_window(title, + sdl2::WINDOWPOS_UNDEFINED, sdl2::WINDOWPOS_UNDEFINED, + 640, 480, window_flags::NONE)) { + case let win: *sdl2::window => + yield win; + case null => + fmt::fatal("sdl2::create_window failed"); + }; + defer sdl2::destroy_window(win); + + const render = match (sdl2::create_renderer(win, -1, renderer_flags::NONE)) { + case let rend: *sdl2::renderer => + yield rend; + case null => + fmt::fatal("sdl2::create_renderer failed"); + }; + defer sdl2::destroy_renderer(render); + + let controller: nullable *sdl2::gamecontroller = null; + for (let i = 0; i < sdl2::numjoysticks(); i += 1) { + if (!sdl2::is_game_controller(i)) { + continue; + }; + controller = sdl2::game_controller_open(i); + if (controller != null) { + break; + }; + }; + defer match (controller) { + case null => void; + case let c: *sdl2::gamecontroller => + sdl2::game_controller_close(c); + }; + + let state = state { + window = win, + render = render, + hare = load_object(render, "mascot.jpg"), + cat = load_object(render, "cat.png"), + ... + }; + defer sdl2::destroy_texture(state.hare.tex); + defer sdl2::destroy_texture(state.cat.tex); + + state.hare.dx = 2; + state.hare.dy = 2; + + for (!state.quit) { + update(&state); + draw(&state); + + sdl2::delay(1000 / 60); + }; + + os::exit(0); // https://todo.sr.ht/~sircmpwn/hare/525 +}; + fn update(state: *state) void = { let ev = sdl2::event { ... }; for (sdl2::poll_event(&ev) == 1) switch (ev.event_type) { @@ -120,67 +185,3 @@ fn load_object(render: *sdl2::renderer, path: str) object = { ... }; }; - -export fn main() void = { - sdl2::init(sdl2::init_flags::VIDEO | sdl2::init_flags::GAMECONTROLLER); - defer sdl2::quit(); - image::init(image::init_flags::PNG | image::init_flags::JPG); - defer image::quit(); - - const title = strings::to_c("Hare SDL2 demo"); - defer free(title); - const win = match (sdl2::create_window(title, - sdl2::WINDOWPOS_UNDEFINED, sdl2::WINDOWPOS_UNDEFINED, - 640, 480, window_flags::NONE)) { - case let win: *sdl2::window => - yield win; - case null => - fmt::fatal("sdl2::create_window failed"); - }; - defer sdl2::destroy_window(win); - - const render = match (sdl2::create_renderer(win, -1, renderer_flags::NONE)) { - case let rend: *sdl2::renderer => - yield rend; - case null => - fmt::fatal("sdl2::create_renderer failed"); - }; - defer sdl2::destroy_renderer(render); - - let controller: nullable *sdl2::gamecontroller = null; - for (let i = 0; i < sdl2::numjoysticks(); i += 1) { - if (!sdl2::is_game_controller(i)) { - continue; - }; - controller = sdl2::game_controller_open(i); - if (controller != null) { - break; - }; - }; - defer match (controller) { - case null => void; - case let c: *sdl2::gamecontroller => - sdl2::game_controller_close(c); - }; - - let state = state { - window = win, - render = render, - hare = load_object(render, "mascot.jpg"), - cat = load_object(render, "cat.png"), - ... - }; - defer sdl2::destroy_texture(state.hare.tex); - defer sdl2::destroy_texture(state.cat.tex); - - state.hare.dx = 2; - state.hare.dy = 2; - - for (!state.quit) { - update(&state); - draw(&state); - sdl2::delay(1000 / 60); - }; - - os::exit(0); // https://todo.sr.ht/~sircmpwn/hare/525 -}; |
