Mercurial > molko
annotate examples/example-tileset/example-tileset.c @ 630:8d8fe99b357c
core: fix buffer overflow in sndfile
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 27 Aug 2023 11:04:57 +0200 |
parents | fee7bd30725c |
children | bb67f935a93f |
rev | line source |
---|---|
552
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * example-tileset.c -- example on how to use a tileset |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2020-2023 David Demelier <markand@malikania.fr> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <assert.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #include <stdio.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <string.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 |
593
f9e85d0aca74
rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
553
diff
changeset
|
23 #include <mlk/util/util.h> |
f9e85d0aca74
rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
553
diff
changeset
|
24 |
552
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include <mlk/core/animation.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 #include <mlk/core/core.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 #include <mlk/core/err.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 #include <mlk/core/event.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 #include <mlk/core/game.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 #include <mlk/core/image.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 #include <mlk/core/key.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 #include <mlk/core/painter.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 #include <mlk/core/panic.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 #include <mlk/core/state.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 #include <mlk/core/sys.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 #include <mlk/core/trace.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 #include <mlk/core/util.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 #include <mlk/core/window.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 #include <mlk/ui/label.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 #include <mlk/ui/ui.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 #include <mlk/rpg/tileset-loader-file.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 #include <mlk/rpg/tileset-loader.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 #include <mlk/rpg/tileset.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 #include <mlk/example/example.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 #include <mlk/example/registry.h> |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 |
553
cb4508f45048
cmake: rework assets output directory
David Demelier <markand@malikania.fr>
parents:
552
diff
changeset
|
50 #include <assets/tilesets/world.h> |
cb4508f45048
cmake: rework assets output directory
David Demelier <markand@malikania.fr>
parents:
552
diff
changeset
|
51 |
629
fee7bd30725c
rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents:
593
diff
changeset
|
52 static struct mlk_tileset_loader_file loader; |
552
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 static struct mlk_tileset tileset; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 /* |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 * This is only to demonstrate how we can custom-allocate data, you can skip |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 * that part. |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 */ |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 static struct mlk_sprite sprites[16]; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 static size_t spritesz; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 static struct mlk_animation animations[16]; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 static size_t animationsz; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 static const struct { |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 const char *basename; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 struct mlk_texture *texture; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 } table_textures[] = { |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 { "world.png", &mlk_registry_textures[MLK_REGISTRY_TEXTURE_WORLD] }, |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 { "animation-water.png", &mlk_registry_textures[MLK_REGISTRY_TEXTURE_WATER] }, |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 { NULL, NULL } |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 }; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 static struct mlk_texture * |
593
f9e85d0aca74
rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
553
diff
changeset
|
74 new_texture(struct mlk_tileset_loader *loader, struct mlk_tileset *tileset, const char *ident) |
552
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 { |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 (void)loader; |
593
f9e85d0aca74
rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
553
diff
changeset
|
77 (void)tileset; |
552
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 char filepath[MLK_PATH_MAX], filename[FILENAME_MAX + 1]; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 mlk_util_strlcpy(filepath, ident, sizeof (filepath)); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 mlk_util_strlcpy(filename, mlk_util_basename(filepath), sizeof (filename)); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 mlk_tracef("Searching for texture %s", filename); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 for (size_t i = 0; table_textures[i].basename != NULL; ++i) |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 if (strcmp(table_textures[i].basename, filename) == 0) |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 return table_textures[i].texture; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 return NULL; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 } |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 static struct mlk_sprite * |
593
f9e85d0aca74
rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
553
diff
changeset
|
93 new_sprite(struct mlk_tileset_loader *loader, struct mlk_tileset *tileset) |
552
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 { |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 (void)loader; |
593
f9e85d0aca74
rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
553
diff
changeset
|
96 (void)tileset; |
552
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 /* Just ensure we haven't reach the limit. */ |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 assert(spritesz < MLK_UTIL_SIZE(sprites)); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 return &sprites[spritesz++]; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 } |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 static struct mlk_animation * |
593
f9e85d0aca74
rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
553
diff
changeset
|
105 new_animation(struct mlk_tileset_loader *loader, struct mlk_tileset *tileset) |
552
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 { |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 (void)loader; |
593
f9e85d0aca74
rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
553
diff
changeset
|
108 (void)tileset; |
552
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 /* Just ensure we haven't reach the limit. */ |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 assert(animationsz < MLK_UTIL_SIZE(animations)); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 return &animations[animationsz++]; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 } |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 static void |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 init(void) |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 { |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 if (mlk_example_init("example-tileset") < 0) |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 mlk_panic(); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 /* |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 * Demonstrate how we can override functions to use different resources |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 * and/or allocations. |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 * |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 * Images are loaded from the libmlk-example registry from RAM and |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 * sprites animations are statically allocated. |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 */ |
593
f9e85d0aca74
rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
553
diff
changeset
|
129 mlk_tileset_loader_file_init(&loader, ""); |
629
fee7bd30725c
rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents:
593
diff
changeset
|
130 loader.iface.new_texture = new_texture; |
fee7bd30725c
rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents:
593
diff
changeset
|
131 loader.iface.new_sprite = new_sprite; |
fee7bd30725c
rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents:
593
diff
changeset
|
132 loader.iface.new_animation = new_animation; |
552
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 |
629
fee7bd30725c
rpg: cleanup tileset-loader-file
David Demelier <markand@malikania.fr>
parents:
593
diff
changeset
|
134 if (mlk_tileset_loader_openmem(&loader.iface, &tileset, assets_tilesets_world, sizeof (assets_tilesets_world)) < 0) |
552
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 mlk_panic(); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 } |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 static void |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
139 handle(struct mlk_state *st, const union mlk_event *ev) |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
140 { |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
141 (void)st; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
143 switch (ev->type) { |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
144 case MLK_EVENT_QUIT: |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
145 mlk_game_quit(); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
146 break; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 default: |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 break; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 } |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 } |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 static void |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 update(struct mlk_state *st, unsigned int ticks) |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 { |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 (void)st; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 mlk_tileset_update(&tileset, ticks); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 } |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 static void |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 draw(struct mlk_state *st) |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 { |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 (void)st; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 int nc, nr; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 mlk_painter_set_color(MLK_EXAMPLE_BG); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 mlk_painter_clear(); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 /* |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 * Draw the animated tile all over the screen. |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
172 */ |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 nc = (MLK_EXAMPLE_W / tileset.sprite->cellw) + 1; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 nr = (MLK_EXAMPLE_H / tileset.sprite->cellh) + 1; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 for (int r = 0; r < nr; ++r) { |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 for (int c = 0; c < nc; ++c) { |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
178 mlk_tileset_draw(&tileset, 7, 22, |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 c * tileset.sprite->cellw, |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 r * tileset.sprite->cellh); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
181 } |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
182 } |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 mlk_painter_present(); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 } |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 static void |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 run(void) |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
189 { |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
190 struct mlk_state state = { |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 .handle = handle, |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
192 .update = update, |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
193 .draw = draw |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
194 }; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
195 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
196 mlk_game_init(); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
197 mlk_game_push(&state); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 mlk_game_loop(); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 } |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
201 static void |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
202 quit(void) |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 { |
593
f9e85d0aca74
rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
553
diff
changeset
|
204 mlk_tileset_loader_file_finish(&loader); |
552
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
205 mlk_example_finish(); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 } |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
208 int |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 main(int argc, char **argv) |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
210 { |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
211 (void)argc; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
212 (void)argv; |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
213 |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
214 init(); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
215 run(); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
216 quit(); |
ffd972a3d084
rpg: major rewrite of tilesets
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
217 } |