--- a/project_files/frontlib/model/team.c Mon Jun 11 00:06:22 2012 +0200
+++ b/project_files/frontlib/model/team.c Tue Jun 12 11:25:05 2012 +0200
@@ -1,1 +1,109 @@
#include "team.h"
+
+#include "../util/inihelper.h"
+#include "../util/util.h"
+#include "../util/logging.h"
+
+static flib_team *from_ini_handleError(flib_team *result, dictionary *settingfile, char **bindingKeys) {
+ if(settingfile) {
+ iniparser_freedict(settingfile);
+ }
+ flib_team_destroy(result);
+ free(bindingKeys);
+ return NULL;
+}
+
+flib_team *flib_team_from_ini(const char *filename) {
+ flib_team *result = flib_calloc(1, sizeof(flib_team));
+ dictionary *settingfile = NULL;
+ char **bindingKeys = NULL;
+
+ if(!filename) {
+ flib_log_e("null parameter in flib_team_from_ini");
+ return from_ini_handleError(result, settingfile, bindingKeys);
+ }
+
+ if(!result) {
+ return from_ini_handleError(result, settingfile, bindingKeys);
+ }
+
+ settingfile = iniparser_load(filename);
+ if(!settingfile) {
+ flib_log_e("Error loading team file %s", filename);
+ return from_ini_handleError(result, settingfile, bindingKeys);
+ }
+
+ bool error = false;
+ result->name = inihelper_getstringdup(settingfile, &error, "team", "name");
+ result->grave = inihelper_getstringdup(settingfile, &error, "team", "grave");
+ result->fort = inihelper_getstringdup(settingfile, &error, "team", "fort");
+ result->voicepack = inihelper_getstringdup(settingfile, &error, "team", "voicepack");
+ result->flag = inihelper_getstringdup(settingfile, &error, "team", "flag");
+ result->rounds = inihelper_getint(settingfile, &error, "team", "rounds");
+ result->wins = inihelper_getint(settingfile, &error, "team", "wins");
+ result->campaignProgress = inihelper_getint(settingfile, &error, "team", "campaignprogress");
+ int difficulty = inihelper_getint(settingfile, &error, "team", "difficulty");
+
+ char sectionName[10];
+ strcpy(sectionName, "hedgehog0");
+ for(int i=0; i<HEDGEHOGS_PER_TEAM; i++) {
+ sectionName[8] = '0'+i;
+ result->hogs[i].name = inihelper_getstringdup(settingfile, &error, sectionName, "name");
+ result->hogs[i].hat = inihelper_getstringdup(settingfile, &error, sectionName, "hat");
+ result->hogs[i].rounds = inihelper_getint(settingfile, &error, sectionName, "rounds");
+ result->hogs[i].kills = inihelper_getint(settingfile, &error, sectionName, "kills");
+ result->hogs[i].deaths = inihelper_getint(settingfile, &error, sectionName, "deaths");
+ result->hogs[i].suicides = inihelper_getint(settingfile, &error, sectionName, "suicides");
+ result->hogs[i].difficulty = difficulty;
+ result->hogs[i].initialHealth = TEAM_DEFAULT_HEALTH;
+ }
+
+ result->bindingCount = iniparser_getsecnkeys(settingfile, "binds");
+ result->bindings = flib_calloc(result->bindingCount, sizeof(flib_binding));
+ bindingKeys = iniparser_getseckeys(settingfile, "binds");
+ if(!result->bindings || !bindingKeys) {
+ return from_ini_handleError(result, settingfile, bindingKeys);
+ }
+
+ for(int i=0; i<result->bindingCount; i++) {
+ result->bindings[i].binding = flib_strdupnull(iniparser_getstring(settingfile, bindingKeys[i], NULL));
+ // The key names all start with "binds:", so we skip that.
+ result->bindings[i].action = inihelper_urldecode(bindingKeys[i]+strlen("binds:"));
+ if(!result->bindings[i].action || !result->bindings[i].binding) {
+ error = true;
+ }
+ }
+
+ if(error) {
+ flib_log_e("Error reading team file %s", filename);
+ return from_ini_handleError(result, settingfile, bindingKeys);
+ }
+
+ iniparser_freedict(settingfile);
+ free(bindingKeys);
+ return result;
+}
+
+void flib_team_destroy(flib_team *team) {
+ if(team) {
+ for(int i=0; i<HEDGEHOGS_PER_TEAM; i++) {
+ free(team->hogs[i].name);
+ free(team->hogs[i].hat);
+ }
+ free(team->name);
+ free(team->grave);
+ free(team->fort);
+ free(team->voicepack);
+ free(team->flag);
+ if(team->bindings) {
+ for(int i=0; i<team->bindingCount; i++) {
+ free(team->bindings[i].action);
+ free(team->bindings[i].binding);
+ }
+ }
+ free(team->bindings);
+ free(team->hash);
+ flib_weaponset_destroy(team->weaponset);
+ free(team);
+ }
+}