Added getJSONValue to aid with optional JSON data.
This commit is contained in:
parent
b6012a2e21
commit
95cb35d5a1
|
@ -453,11 +453,7 @@ static void loadGuns(Entity *parent, cJSON *guns)
|
||||||
e->offsetY = cJSON_GetObjectItem(gun, "y")->valueint;
|
e->offsetY = cJSON_GetObjectItem(gun, "y")->valueint;
|
||||||
e->texture = getTexture(cJSON_GetObjectItem(gun, "texture")->valuestring);
|
e->texture = getTexture(cJSON_GetObjectItem(gun, "texture")->valuestring);
|
||||||
e->guns[0].type = lookup(cJSON_GetObjectItem(gun, "type")->valuestring);
|
e->guns[0].type = lookup(cJSON_GetObjectItem(gun, "type")->valuestring);
|
||||||
|
e->missiles = getJSONValue(gun, "missiles", 0);
|
||||||
if (cJSON_GetObjectItem(gun, "missiles"))
|
|
||||||
{
|
|
||||||
e->missiles = cJSON_GetObjectItem(gun, "missiles")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(gun, "flags"))
|
if (cJSON_GetObjectItem(gun, "flags"))
|
||||||
{
|
{
|
||||||
|
|
|
@ -47,6 +47,7 @@ extern void addDebris(int x, int y, int amount);
|
||||||
extern void runScriptFunction(char *format, ...);
|
extern void runScriptFunction(char *format, ...);
|
||||||
extern void updateObjective(char *name, int type);
|
extern void updateObjective(char *name, int type);
|
||||||
extern char **getFileList(char *dir, int *count);
|
extern char **getFileList(char *dir, int *count);
|
||||||
|
extern int getJSONValue(cJSON *node, char *name, int defValue);
|
||||||
|
|
||||||
extern Battle battle;
|
extern Battle battle;
|
||||||
extern Entity *self;
|
extern Entity *self;
|
||||||
|
|
|
@ -689,18 +689,12 @@ static void loadFighterDef(char *filename)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(root, "combinedGuns"))
|
e->combinedGuns = getJSONValue(root, "combinedGuns", 0);
|
||||||
{
|
|
||||||
e->combinedGuns = cJSON_GetObjectItem(root, "combinedGuns")->valueint;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
e->selectedGunType = e->guns[0].type;
|
e->selectedGunType = e->guns[0].type;
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(root, "missiles"))
|
e->missiles = getJSONValue(root, "missiles", 0);
|
||||||
{
|
|
||||||
e->missiles = cJSON_GetObjectItem(root, "missiles")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(root, "flags"))
|
if (cJSON_GetObjectItem(root, "flags"))
|
||||||
{
|
{
|
||||||
|
|
|
@ -47,6 +47,7 @@ extern char *getFileLocation(char *filename);
|
||||||
extern void addDebris(int x, int y, int amount);
|
extern void addDebris(int x, int y, int amount);
|
||||||
extern char **getFileList(char *dir, int *count);
|
extern char **getFileList(char *dir, int *count);
|
||||||
extern char *getTranslatedString(char *string);
|
extern char *getTranslatedString(char *string);
|
||||||
|
extern int getJSONValue(cJSON *node, char *name, int defValue);
|
||||||
|
|
||||||
extern App app;
|
extern App app;
|
||||||
extern Battle battle;
|
extern Battle battle;
|
||||||
|
|
|
@ -55,10 +55,7 @@ Mission *loadMissionMeta(char *filename)
|
||||||
STRNCPY(mission->description, _(cJSON_GetObjectItem(root, "description")->valuestring), MAX_DESCRIPTION_LENGTH);
|
STRNCPY(mission->description, _(cJSON_GetObjectItem(root, "description")->valuestring), MAX_DESCRIPTION_LENGTH);
|
||||||
STRNCPY(mission->filename, filename, MAX_DESCRIPTION_LENGTH);
|
STRNCPY(mission->filename, filename, MAX_DESCRIPTION_LENGTH);
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(root, "requires"))
|
mission->requires = getJSONValue(root, "requires", 0);
|
||||||
{
|
|
||||||
mission->requires = cJSON_GetObjectItem(root, "requires")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(root, "epic"))
|
if (cJSON_GetObjectItem(root, "epic"))
|
||||||
{
|
{
|
||||||
|
@ -79,12 +76,14 @@ Mission *loadMissionMeta(char *filename)
|
||||||
if (node)
|
if (node)
|
||||||
{
|
{
|
||||||
mission->challengeData.isChallenge = 1;
|
mission->challengeData.isChallenge = 1;
|
||||||
mission->challengeData.timeLimit = cJSON_GetObjectItem(node, "timeLimit")->valueint * FPS;
|
|
||||||
mission->challengeData.killLimit = cJSON_GetObjectItem(node, "killLimit")->valueint;
|
mission->challengeData.timeLimit = getJSONValue(node, "timeLimit", 0);
|
||||||
mission->challengeData.noMissiles = cJSON_GetObjectItem(node, "noMissiles") ? 1 : 0;
|
mission->challengeData.killLimit = getJSONValue(node, "killLimit", 0);
|
||||||
mission->challengeData.noECM = cJSON_GetObjectItem(node, "noECM") ? 1 : 0;
|
mission->challengeData.waypointLimit = getJSONValue(node, "waypointLimit", 0);
|
||||||
mission->challengeData.noBoost = cJSON_GetObjectItem(node, "noBoost") ? 1 : 0;
|
mission->challengeData.noMissiles = getJSONValue(node, "noMissiles", 0);
|
||||||
mission->challengeData.noGuns = cJSON_GetObjectItem(node, "noGuns") ? 1 : 0;
|
mission->challengeData.noECM = getJSONValue(node, "noECM", 0);
|
||||||
|
mission->challengeData.noBoost = getJSONValue(node, "noBoost", 0);
|
||||||
|
mission->challengeData.noGuns = getJSONValue(node, "noGuns", 0);
|
||||||
|
|
||||||
node = cJSON_GetObjectItem(node, "challenges");
|
node = cJSON_GetObjectItem(node, "challenges");
|
||||||
|
|
||||||
|
@ -152,15 +151,8 @@ void loadMission(char *filename)
|
||||||
loadEpicData(cJSON_GetObjectItem(root, "epic"));
|
loadEpicData(cJSON_GetObjectItem(root, "epic"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(root, "manualComplete"))
|
battle.manualComplete = getJSONValue(root, "manualComplete", 0);
|
||||||
{
|
battle.unwinnable = getJSONValue(root, "unwinnable", 0);
|
||||||
battle.manualComplete = cJSON_GetObjectItem(root, "manualComplete")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(root, "unwinnable"))
|
|
||||||
{
|
|
||||||
battle.unwinnable = cJSON_GetObjectItem(root, "unwinnable")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
initScript(cJSON_GetObjectItem(root, "script"));
|
initScript(cJSON_GetObjectItem(root, "script"));
|
||||||
|
|
||||||
|
@ -324,20 +316,12 @@ static void loadObjectives(cJSON *node)
|
||||||
STRNCPY(o->targetName, cJSON_GetObjectItem(node, "targetName")->valuestring, MAX_NAME_LENGTH);
|
STRNCPY(o->targetName, cJSON_GetObjectItem(node, "targetName")->valuestring, MAX_NAME_LENGTH);
|
||||||
o->targetValue = cJSON_GetObjectItem(node, "targetValue")->valueint;
|
o->targetValue = cJSON_GetObjectItem(node, "targetValue")->valueint;
|
||||||
o->targetType = lookup(cJSON_GetObjectItem(node, "targetType")->valuestring);
|
o->targetType = lookup(cJSON_GetObjectItem(node, "targetType")->valuestring);
|
||||||
|
o->active = getJSONValue(node, "active", 0);
|
||||||
|
o->isCondition = getJSONValue(node, "isCondition", 0);
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "active"))
|
o->isEliminateAll = getJSONValue(node, "isEliminateAll", 0);
|
||||||
|
if (isEliminateAll)
|
||||||
{
|
{
|
||||||
o->active = cJSON_GetObjectItem(node, "active")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "isCondition"))
|
|
||||||
{
|
|
||||||
o->isCondition = cJSON_GetObjectItem(node, "isCondition")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "isEliminateAll"))
|
|
||||||
{
|
|
||||||
o->isEliminateAll = cJSON_GetObjectItem(node, "isEliminateAll")->valueint;
|
|
||||||
o->targetValue = 1;
|
o->targetValue = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -402,31 +386,11 @@ static void loadFighters(cJSON *node)
|
||||||
side = lookup(cJSON_GetObjectItem(node, "side")->valuestring);
|
side = lookup(cJSON_GetObjectItem(node, "side")->valuestring);
|
||||||
x = (cJSON_GetObjectItem(node, "x")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_WIDTH;
|
x = (cJSON_GetObjectItem(node, "x")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_WIDTH;
|
||||||
y = (cJSON_GetObjectItem(node, "y")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_HEIGHT;
|
y = (cJSON_GetObjectItem(node, "y")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_HEIGHT;
|
||||||
|
name = getJSONValueStr(node, "name", NULL);
|
||||||
if (cJSON_GetObjectItem(node, "name"))
|
groupName = getJSONValueStr(node, "groupName", NULL);
|
||||||
{
|
number = getJSONValue(node, "number", 0);
|
||||||
name = cJSON_GetObjectItem(node, "name")->valuestring;
|
scatter = getJSONValue(node, "scatter", 0);
|
||||||
}
|
active = getJSONValue(node, "active", 0);
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "groupName"))
|
|
||||||
{
|
|
||||||
groupName = cJSON_GetObjectItem(node, "groupName")->valuestring;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "number"))
|
|
||||||
{
|
|
||||||
number = cJSON_GetObjectItem(node, "number")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "scatter"))
|
|
||||||
{
|
|
||||||
scatter = cJSON_GetObjectItem(node, "scatter")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "active"))
|
|
||||||
{
|
|
||||||
active = cJSON_GetObjectItem(node, "active")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "flags"))
|
if (cJSON_GetObjectItem(node, "flags"))
|
||||||
{
|
{
|
||||||
|
@ -529,31 +493,11 @@ static void loadCapitalShips(cJSON *node)
|
||||||
side = lookup(cJSON_GetObjectItem(node, "side")->valuestring);
|
side = lookup(cJSON_GetObjectItem(node, "side")->valuestring);
|
||||||
x = (cJSON_GetObjectItem(node, "x")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_WIDTH;
|
x = (cJSON_GetObjectItem(node, "x")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_WIDTH;
|
||||||
y = (cJSON_GetObjectItem(node, "y")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_HEIGHT;
|
y = (cJSON_GetObjectItem(node, "y")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_HEIGHT;
|
||||||
|
name = cJSON_GetObjectItem(node, "name", NULL);
|
||||||
if (cJSON_GetObjectItem(node, "name"))
|
groupName = getJSONValueStr(node, "groupName", NULL);
|
||||||
{
|
number = getJSONValueStr(node, "number", 0);
|
||||||
name = cJSON_GetObjectItem(node, "name")->valuestring;
|
scatter = getJSONValueStr(node, "scatter", 0);
|
||||||
}
|
active = getJSONValue(node, "active", 0);
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "groupName"))
|
|
||||||
{
|
|
||||||
groupName = cJSON_GetObjectItem(node, "groupName")->valuestring;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "number"))
|
|
||||||
{
|
|
||||||
number = cJSON_GetObjectItem(node, "number")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "scatter"))
|
|
||||||
{
|
|
||||||
scatter = cJSON_GetObjectItem(node, "scatter")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "active"))
|
|
||||||
{
|
|
||||||
active = cJSON_GetObjectItem(node, "active")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "flags"))
|
if (cJSON_GetObjectItem(node, "flags"))
|
||||||
{
|
{
|
||||||
|
@ -636,30 +580,15 @@ static void loadEntities(cJSON *node)
|
||||||
active = 1;
|
active = 1;
|
||||||
scatter = 1;
|
scatter = 1;
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "name"))
|
name = getJSONValueStr(node, "name", NULL);
|
||||||
{
|
|
||||||
name = cJSON_GetObjectItem(node, "name")->valuestring;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "groupName"))
|
groupName = getJSONValueStr(node, "groupName", NULL);
|
||||||
{
|
|
||||||
groupName = cJSON_GetObjectItem(node, "groupName")->valuestring;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "number"))
|
number = getJSONValue(node, "number", 0);
|
||||||
{
|
|
||||||
number = cJSON_GetObjectItem(node, "number")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "active"))
|
active = getJSONValue(node, "active", 0);
|
||||||
{
|
|
||||||
active = cJSON_GetObjectItem(node, "active")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "scatter"))
|
scatter = getJSONValue(node, "scatter", 0);
|
||||||
{
|
|
||||||
scatter = cJSON_GetObjectItem(node, "scatter")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0 ; i < number ; i++)
|
for (i = 0 ; i < number ; i++)
|
||||||
{
|
{
|
||||||
|
@ -733,35 +662,20 @@ static void loadItems(cJSON *node)
|
||||||
number = 1;
|
number = 1;
|
||||||
active = 1;
|
active = 1;
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "name"))
|
name = getJSONValueStr(node, "name", NULL);
|
||||||
{
|
|
||||||
name = cJSON_GetObjectItem(node, "name")->valuestring;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "groupName"))
|
groupName = getJSONValueStr(node, "groupName", NULL);
|
||||||
{
|
|
||||||
groupName = cJSON_GetObjectItem(node, "groupName")->valuestring;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "number"))
|
number = getJSONValue(node, "number", 0);
|
||||||
{
|
|
||||||
number = cJSON_GetObjectItem(node, "number")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "scatter"))
|
scatter = getJSONValue(node, "scatter", 0);
|
||||||
{
|
|
||||||
scatter = cJSON_GetObjectItem(node, "scatter")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "flags"))
|
if (cJSON_GetObjectItem(node, "flags"))
|
||||||
{
|
{
|
||||||
flags = flagsToLong(cJSON_GetObjectItem(node, "flags")->valuestring, &addFlags);
|
flags = flagsToLong(cJSON_GetObjectItem(node, "flags")->valuestring, &addFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "active"))
|
active = getJSONValue(node, "active", 0);
|
||||||
{
|
|
||||||
active = cJSON_GetObjectItem(node, "active")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0 ; i < number ; i++)
|
for (i = 0 ; i < number ; i++)
|
||||||
{
|
{
|
||||||
|
@ -833,10 +747,7 @@ static void loadLocations(cJSON *node)
|
||||||
|
|
||||||
l->size = cJSON_GetObjectItem(node, "size")->valueint;
|
l->size = cJSON_GetObjectItem(node, "size")->valueint;
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(node, "active"))
|
active = getJSONValue(node, "active", 0);
|
||||||
{
|
|
||||||
active = cJSON_GetObjectItem(node, "active")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
l->x += (SCREEN_WIDTH / 2);
|
l->x += (SCREEN_WIDTH / 2);
|
||||||
l->y += (SCREEN_HEIGHT / 2);
|
l->y += (SCREEN_HEIGHT / 2);
|
||||||
|
|
|
@ -53,6 +53,8 @@ extern void updateChallengeMissions(void);
|
||||||
extern char *getBackgroundTextureName(int n);
|
extern char *getBackgroundTextureName(int n);
|
||||||
extern char *getPlanetTextureName(int n);
|
extern char *getPlanetTextureName(int n);
|
||||||
extern char *getMusicFilename(int n);
|
extern char *getMusicFilename(int n);
|
||||||
|
extern int getJSONValue(cJSON *node, char *name, int defValue);
|
||||||
|
extern char *getJSONValueStr(cJSON *node, char *name, char *defValue);
|
||||||
|
|
||||||
extern Battle battle;
|
extern Battle battle;
|
||||||
extern Entity *player;
|
extern Entity *player;
|
||||||
|
|
|
@ -56,11 +56,7 @@ static StarSystem *loadStarSystem(cJSON *starSystemJSON)
|
||||||
starSystem->side = lookup(cJSON_GetObjectItem(starSystemJSON, "side")->valuestring);
|
starSystem->side = lookup(cJSON_GetObjectItem(starSystemJSON, "side")->valuestring);
|
||||||
starSystem->x = cJSON_GetObjectItem(starSystemJSON, "x")->valueint;
|
starSystem->x = cJSON_GetObjectItem(starSystemJSON, "x")->valueint;
|
||||||
starSystem->y = cJSON_GetObjectItem(starSystemJSON, "y")->valueint;
|
starSystem->y = cJSON_GetObjectItem(starSystemJSON, "y")->valueint;
|
||||||
|
starSystem->fallsToPandorans = getJSONValue(starSystemJSON, "fallsToPandorans", 0);
|
||||||
if (cJSON_GetObjectItem(starSystemJSON, "fallsToPandorans"))
|
|
||||||
{
|
|
||||||
starSystem->fallsToPandorans = cJSON_GetObjectItem(starSystemJSON, "fallsToPandorans")->valueint;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(starSystem->name, "Sol") == 0)
|
if (strcmp(starSystem->name, "Sol") == 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -28,5 +28,6 @@ extern int isMissionAvailable(Mission *mission, Mission *prev);
|
||||||
extern char *getFileLocation(char *filename);
|
extern char *getFileLocation(char *filename);
|
||||||
extern char **getFileList(char *dir, int *count);
|
extern char **getFileList(char *dir, int *count);
|
||||||
extern Mission *loadMissionMeta(char *filename);
|
extern Mission *loadMissionMeta(char *filename);
|
||||||
|
extern int getJSONValue(cJSON *node, char *name, int defValue);
|
||||||
|
|
||||||
extern Game game;
|
extern Game game;
|
||||||
|
|
|
@ -95,3 +95,30 @@ char *timeToString(long millis, int showHours)
|
||||||
|
|
||||||
return TIME;
|
return TIME;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *getJSONValueStr(cJSON *node, char *name, char *defValue)
|
||||||
|
{
|
||||||
|
cJSON *child;
|
||||||
|
|
||||||
|
if (node)
|
||||||
|
{
|
||||||
|
child = cJSON_GetObjectItem(node, name);
|
||||||
|
|
||||||
|
if (child)
|
||||||
|
{
|
||||||
|
return child->valuestring;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return defValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getJSONValue(cJSON *node, char *name, int defValue)
|
||||||
|
{
|
||||||
|
char *result = getJSONValueStr(node, name, defValue);
|
||||||
|
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
return aoti(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue