aboutsummaryrefslogtreecommitdiff
path: root/cmd/demo
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--cmd/demo/main.ha129
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
-};