From f26df07b04a680a749ad639a99a8f190d4ab2ad6 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Thu, 9 Dec 2021 15:04:14 +0100 Subject: cmd/demo: add hare mascot --- cmd/demo/main.ha | 82 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 61 insertions(+), 21 deletions(-) (limited to 'cmd/demo') diff --git a/cmd/demo/main.ha b/cmd/demo/main.ha index 35da638..f7ece50 100644 --- a/cmd/demo/main.ha +++ b/cmd/demo/main.ha @@ -5,10 +5,19 @@ use sdl2; use sdl2::image; use strings; +type state = struct { + hare: *sdl2::texture, + cat: *sdl2::texture, + hare_x: int, + hare_y: int, + cat_x: int, + cat_y: int, +}; + export fn main() void = { sdl2::init(sdl2::init_flags::VIDEO); defer sdl2::quit(); - image::init(image::init_flags::PNG); + let flags = image::init(image::init_flags::PNG | image::init_flags::JPG); defer image::quit(); const title = strings::to_c("Hare SDL2 demo"); @@ -31,28 +40,35 @@ export fn main() void = { }; defer sdl2::destroy_renderer(render); - const path = strings::to_c("cat.png"); - defer free(path); - const texture = match (image::load_texture(render, path)) { - case let tex: *sdl2::texture => - yield tex; - case null => - fmt::fatal("sdl2::image::load_texture failed"); + let state = state { + hare = { + const path = strings::to_c("mascot.jpg"); + defer free(path); + yield match (image::load_texture(render, path)) { + case let tex: *sdl2::texture => + yield tex; + case null => + fmt::fatal("sdl2::image::load_texture failed for mascot.jpg"); + }; + }, + cat = { + const path = strings::to_c("cat.png"); + defer free(path); + yield match (image::load_texture(render, path)) { + case let tex: *sdl2::texture => + yield tex; + case null => + fmt::fatal("sdl2::image::load_texture failed for cat.png"); + }; + }, + hare_x = 100, + hare_y = 100, + ... }; - defer sdl2::destroy_texture(texture); + defer sdl2::destroy_texture(state.hare); + defer sdl2::destroy_texture(state.cat); - let width = 0, height = 0; - sdl2::query_texture(texture, null, null, &width, &height); - - sdl2::set_render_draw_color(render, 50, 50, 50, 255); - sdl2::render_clear(render); - sdl2::render_copy(render, texture, null, &sdl2::rect { - x = 0, - y = 0, - w = width, - h = height, - }); - sdl2::render_present(render); + draw_frame(&state, render); let ev = sdl2::event { ... }; for (sdl2::wait_event(&ev) == 1) { @@ -65,3 +81,27 @@ export fn main() void = { os::exit(0); // https://todo.sr.ht/~sircmpwn/hare/525 }; + +fn draw_frame(state: *state, render: *sdl2::renderer) void = { + sdl2::set_render_draw_color(render, 50, 50, 50, 255); + sdl2::render_clear(render); + draw_tex(render, state.cat, state.cat_x, state.cat_y); + draw_tex(render, state.hare, state.hare_x, state.hare_y); + sdl2::render_present(render); +}; + +fn draw_tex( + render: *sdl2::renderer, + tex: *sdl2::texture, + x: int, + y: int, +) void = { + let width = 0, height = 0; + sdl2::query_texture(tex, null, null, &width, &height); + sdl2::render_copy(render, tex, null, &sdl2::rect { + x = x, + y = y, + w = width, + h = height, + }); +}; -- cgit v1.2.3