annotate mlk-tileset/mlk-tileset.c @ 594:e070fdcc592b

misc: various cleanups
author David Demelier <markand@malikania.fr>
date Fri, 24 Mar 2023 15:15:31 +0100
parents 0407f746a571
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 551
diff changeset
2 * mlk-tileset.c -- convert tiled tilesets JSON files into custom files
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
445
773a082f0b91 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 435
diff changeset
4 * Copyright (c) 2020-2023 David Demelier <markand@malikania.fr>
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <assert.h>
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <stdio.h>
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
21 #include <string.h>
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
22
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <jansson.h>
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
24
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 551
diff changeset
25 #include <mlk/util/util.h>
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 static void
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 write_dimensions(const json_t *document)
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 {
579
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
30 const json_t *tilewidth, *tileheight;
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
31
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
32 tilewidth = json_object_get(document, "tilewidth");
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
33 tileheight = json_object_get(document, "tileheight");
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
34
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 if (!json_is_integer(tilewidth))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 551
diff changeset
36 mlk_util_die("invalid 'tilewidth' property\n");
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 if (!json_is_integer(tileheight))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 551
diff changeset
38 mlk_util_die("invalid 'tileheight' property\n");
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
39
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 printf("tilewidth|%u\n", (unsigned int)json_integer_value(tilewidth));
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 printf("tileheight|%u\n", (unsigned int)json_integer_value(tileheight));
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 }
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
43
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 static void
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 write_image(const json_t *document)
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 {
579
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
47 const json_t *image;
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
48
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
49 image = json_object_get(document, "image");
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
50
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 if (!json_is_string(image))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 551
diff changeset
52 mlk_util_die("invalid 'image' property\n");
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
53
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 printf("image|%s\n", json_string_value(image));
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 }
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
56
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
57 static const json_t *
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
58 find_property_value(const json_t *array, const char *prop)
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
59 {
579
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
60 const json_t *obj, *name;
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
61 size_t i;
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
62
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
63 json_array_foreach(array, i, obj) {
579
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
64 name = json_object_get(obj, "name");
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
65
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
66 if (!name || !json_is_string(name))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 551
diff changeset
67 mlk_util_die("invalid property object\n");
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
68
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
69 if (strcmp(json_string_value(name), prop) == 0)
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
70 return json_object_get(obj, "value");
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
71 }
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
72
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
73 return NULL;
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
74 }
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
75
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
76 static void
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
77 write_animation(const json_t *tile)
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
78 {
579
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
79 const json_t *id, *properties, *file, *delay;
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
80
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
81 id = json_object_get(tile, "id");
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
82 properties = json_object_get(tile, "properties");
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
83 file = find_property_value(properties, "animation-file");
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
84 delay = find_property_value(properties, "animation-delay");
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
85
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
86 /* Animations are completely optional. */
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
87 if (!json_is_array(properties))
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
88 return;
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
89
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
90 if (!json_is_integer(id))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 551
diff changeset
91 mlk_util_die("invalid 'id' property in tile\n");
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
92
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
93 if (json_is_string(file)) {
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
94 printf("%d|%s|", (int)json_integer_value(id), json_string_value(file));
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
95
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
96 if (json_is_integer(delay))
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
97 printf("%d\n", (int)json_integer_value(delay));
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
98 else
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
99 printf("10\n");
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
100 }
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
101 }
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
102
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 static void
551
856c2e96189d cmake: add support for maps/tilesets
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
104 write_collision(const json_t *tile)
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 {
579
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
106 const json_t *id, *objectgroup, *objects, *first, *x, *y, *w, *h;
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
107
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
108 id = json_object_get(tile, "id");
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
109 objectgroup = json_object_get(tile, "objectgroup");
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
110 objects = json_object_get(objectgroup, "objects");
0407f746a571 mlk-tileset: follow conventions
David Demelier <markand@malikania.fr>
parents: 557
diff changeset
111 first = json_array_get(objects, 0);
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
112
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
113 /* Collisions are optional. */
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
114 if (!json_is_object(objectgroup))
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
115 return;
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
116
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 if (!json_is_integer(id))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 551
diff changeset
118 mlk_util_die("invalid 'id' property in tile\n");
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 if (!json_is_array(objects))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 551
diff changeset
120 mlk_util_die("invalid 'objects' property in tile\n");
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
121
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
122 x = json_object_get(first, "x");
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 y = json_object_get(first, "y");
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 w = json_object_get(first, "width");
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 h = json_object_get(first, "height");
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
126
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 if (!json_is_integer(x) || !json_is_integer(y) ||
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 !json_is_integer(w) || !json_is_integer(h))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 551
diff changeset
129 mlk_util_die("invalid collide object in tile description\n");
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
130
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 printf("%d|%d|%d|%d|%d\n",
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 (int)json_integer_value(id),
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 (int)json_integer_value(x),
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 (int)json_integer_value(y),
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 (int)json_integer_value(w),
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 (int)json_integer_value(h));
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 }
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
138
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 static void
551
856c2e96189d cmake: add support for maps/tilesets
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
140 write_collisions(const json_t *tiles)
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 {
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 size_t index;
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 json_t *object;
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
144
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 if (!json_is_array(tiles))
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
146 return;
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
147
551
856c2e96189d cmake: add support for maps/tilesets
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
148 printf("collisions\n");
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
149
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 json_array_foreach(tiles, index, object) {
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 if (!json_is_object(object))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 551
diff changeset
152 mlk_util_die("tile is not an object\n");
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
153
551
856c2e96189d cmake: add support for maps/tilesets
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
154 write_collision(object);
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 }
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 }
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
157
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
158 static void
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
159 write_animations(const json_t *tiles)
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
160 {
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
161 size_t index;
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
162 json_t *object;
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
163
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
164 if (!json_is_array(tiles))
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
165 return;
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
166
551
856c2e96189d cmake: add support for maps/tilesets
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
167 printf("animations\n");
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
168
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
169 json_array_foreach(tiles, index, object) {
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
170 if (!json_is_object(object))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 551
diff changeset
171 mlk_util_die("tile is not an object\n");
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
172
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
173 write_animation(object);
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
174 }
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
175 }
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
176
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 int
594
e070fdcc592b misc: various cleanups
David Demelier <markand@malikania.fr>
parents: 579
diff changeset
178 main(void)
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 {
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 json_t *document;
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 json_error_t error;
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
182
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 document = json_loadf(stdin, 0, &error);
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
184
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 if (!document)
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 551
diff changeset
186 mlk_util_die("%d:%d: %s\n", error.line, error.column, error.text);
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 if (!json_is_object(document))
557
944798a59b8a util: introduce mlk_util_die
David Demelier <markand@malikania.fr>
parents: 551
diff changeset
188 mlk_util_die("root value isn't an object\n");
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
189
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
190 write_dimensions(document);
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 write_image(document);
551
856c2e96189d cmake: add support for maps/tilesets
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
192 write_collisions(json_object_get(document, "tiles"));
218
71f989ae8de9 rpg: add support for animated tiles
David Demelier <markand@malikania.fr>
parents: 215
diff changeset
193 write_animations(json_object_get(document, "tiles"));
215
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
194
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 json_decref(document);
64f24b482722 rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 }