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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }