[Add] Mission now uses stack.
This commit is contained in:
parent
60e08a9e36
commit
5cbb97b279
@ -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]);
|
||||
}
|
||||
|
||||
|
@ -48,4 +48,5 @@ extern Mission player_mission[MISSION_MAX];
|
||||
// Load/Quit.
|
||||
int missions_load(void);
|
||||
void missions_free(void);
|
||||
void missions_cleanup(void);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user