From e9b9c9783a9c0faab4ca66ac47f9cac8380e7207 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 7 Mar 2014 08:03:53 -0800 Subject: [PATCH] export factions, too give this a header and some flags so we can choose in detail what to export. --- src/export.c | 44 ++++++++++++++++++++++++++++++++------------ src/export.h | 12 ++++++++++++ src/kernel/region.h | 1 + 3 files changed, 45 insertions(+), 12 deletions(-) create mode 100644 src/export.h diff --git a/src/export.c b/src/export.c index 83d3e42c5..2a3e7ea21 100644 --- a/src/export.c +++ b/src/export.c @@ -1,24 +1,43 @@ +#include +#include #include + +#include "export.h" + #include #include +#include #include #include #include "cJSON.h" -void export_json(stream * out) { - region * r; +void export_json(stream * out, unsigned int flags) { cJSON *json, *root = cJSON_CreateObject(); - cJSON_AddItemToObject(root, "regions", json = cJSON_CreateObject()); - for (r=regions; r; r=r->next) { - char id[32]; - cJSON *data; - snprintf(id, sizeof(id), "%u", r->uid); - cJSON_AddItemToObject(json, id, data = cJSON_CreateObject()); - cJSON_AddNumberToObject(data, "x", r->x); - cJSON_AddNumberToObject(data, "y", r->y); - cJSON_AddStringToObject(data, "type", r->terrain->_name); + if (flags & EXPORT_REGIONS) { + region * r; + cJSON_AddItemToObject(root, "regions", json = cJSON_CreateObject()); + for (r = regions; r; r = r->next) { + char id[32]; + cJSON *data; + snprintf(id, sizeof(id), "%u", r->uid); + cJSON_AddItemToObject(json, id, data = cJSON_CreateObject()); + cJSON_AddNumberToObject(data, "x", r->x); + cJSON_AddNumberToObject(data, "y", r->y); + cJSON_AddStringToObject(data, "type", r->terrain->_name); + } } - if (out) { + if (flags & EXPORT_FACTIONS) { + faction *f; + cJSON_AddItemToObject(root, "factions", json = cJSON_CreateObject()); + for (f = factions; f; f = f->next) { + cJSON *data; + cJSON_AddItemToObject(json, itoa36(f->no), data = cJSON_CreateObject()); + cJSON_AddStringToObject(data, "name", f->name); + cJSON_AddStringToObject(data, "email", f->email); + cJSON_AddNumberToObject(data, "score", f->score); + } + } + if (flags) { char *tok, *output; output = cJSON_Print(json); tok = strtok(output, "\n\r"); @@ -30,4 +49,5 @@ void export_json(stream * out) { } free(output); } + cJSON_Delete(root); } diff --git a/src/export.h b/src/export.h new file mode 100644 index 000000000..1fa23f5c5 --- /dev/null +++ b/src/export.h @@ -0,0 +1,12 @@ +#pragma once +#ifndef ERESSEA_EXPORT_H +#define ERESSEA_EXPORT_H + +#define EXPORT_REGIONS 1<<0 +#define EXPORT_FACTIONS 1<<1 +#define EXPORT_UNITS 1<<2 + +struct stream; +void export_json(struct stream * out, unsigned int flags); + +#endif diff --git a/src/kernel/region.h b/src/kernel/region.h index 2cdd3dd95..02a653982 100644 --- a/src/kernel/region.h +++ b/src/kernel/region.h @@ -22,6 +22,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. extern "C" { #endif +#include #include "types.h" /* FAST_CONNECT: regions are directly connected to neighbours, saves doing