diff 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
line wrap: on
line diff
--- a/tools/map/map.c	Wed Nov 11 17:10:40 2020 +0100
+++ b/tools/map/map.c	Sat Nov 14 16:59:11 2020 +0100
@@ -257,14 +257,67 @@
 }
 
 static void
+write_tileset_tile(const json_t *tile)
+{
+	const json_t *id = json_object_get(tile, "id");
+	const json_t *objectgroup = json_object_get(tile, "objectgroup");
+	const json_t *objects = json_object_get(objectgroup, "objects");
+	const json_t *first = json_array_get(objects, 0);
+	const json_t *x, *y, *w, *h;
+
+	if (!json_is_integer(id))
+		die("invalid 'id' property in tile\n");
+	if (!json_is_object(objectgroup))
+		die("invalid 'objectgroup' property in tile\n");
+	if (!json_is_array(objects))
+		die("invalid 'objects' property in tile\n");
+
+	x = json_object_get(first, "x");
+	y = json_object_get(first, "y");
+	w = json_object_get(first, "width");
+	h = json_object_get(first, "height");
+
+	if (!json_is_integer(x) || !json_is_integer(y) ||
+	    !json_is_integer(w) || !json_is_integer(h))
+		die("invalid collide object in tile description\n");
+
+	printf("%lld|%lld|%lld|%lld|%lld\n",
+	    json_integer_value(id),
+	    json_integer_value(x),
+	    json_integer_value(y),
+	    json_integer_value(w),
+	    json_integer_value(h));
+}
+
+static void
+write_tileset_tiles(const json_t *tiles)
+{
+	size_t index;
+	json_t *object;
+
+	puts("tiles");
+
+	json_array_foreach(tiles, index, object) {
+		if (!json_is_object(object))
+			die("tile is not an object\n");
+
+		write_tileset_tile(object);
+	}
+}
+
+static void
 write_tileset(const json_t *tileset)
 {
-	json_t *image = json_object_get(tileset, "image");
+	const json_t *image = json_object_get(tileset, "image");
+	const json_t *tiles = json_object_get(tileset, "tiles");
 
 	if (!image || !json_is_string(image))
 		die("invalid 'image' property in tileset");
 
 	printf("tileset|%s\n", json_string_value(image));
+
+	if (json_is_array(tiles))
+		write_tileset_tiles(tiles);
 }
 
 static void