diff --git a/src/ai.c b/src/ai.c index 1a5b9ae..1b0fb69 100644 --- a/src/ai.c +++ b/src/ai.c @@ -1,4 +1,3 @@ -// Woot, LUA!!!!!! #include "lauxlib.h" #include "lualib.h" @@ -50,8 +49,6 @@ #define luaL_register(L,n,l) (luaL_openlib(L, (n),(l), 0)) // Creates a new lua table. #define newtable(L) (lua_newtable(L), lua_gettop(L)) -// Call the AI function with name f. -#define AI_LCALL(f) (lua_getglobal(L, f), lua_pcall(L, 0, 0, 0)) // Register a number constant n to name s (syntax is just like lua_regfunc). #define lua_regnumber(l,s,n) (lua_pushnumber(l,n), lua_setglobal(l,s)) // Registers a C function. @@ -88,6 +85,7 @@ static int ai_minbrakedist(lua_State* L); // Minimal breaking distance. static int ai_accel(lua_State* L); // Accelerate. // Internal C routines. +static void ai_run(const char* funcname); static int ai_loadProfile(char* filename); static void ai_freetask(Task* t); // External C routines. @@ -212,6 +210,14 @@ static int pilot_target = 0; #define AI_STATUS_CREATE 2 static int ai_status = AI_STATUS_NORMAL; +// Attempt to run a function. +static void ai_run(const char* funcname) { + lua_getglobal(L, funcname); + if(lua_pcall(L, 0, 0, 0)) + // Errors accured. + WARN("%s", lua_tostring(L, -1)); +} + // Destroy the AI part of the pilot. void ai_destroy(Pilot* p) { if(p->task) @@ -326,13 +332,13 @@ void ai_think(Pilot* pilot) { // Control function if pilot is idle or tick is up. if((cur_pilot->tcontrol < SDL_GetTicks()) || (cur_pilot->task == NULL)) { - AI_LCALL("control"); // Run control. + ai_run("control"); // Run control. lua_getglobal(L, "control_rate"); cur_pilot->tcontrol = SDL_GetTicks() + 1000*(int)lua_tonumber(L, -1); } if(cur_pilot->task != NULL) // Pilot has a currently running task. - AI_LCALL(cur_pilot->task->name); + ai_run(cur_pilot->task->name); // Make sure pilot_acc and pilot_turn are legal moves. if(pilot_acc > 1.) pilot_acc = 1.; // Value must be <= 1. @@ -364,7 +370,7 @@ void ai_create(Pilot* pilot) { cur_pilot = pilot; L = cur_pilot->ai->L; ai_status = AI_STATUS_CREATE; - AI_LCALL("create"); + ai_run("create"); ai_status = AI_STATUS_NORMAL; }