[Add] Implemented pilot memory tables.
This commit is contained in:
parent
980282f655
commit
b9f97f321b
35
src/ai.c
35
src/ai.c
@ -99,6 +99,7 @@ static void ai_freetask(Task* t);
|
|||||||
void ai_attacked(Pilot* attacked, const unsigned int attacker); /* weapon.c */
|
void ai_attacked(Pilot* attacked, const unsigned int attacker); /* weapon.c */
|
||||||
void ai_create(Pilot* pilot);
|
void ai_create(Pilot* pilot);
|
||||||
/* C routines made external. */
|
/* C routines made external. */
|
||||||
|
void ai_pinit(Pilot* p, AI_Profile* ai);
|
||||||
void ai_destroy(Pilot* p);
|
void ai_destroy(Pilot* p);
|
||||||
void ai_think(Pilot* pilot);
|
void ai_think(Pilot* pilot);
|
||||||
|
|
||||||
@ -240,6 +241,12 @@ static int ai_status = AI_STATUS_NORMAL;
|
|||||||
* @param[in] funcname Function to run.
|
* @param[in] funcname Function to run.
|
||||||
*/
|
*/
|
||||||
static void ai_run(lua_State* L, const char* funcname) {
|
static void ai_run(lua_State* L, const char* funcname) {
|
||||||
|
/* Set the pilot's memory. */
|
||||||
|
lua_getglobal(L, "pilotmem");
|
||||||
|
lua_pushnumber(L, cur_pilot->id);
|
||||||
|
lua_gettable(L, -2);
|
||||||
|
lua_setglobal(L, "mem");
|
||||||
|
|
||||||
lua_getglobal(L, funcname);
|
lua_getglobal(L, funcname);
|
||||||
if(lua_pcall(L, 0, 0, 0))
|
if(lua_pcall(L, 0, 0, 0))
|
||||||
/* Errors accured. */
|
/* Errors accured. */
|
||||||
@ -247,6 +254,20 @@ static void ai_run(lua_State* L, const char* funcname) {
|
|||||||
cur_pilot->name, funcname, lua_tostring(L,-1));
|
cur_pilot->name, funcname, lua_tostring(L,-1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @fn
|
||||||
|
*/
|
||||||
|
void ai_pinit(Pilot* p, AI_Profile* ai) {
|
||||||
|
lua_State* L;
|
||||||
|
L = ai->L;
|
||||||
|
|
||||||
|
/* Adds a new pilot memory in the memory table. */
|
||||||
|
lua_getglobal(L, "pilotmem");
|
||||||
|
lua_pushnumber(L, p->id);
|
||||||
|
lua_newtable(L);
|
||||||
|
lua_settable(L, -3);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @fn void ai_destroy(Pilot* p)
|
* @fn void ai_destroy(Pilot* p)
|
||||||
*
|
*
|
||||||
@ -255,6 +276,16 @@ static void ai_run(lua_State* L, const char* funcname) {
|
|||||||
* @param[in] p Pilot to destroy it's AI part.
|
* @param[in] p Pilot to destroy it's AI part.
|
||||||
*/
|
*/
|
||||||
void ai_destroy(Pilot* p) {
|
void ai_destroy(Pilot* p) {
|
||||||
|
lua_State* L;
|
||||||
|
L = p->ai->L;
|
||||||
|
|
||||||
|
/* Get rid of pilot's memory. */
|
||||||
|
lua_getglobal(L, "pilotmem");
|
||||||
|
lua_pushnumber(L, p->id);
|
||||||
|
lua_pushnil(L);
|
||||||
|
lua_settable(L, -3);
|
||||||
|
|
||||||
|
/* Clean up tasks. */
|
||||||
if(p->task)
|
if(p->task)
|
||||||
ai_freetask(p->task);
|
ai_freetask(p->task);
|
||||||
}
|
}
|
||||||
@ -347,6 +378,10 @@ static int ai_loadProfile(char* filename) {
|
|||||||
|
|
||||||
free(buf);
|
free(buf);
|
||||||
|
|
||||||
|
/* Add the player memory. */
|
||||||
|
lua_newtable(L);
|
||||||
|
lua_setglobal(L, "pilotmem");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,6 +46,7 @@ static int nfleets = 0; /** Number of fleets. */
|
|||||||
|
|
||||||
/* External. */
|
/* External. */
|
||||||
/* AI. */
|
/* AI. */
|
||||||
|
extern void ai_pinit(Pilot* p, AI_Profile* ai);
|
||||||
extern void ai_destroy(Pilot* p);
|
extern void ai_destroy(Pilot* p);
|
||||||
extern void ai_think(Pilot* pilot);
|
extern void ai_think(Pilot* pilot);
|
||||||
extern void ai_create(Pilot* pilot);
|
extern void ai_create(Pilot* pilot);
|
||||||
@ -1212,7 +1213,10 @@ void pilot_init(Pilot* pilot, Ship* ship, char* name, int faction,
|
|||||||
pilot->faction = faction;
|
pilot->faction = faction;
|
||||||
|
|
||||||
/* AI. */
|
/* AI. */
|
||||||
pilot->ai = ai;
|
if(ai != NULL) {
|
||||||
|
ai_pinit(pilot, ai);
|
||||||
|
pilot->ai = ai;
|
||||||
|
}
|
||||||
|
|
||||||
/* Solid. */
|
/* Solid. */
|
||||||
pilot->solid = solid_create(ship->mass, dir, pos, vel);
|
pilot->solid = solid_create(ship->mass, dir, pos, vel);
|
||||||
@ -1368,12 +1372,13 @@ Pilot* pilot_copy(Pilot* src) {
|
|||||||
* @param p Pilot to free.
|
* @param p Pilot to free.
|
||||||
*/
|
*/
|
||||||
void pilot_free(Pilot* p) {
|
void pilot_free(Pilot* p) {
|
||||||
|
if(p->ai != NULL)
|
||||||
|
ai_destroy(p); /* Must be destroyed first if applicable. */
|
||||||
if(player == p) player = NULL;
|
if(player == p) player = NULL;
|
||||||
solid_free(p->solid);
|
solid_free(p->solid);
|
||||||
if(p->outfits) free(p->outfits);
|
if(p->outfits) free(p->outfits);
|
||||||
free(p->name);
|
free(p->name);
|
||||||
if(p->commodities) free(p->commodities);
|
if(p->commodities) free(p->commodities);
|
||||||
ai_destroy(p);
|
|
||||||
free(p);
|
free(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user