annotate examples/example-drawable/example-drawable.c @ 442:9c3b3935f0aa

core: rework allocations
author David Demelier <markand@malikania.fr>
date Thu, 03 Nov 2022 21:09:25 +0100
parents 25a56ca53ac2
children 773a082f0b91
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
415
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * example-drawable.c -- example on how to use automatic drawables
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020-2022 David Demelier <markand@malikania.fr>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <stdio.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <stdlib.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
431
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 415
diff changeset
22 #include <mlk/core/alloc.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 415
diff changeset
23 #include <mlk/core/animation.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 415
diff changeset
24 #include <mlk/core/core.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 415
diff changeset
25 #include <mlk/core/event.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 415
diff changeset
26 #include <mlk/core/game.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 415
diff changeset
27 #include <mlk/core/drawable.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 415
diff changeset
28 #include <mlk/core/drawable-stack.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 415
diff changeset
29 #include <mlk/core/key.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 415
diff changeset
30 #include <mlk/core/painter.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 415
diff changeset
31 #include <mlk/core/panic.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 415
diff changeset
32 #include <mlk/core/sys.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 415
diff changeset
33 #include <mlk/core/image.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 415
diff changeset
34 #include <mlk/core/sprite.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 415
diff changeset
35 #include <mlk/core/state.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 415
diff changeset
36 #include <mlk/core/texture.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 415
diff changeset
37 #include <mlk/core/util.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 415
diff changeset
38 #include <mlk/core/window.h>
415
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
39
433
862b15c3a3ae ui: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
40 #include <mlk/ui/label.h>
862b15c3a3ae ui: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
41 #include <mlk/ui/theme.h>
862b15c3a3ae ui: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
42 #include <mlk/ui/ui.h>
415
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
43
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 #include <assets/sprites/explosion.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
45
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 #define W 1280
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 #define H 720
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
48
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 static struct label help = {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 .x = 10,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 .y = 10,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 .text = "Keys: <Esc> to reset. Click anywhere to spawn a drawable.",
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 .flags = LABEL_FLAGS_SHADOW
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 };
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
55
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 static struct state *states[1];
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 static struct drawable *drawables[64];
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 static struct drawable_stack stack;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
59
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 /*
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 * List of drawables for this example.
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 * -----------------------------------------------------------------------------
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 */
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
64
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 /* 0: Explosion animation. */
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 static struct texture explosion_tex;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 static struct sprite explosion_sprite;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
68
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 struct explosion {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 struct animation anim;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 struct drawable dw;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 };
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
73
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 static void
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 init(void)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 if (core_init("fr.malikania", "example-drawable") < 0 || ui_init() < 0)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 panic();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 if (window_open("Example - Drawable", W, H) < 0)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 panic();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
81
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 /* 0: Explosion animation. */
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 if (image_openmem(&explosion_tex, assets_explosion, sizeof (assets_explosion)) < 0)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 panic();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
85
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 sprite_init(&explosion_sprite, &explosion_tex, 256, 256);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
88
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 static int
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 explosion_update(struct drawable *dw, unsigned int ticks)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 struct explosion *ex = dw->data;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
93
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 return animation_update(&ex->anim, ticks);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
96
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 static void
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 explosion_draw(struct drawable *dw)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 struct explosion *ex = dw->data;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
101
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 animation_draw(&ex->anim, ex->dw.x, ex->dw.y);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
104
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 static void
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 explosion_finish(struct drawable *dw)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 free(dw->data);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
110
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 static void
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 spawn(int x, int y)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 {
438
25a56ca53ac2 core: update mlk-alloc module
David Demelier <markand@malikania.fr>
parents: 433
diff changeset
114 struct explosion *ex = mlk_alloc_new0(sizeof (*ex));
415
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
115
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 animation_init(&ex->anim, &explosion_sprite, 15);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
117
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 ex->dw.data = ex;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 ex->dw.x = x - (int)(explosion_sprite.cellw / 2);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 ex->dw.y = y - (int)(explosion_sprite.cellh / 2);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 ex->dw.update = explosion_update;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
122 ex->dw.draw = explosion_draw;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 ex->dw.finish = explosion_finish;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
124
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 drawable_stack_add(&stack, &ex->dw);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
127
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 static void
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 handle(struct state *st, const union event *ev)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 (void)st;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
132
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 switch (ev->type) {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 case EVENT_KEYDOWN:
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 switch (ev->key.key) {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 case KEY_ESCAPE:
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 drawable_stack_finish(&stack);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 break;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 default:
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
140 break;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 break;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 case EVENT_CLICKDOWN:
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 spawn(ev->click.x, ev->click.y);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 break;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
146 case EVENT_QUIT:
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 game_quit();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 break;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 default:
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 break;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
153
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
154 static void
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 update(struct state *st, unsigned int ticks)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 (void)st;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
158
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 drawable_stack_update(&stack, ticks);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
160
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
162
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 static void
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 draw(struct state *st)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 (void)st;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
167
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 painter_set_color(0xebede9ff);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 painter_clear();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
170 label_draw(&help);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 drawable_stack_draw(&stack);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
172 painter_present();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
174
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
175 static void
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 run(void)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 struct state state = {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 .handle = handle,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 .update = update,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 .draw = draw
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 };
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
183
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 drawable_stack_init(&stack, drawables, UTIL_SIZE(drawables));
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
185
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 game_init(states, UTIL_SIZE(states));
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 game_push(&state);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 game_loop();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
190
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 static void
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 quit(void)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
193 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 window_finish();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 ui_finish();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 core_finish();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
198
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 int
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
200 main(int argc, char **argv)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
201 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 (void)argc;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
203 (void)argv;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
204
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 init();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 run();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 quit();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 }