[Add] Mission now uses stack.

This commit is contained in:
Allanis 2013-03-28 16:29:48 +00:00
parent 60e08a9e36
commit 5cbb97b279
2 changed files with 52 additions and 2 deletions

View File

@ -13,11 +13,16 @@
Mission player_missions[MISSION_MAX];
// Mission stack.
//static Mission* mission_stack = NULL; // Unmuteable after creation.
//static int mission_nstack = 0;
static Mission* mission_stack = NULL; // Unmuteable after creation.
static int mission_nstack = 0;
// Extern.
extern int misn_run(Mission* misn, char* func);
// Static.
static void mission_cleanup(Mission* misn);
static void mission_free(MissionData* mission);
// Create a mission.
int mission_create(MissionData* misn) {
int i;
@ -39,6 +44,36 @@ int mission_create(MissionData* misn) {
return 0;
}
// Clean up a mission.
static void mission_cleanup(Mission* misn) {
misn->data = NULL;
if(misn->title) free(misn->title);
if(misn->desc) free(misn->desc);
if(misn->reward) free(misn->reward);
lua_close(misn->L);
}
// Free a mission.
static void mission_free(MissionData* mission) {
if(mission->name) {
free(mission->name);
mission->name = NULL;
}
if(mission->avail.planet) {
free(mission->avail.planet);
mission->avail.planet = NULL;
}
if(mission->avail.system) {
free(mission->avail.system);
mission->avail.system = NULL;
}
if(mission->avail.factions) {
free(mission->avail.factions);
mission->avail.factions = NULL;
mission->avail.nfactions = 0;
}
}
// Load/Free.
int missions_load(void) {
#if 0
@ -63,6 +98,20 @@ int missions_load(void) {
}
void missions_free(void) {
int i;
// Free the mission data.
for(i = 0; i < mission_nstack; i++)
mission_free(&mission_stack[i]);
free(mission_stack);
mission_stack = NULL;
mission_nstack = 0;
}
void missions_cleanup(void) {
int i;
for(i = 0; i < MISSION_MAX; i++)
mission_cleanup(&player_missions[i]);
}

View File

@ -48,4 +48,5 @@ extern Mission player_mission[MISSION_MAX];
// Load/Quit.
int missions_load(void);
void missions_free(void);
void missions_cleanup(void);