annotate tools/map/map.c @ 210:70e6ed74940d

rpg: attempt of collide detection in map
author David Demelier <markand@malikania.fr>
date Sat, 14 Nov 2020 16:59:11 +0100
parents 0a6683615c73
children adcbb7ccfdee
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
2 * molko-map.c -- convert tiled tiled JSON files into custom files
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <assert.h>
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <stdarg.h>
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <stdbool.h>
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <stdio.h>
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <stdlib.h>
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
24 #include <stdnoreturn.h>
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include <string.h>
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
27 #include <jansson.h>
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
28
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 static void
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 die(const char *fmt, ...)
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 {
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 assert(fmt);
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
33
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 va_list ap;
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
35
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 va_start(ap, fmt);
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 vfprintf(stderr, fmt, ap);
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 va_end(ap);
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 exit(1);
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 }
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
41
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
42 static bool
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
43 is_layer(const char *name)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
44 {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
45 return strcmp(name, "background") == 0 ||
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
46 strcmp(name, "foreground") == 0 ||
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
47 strcmp(name, "objects") == 0;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
48 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
49
93
d4a72fa16225 misc: miscellaneous issues
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
50 static const json_t *
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
51 find_property(const json_t *props, const char *which)
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
52 {
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
53 json_t *value;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
54 size_t index;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
55
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
56 json_array_foreach(props, index, value) {
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
57 if (!json_is_object(value))
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
58 continue;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
59
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
60 const json_t *key = json_object_get(value, "name");
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
61
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
62 if (json_is_string(key) && strcmp(json_string_value(key), which) == 0)
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
63 return value;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
64 }
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
65
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
66 return NULL;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
67 }
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
68
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
69 static void
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
70 write_title(const json_t *props)
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
71 {
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
72 const json_t *prop_title = find_property(props, "title");
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
73
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
74 if (!prop_title)
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
75 return;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
76
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
77 const json_t *title = json_object_get(prop_title, "value");
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
78
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
79 if (title && json_is_string(title))
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
80 printf("title|%s\n", json_string_value(title));
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
81 }
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
82
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
83 static void
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
84 write_origin(const json_t *props)
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
85 {
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
86 const json_t *prop_origin_x = find_property(props, "origin-x");
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
87 const json_t *prop_origin_y = find_property(props, "origin-y");
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
88
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
89 if (!prop_origin_x || !prop_origin_y)
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
90 return;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
91
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
92 const json_t *origin_x = json_object_get(prop_origin_x, "value");
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
93 const json_t *origin_y = json_object_get(prop_origin_y, "value");
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
94
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
95 if (!origin_x || !json_is_integer(origin_x) ||
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
96 !origin_y || !json_is_integer(origin_y))
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
97 return;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
98
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
99 printf("origin|%lld|%lld\n", json_integer_value(origin_x),
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
100 json_integer_value(origin_y));
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
101 }
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
102
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
103 static void
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
104 write_properties(const json_t *props)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
105 {
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
106 write_title(props);
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
107 write_origin(props);
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
108 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
109
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
110 static void
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
111 write_metadata(const json_t *document)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
112 {
27
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents: 25
diff changeset
113 json_t *width = json_object_get(document, "width");
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
114 json_t *height = json_object_get(document, "height");
27
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents: 25
diff changeset
115 json_t *tilewidth = json_object_get(document, "tilewidth");
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents: 25
diff changeset
116 json_t *tileheight = json_object_get(document, "tileheight");
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
117
27
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents: 25
diff changeset
118 if (!width || !json_is_integer(width))
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents: 25
diff changeset
119 die("missing 'width' property\n");
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
120 if (!height || !json_is_integer(height))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
121 die("missing 'height' property\n");
27
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents: 25
diff changeset
122 if (!tilewidth || !json_is_integer(tilewidth))
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents: 25
diff changeset
123 die("missing 'tilewidth' property\n");
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents: 25
diff changeset
124 if (!tileheight || !json_is_integer(tileheight))
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents: 25
diff changeset
125 die("missing 'tileheight' property\n");
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
126
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
127 printf("width|%lld\n", json_integer_value(width));
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
128 printf("height|%lld\n", json_integer_value(height));
27
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents: 25
diff changeset
129 printf("tilewidth|%lld\n", json_integer_value(tilewidth));
607bd90aba63 core: finalize map converter and opener, closes #2448 @6h
David Demelier <markand@malikania.fr>
parents: 25
diff changeset
130 printf("tileheight|%lld\n", json_integer_value(tileheight));
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
131 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
132
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
133 static void
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
134 write_object_property(int id, const json_t *property)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
135 {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
136 assert(json_is_object(property));
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
137
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
138 json_t *name = json_object_get(property, "name");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
139 json_t *type = json_object_get(property, "type");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
140 json_t *value = json_object_get(property, "value");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
141
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
142 if (!name || !json_is_string(name))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
143 die("invalid 'name' property in object");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
144 if (!type || !json_is_string(type))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
145 die("invalid 'type' property in object");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
146 if (!value || !json_is_string(value))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
147 die("invalid 'value' property in object");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
148
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
149 printf("object-property|%d|%s|%s\n",
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
150 id,
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
151 json_string_value(name),
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
152 json_string_value(value)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
153 );
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
154 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
155
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
156 static void
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
157 write_object(const json_t *object)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
158 {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
159 assert(json_is_object(object));
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
160
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
161 json_t *id = json_object_get(object, "id");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
162 json_t *x = json_object_get(object, "x");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
163 json_t *y = json_object_get(object, "y");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
164 json_t *width = json_object_get(object, "width");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
165 json_t *height = json_object_get(object, "height");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
166 json_t *type = json_object_get(object, "type");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
167 json_t *props = json_object_get(object, "properties");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
168
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
169 if (!id || !json_is_integer(id))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
170 die("invalid 'id' property in object\n");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
171 if (!x || !json_is_real(x))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
172 die("invalid 'x' property in object\n");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
173 if (!y || !json_is_real(y))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
174 die("invalid 'y' property in object\n");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
175 if (!width || !json_is_real(width))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
176 die("invalid 'width' property in object\n");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
177 if (!height || !json_is_real(height))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
178 die("invalid 'height' property in object\n");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
179 if (!type || !json_is_string(type))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
180 die("invalid 'type' property in object\n");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
181
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
182 /* In tiled, those properties are float but we only use ints in MA */
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
183 printf("object|%lld|%s|%d|%d|%d|%d\n",
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
184 json_integer_value(id),
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
185 json_string_value(type),
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
186 (int)json_real_value(x),
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
187 (int)json_real_value(y),
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
188 (int)json_real_value(width),
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
189 (int)json_real_value(height)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
190 );
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
191
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
192 if (json_is_array(props)) {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
193 json_t *prop;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
194 size_t index;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
195
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
196 json_array_foreach(props, index, prop) {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
197 if (!json_is_object(prop))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
198 die("invalid property in object\n");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
199
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
200 write_object_property(json_integer_value(id), prop);
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
201 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
202 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
203 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
204
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
205 static void
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
206 write_layer(const json_t *layer)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
207 {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
208 json_t *objects = json_object_get(layer, "objects");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
209 json_t *data = json_object_get(layer, "data");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
210 json_t *name = json_object_get(layer, "name");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
211 json_t *tile, *object;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
212 size_t index;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
213
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
214 if (!name || !json_is_string(name))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
215 die("invalid 'name' property in layer");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
216 if (!is_layer(json_string_value(name)))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
217 die("invalid 'name' layer: %s\n", json_string_value(name));
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
218
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
219 printf("layer|%s\n", json_string_value(name));
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
220
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
221 /* Only foreground/background have 'data' property */
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
222 if (json_is_array(data)) {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
223 json_array_foreach(data, index, tile) {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
224 if (!json_is_integer(tile))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
225 die("invalid 'data' property in layer\n");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
226
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
227 printf("%lld\n", json_integer_value(tile));
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
228 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
229 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
230
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
231 /* Only objects has 'objects' property */
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
232 if (json_is_array(objects)) {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
233 json_array_foreach(objects, index, object) {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
234 if (!json_is_object(object))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
235 die("invalid 'objects' property in layer\n");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
236
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
237 write_object(object);
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
238 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
239 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
240 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
241
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
242 static void
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
243 write_layers(const json_t *layers)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
244 {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
245 size_t index;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
246 json_t *layer;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
247
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
248 if (!layers)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
249 return;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
250
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
251 json_array_foreach(layers, index, layer) {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
252 if (!json_is_object(layer))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
253 die("layer is not an object\n");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
254
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
255 write_layer(layer);
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
256 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
257 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
258
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
259 static void
210
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
260 write_tileset_tile(const json_t *tile)
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
261 {
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
262 const json_t *id = json_object_get(tile, "id");
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
263 const json_t *objectgroup = json_object_get(tile, "objectgroup");
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
264 const json_t *objects = json_object_get(objectgroup, "objects");
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
265 const json_t *first = json_array_get(objects, 0);
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
266 const json_t *x, *y, *w, *h;
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
267
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
268 if (!json_is_integer(id))
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
269 die("invalid 'id' property in tile\n");
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
270 if (!json_is_object(objectgroup))
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
271 die("invalid 'objectgroup' property in tile\n");
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
272 if (!json_is_array(objects))
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
273 die("invalid 'objects' property in tile\n");
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
274
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
275 x = json_object_get(first, "x");
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
276 y = json_object_get(first, "y");
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
277 w = json_object_get(first, "width");
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
278 h = json_object_get(first, "height");
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
279
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
280 if (!json_is_integer(x) || !json_is_integer(y) ||
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
281 !json_is_integer(w) || !json_is_integer(h))
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
282 die("invalid collide object in tile description\n");
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
283
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
284 printf("%lld|%lld|%lld|%lld|%lld\n",
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
285 json_integer_value(id),
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
286 json_integer_value(x),
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
287 json_integer_value(y),
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
288 json_integer_value(w),
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
289 json_integer_value(h));
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
290 }
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
291
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
292 static void
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
293 write_tileset_tiles(const json_t *tiles)
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
294 {
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
295 size_t index;
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
296 json_t *object;
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
297
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
298 puts("tiles");
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
299
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
300 json_array_foreach(tiles, index, object) {
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
301 if (!json_is_object(object))
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
302 die("tile is not an object\n");
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
303
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
304 write_tileset_tile(object);
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
305 }
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
306 }
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
307
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
308 static void
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
309 write_tileset(const json_t *tileset)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
310 {
210
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
311 const json_t *image = json_object_get(tileset, "image");
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
312 const json_t *tiles = json_object_get(tileset, "tiles");
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
313
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
314 if (!image || !json_is_string(image))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
315 die("invalid 'image' property in tileset");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
316
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
317 printf("tileset|%s\n", json_string_value(image));
210
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
318
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
319 if (json_is_array(tiles))
70e6ed74940d rpg: attempt of collide detection in map
David Demelier <markand@malikania.fr>
parents: 116
diff changeset
320 write_tileset_tiles(tiles);
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
321 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
322
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
323 static void
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
324 write_tilesets(const json_t *tilesets)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
325 {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
326 json_t *tileset;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
327 size_t index;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
328
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
329 if (!json_is_array(tilesets))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
330 die("invalid 'tilesets' property");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
331
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
332 json_array_foreach(tilesets, index, tileset) {
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
333 if (!json_is_object(tileset))
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
334 die("invalid tileset");
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
335
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
336 write_tileset(tileset);
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
337 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
338 }
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
339
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
340 int
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
341 main(void)
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
342 {
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
343 json_t *document;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
344 json_error_t error;
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
345
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
346 document = json_loadf(stdin, 0, &error);
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
347
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
348 if (!document)
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
349 die("%d:%d: %s\n", error.line, error.column, error.text);
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
350
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
351 write_properties(json_object_get(document, "properties"));
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
352 write_metadata(document);
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
353 write_layers(json_object_get(document, "layers"));
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
354 write_tilesets(json_object_get(document, "tilesets"));
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
355
25
0d5ecefcccd3 molko-map: reimplement using JSON as it is supported by tiled, closes #2448 @4h
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
356 json_decref(document);
16
621c815c9509 tools: implement basic molko-map stub, continue #2448
David Demelier <markand@malikania.fr>
parents:
diff changeset
357 }