[Change] Cleaned up some code.

This commit is contained in:
Allanis 2014-04-12 21:04:39 +01:00
parent 2e65fb94a1
commit 6769b024b3
2 changed files with 24 additions and 16 deletions

6
TODO
View File

@ -4,11 +4,11 @@ Vital:
-- Interference -- Interference
-- Asteroids. -- Asteroids.
-- Real news. -- Real news.
-- Event System.
-- Like mission system, but they occur naturally/randomly.
-- Has similar power to mission system.
Major: Major:
-- Event System.
-- Like mission system, but they accur naturally/randomly.
-- Had similar power to mission system
-- Unique pilot system (besides mission uniques). -- Unique pilot system (besides mission uniques).
-- Escorts available for hire. -- Escorts available for hire.
-- Nicer AI. -- Nicer AI.

View File

@ -23,6 +23,8 @@
#define PLAYER_ALLY 70. /**< Above this, player is considered ally. */ #define PLAYER_ALLY 70. /**< Above this, player is considered ally. */
#define CHUNK_SIZE 32 /**< Size of chunk for allocation. */
/** /**
* @struct Faction. * @struct Faction.
* *
@ -53,15 +55,13 @@ static int faction_nstack = 0; /**< Number of factions in the faction s
/* Static. */ /* Static. */
static int faction_isFaction(int f); static int faction_isFaction(int f);
static void faction_sanitizePlayer(Faction* faction); static void faction_sanitizePlayer(Faction* faction);
static Faction* faction_parse(xmlNodePtr parent); static int faction_parse(Faction* tmp, xmlNodePtr parent);
static void faction_parseSocial(xmlNodePtr parent); static void faction_parseSocial(xmlNodePtr parent);
/* Extern. */ /* Extern. */
int pfaction_save(xmlTextWriterPtr writer); int pfaction_save(xmlTextWriterPtr writer);
int pfaction_load(xmlNodePtr parent); int pfaction_load(xmlNodePtr parent);
/** /**
* @fn int faction_get(const char* name)
*
* @brief Get a faction ID by name. * @brief Get a faction ID by name.
* @param name Name of the faction to seek. * @param name Name of the faction to seek.
* @return ID of the faction. * @return ID of the faction.
@ -437,13 +437,13 @@ static int faction_isFaction(int f) {
* @param parent Parent node to extract faction from. * @param parent Parent node to extract faction from.
* @return Faction created from parent node. * @return Faction created from parent node.
*/ */
static Faction* faction_parse(xmlNodePtr parent) { static int faction_parse(Faction* tmp, xmlNodePtr parent) {
xmlNodePtr node; xmlNodePtr node;
int player; int player;
Faction* tmp;
char buf[PATH_MAX]; char buf[PATH_MAX];
tmp = CALLOC_L(Faction); /* Clear memory. */
memset(tmp, 0, sizeof(Faction));
tmp->name = xml_nodeProp(parent, "name"); tmp->name = xml_nodeProp(parent, "name");
if(tmp->name == NULL) if(tmp->name == NULL)
@ -470,7 +470,7 @@ static Faction* faction_parse(xmlNodePtr parent) {
if(player == 0) WARN("Faction '%s' missing player tag", tmp->name); if(player == 0) WARN("Faction '%s' missing player tag", tmp->name);
return tmp; return 0;
} }
/* Parse the social tidbits: Allies and enemies. */ /* Parse the social tidbits: Allies and enemies. */
@ -531,14 +531,13 @@ void factions_reset(void) {
* @return 0 on success. * @return 0 on success.
*/ */
int factions_load(void) { int factions_load(void) {
int mem;
uint32_t bufsize; uint32_t bufsize;
char* buf = pack_readfile(DATA, FACTION_DATA, &bufsize); char* buf = pack_readfile(DATA, FACTION_DATA, &bufsize);
xmlNodePtr factions, node; xmlNodePtr factions, node;
xmlDocPtr doc = xmlParseMemory(buf, bufsize); xmlDocPtr doc = xmlParseMemory(buf, bufsize);
Faction* tmp = NULL;
node = doc->xmlChildrenNode; /* Faction node. */ node = doc->xmlChildrenNode; /* Faction node. */
if(!xml_isNode(node, XML_FACTION_ID)) { if(!xml_isNode(node, XML_FACTION_ID)) {
ERR("Malformed "FACTION_DATA" file: missing root element '"XML_FACTION_ID"'"); ERR("Malformed "FACTION_DATA" file: missing root element '"XML_FACTION_ID"'");
@ -559,15 +558,24 @@ int factions_load(void) {
/* First pass. */ /* First pass. */
node = factions; node = factions;
mem = 0;
do { do {
if(xml_isNode(node, XML_FACTION_TAG)) { if(xml_isNode(node, XML_FACTION_TAG)) {
tmp = faction_parse(node); /* See if stack needs to grow. */
faction_stack = realloc(faction_stack, sizeof(Faction)*(++faction_nstack)); faction_nstack++;
memcpy(faction_stack + faction_nstack - 1, tmp, sizeof(Faction)); if(faction_nstack > mem) {
free(tmp); mem += CHUNK_SIZE;
faction_stack = realloc(faction_stack, sizeof(Faction)*mem);
}
/* Load faction. */
faction_parse(&faction_stack[faction_nstack-1], node);
} }
} while(xml_nextNode(node)); } while(xml_nextNode(node));
/* Shrink stack to minimum size. */
faction_stack = realloc(faction_stack, sizeof(Faction)*faction_nstack);
/* Second pass - Set allies and enemies. */ /* Second pass - Set allies and enemies. */
node = factions; node = factions;
do { do {