aboutsummaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/demo/main.ha82
1 files changed, 61 insertions, 21 deletions
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,
+ });
+};