diff --git a/src/ai.c b/src/ai.c index 30f41a5..b19aed7 100644 --- a/src/ai.c +++ b/src/ai.c @@ -8,6 +8,29 @@ #include "pilot.h" #include "ai.h" +// == AI ====================================================== +// -- AI will follow basic tasks defined from Lua AI scripts. +// -- If task is NULL, AI will run "control" task. +// -- Task is continued every frame. +// -- "control" task is a special task that *must* exist in +// any given Pilot AI (missiles, and suck will use "seek". +// -- "control" task is not permanent, but transitory. +// -- "control" task sets another task. +// -- "control" task is also run at a set rate (depending on +// Lua global "control_rate") to choose optimal behaviour +// (task). +// ============================================================ + + +// Basic task. +// name : Tasks name (Lua function.) +// target : Target, this will depend on the task itself. +typedef struct { + char* name; + void* target; +} Task; + +// Global Lua interpreter. static lua_State* L = NULL; int ai_init(void) { diff --git a/src/main.c b/src/main.c index e8c3d32..eed1e87 100644 --- a/src/main.c +++ b/src/main.c @@ -62,12 +62,12 @@ int main(int argc, char** argv) { // input. input_init(); - input_setKeybind("accel", KEYBIND_KEYBOARD, SDLK_UP, 0); - input_setKeybind("accel", KEYBIND_KEYBOARD, SDLK_w, 0); - input_setKeybind("left", KEYBIND_KEYBOARD, SDLK_LEFT, 0); - input_setKeybind("left", KEYBIND_KEYBOARD, SDLK_a, 0); - input_setKeybind("right", KEYBIND_KEYBOARD, SDLK_RIGHT, 0); - input_setKeybind("right", KEYBIND_KEYBOARD, SDLK_d, 0); + input_setKeybind("accel", KEYBIND_KEYBOARD, SDLK_UP, 0); + input_setKeybind("accel", KEYBIND_KEYBOARD, SDLK_w, 0); + input_setKeybind("left", KEYBIND_KEYBOARD, SDLK_LEFT, 0); + input_setKeybind("left", KEYBIND_KEYBOARD, SDLK_a, 0); + input_setKeybind("right", KEYBIND_KEYBOARD, SDLK_RIGHT, 0); + input_setKeybind("right", KEYBIND_KEYBOARD, SDLK_d, 0); // Use Lua to parse configuration file. lua_State* L = luaL_newstate(); @@ -110,7 +110,7 @@ int main(int argc, char** argv) { lua_pushstring(L, "key"); lua_gettable(L, -3); if(lua_isnumber(L, -1)) - str = (int)lua_tonumber(L, -1); + key = (int)lua_tonumber(L, -1); // Is it reversed? Only useful for axis. lua_pushstring(L, "reverse"); @@ -187,9 +187,8 @@ int main(int argc, char** argv) { ships_load(); // Testing. - unsigned int player_id; - player_id = pilot_create(get_ship("Ship"), "Player", NULL, NULL, PILOT_PLAYER); - gl_bindCamera(&get_pilot(player_id)->solid->pos); + pilot_create(get_ship("Ship"), "Player", NULL, NULL, PILOT_PLAYER); + gl_bindCamera(&player->solid->pos); space_init(); pilot_create(get_ship("Miss. Test"), NULL, NULL, NULL, 0); @@ -225,14 +224,19 @@ int main(int argc, char** argv) { exit(EXIT_SUCCESS); } -// Update all the things. -// Space: -// -- Stars. -// -- Movement. -// -- Render. -// Pilots: -// -- Think (ai). -// -- Solid. +// == Update everything. ================================== +// Blitting order. (layers) +// +// BG | Stars and planets. +// | Background particles. +// X +// N | NPC ships. +// | Normal layer particles (above ships). +// X +// FG | Player. +// | Foreground particles. +// | Text and GUI. +// ======================================================== static void update_all(void) { double dt = (double)(SDL_GetTicks() - time) / 1000.0; time = SDL_GetTicks(); diff --git a/src/opengl.c b/src/opengl.c index 899e7d6..4807528 100644 --- a/src/opengl.c +++ b/src/opengl.c @@ -24,8 +24,8 @@ Vec2* gl_camera; gl_font gl_defFont; // Misc. -static int _flip_surface(SDL_Surface* surface); -static int _pot(int n); +static int SDL_VFlipSurface(SDL_Surface* surface); +static int pot(int n); // gl_texture. static GLuint gl_loadSurface(SDL_Surface* surface, int* rw, int* rh); // Gl font. @@ -36,7 +36,7 @@ static void gl_fontMakeDList(FT_Face face, char ch, GLuint list_base, GLuint* te // ================ // Get me the closest power of two plox. -static int _pot(int n) { +static int pot(int n) { int i = 1; while(i < n) i<<=1; @@ -44,7 +44,7 @@ static int _pot(int n) { } // Flips the surface vertically. Return 0 on success. -static int _flip_surface(SDL_Surface* surface) { +static int SDL_VFlipSurface(SDL_Surface* surface) { // Flip the image. Uint8* rowhi, *rowlo, *tmpbuf; int y; @@ -83,8 +83,8 @@ static GLuint gl_loadSurface(SDL_Surface* surface, int* rw, int* rh) { int potw, poth; // Make size power of two. - potw = _pot(surface->w); - poth = _pot(surface->h); + potw = pot(surface->w); + poth = pot(surface->h); if(rw)*rw = potw; if(rh)*rh = poth; @@ -201,7 +201,7 @@ gl_texture* gl_newImage(const char* path) { SDL_FreeSurface(tmp); // Free the temp surface. - if(_flip_surface(surface)) { + if(SDL_VFlipSurface(surface)) { WARN("Error flipping surface"); return NULL; } @@ -359,8 +359,8 @@ static void gl_fontMakeDList(FT_Face face, char ch, GLuint list_base, GLuint* te bitmap = bitmap_glyph->bitmap; // To simplify. // Need the POT wrapping for GL. - w = _pot(bitmap.width); - h = _pot(bitmap.rows); + w = pot(bitmap.width); + h = pot(bitmap.rows); // Memory for textured data. // Bitmap is useing two channels, one for luminosity and one for alpha. diff --git a/src/pilot.c b/src/pilot.c index ec63763..37737d9 100644 --- a/src/pilot.c +++ b/src/pilot.c @@ -7,6 +7,9 @@ #include "log.h" #include "pilot.h" +#define VMOD(v) (v.x*v.x + v.y*v.y) +#define NMOD(n) (n*n) + // Stack of pilot id's to assure uniqueness. static unsigned int pilot_id = 0; @@ -53,6 +56,10 @@ static void pilot_update(Pilot* pilot, const double dt) { // Update the solid. pilot->solid->update(pilot->solid, dt); + + if(VMOD(pilot->solid->vel) > NMOD(pilot->ship->speed)) { + // Should not go faster. + } pilot_render(pilot); } @@ -67,8 +74,7 @@ static void pilot_update(Pilot* pilot, const double dt) { void pilot_init(Pilot* pilot, Ship* ship, char* name, const Vec2* vel, const Vec2* pos, const int flags) { pilot->id = ++pilot_id; // New unique pilot id based on pilot_id, Can't be 0. - pilot->ship = ship; - + pilot->ship = ship; pilot->name = strdup((name == NULL) ? ship->name:name); pilot->solid = solid_create(ship->mass, vel, pos); diff --git a/src/player.h b/src/player.h index 8db8010..6083a2f 100644 --- a/src/player.h +++ b/src/player.h @@ -10,6 +10,6 @@ void player_rmFlag(unsigned int flag); // Input. void input_init(void); void input_exit(void); -void input_set_Keybind(char* keybind, KeybindType type, int key, int reverse); +void input_setKeybind(char* keybind, KeybindType type, int key, int reverse); void input_handle(SDL_Event* event);