diff --git a/src/input.c b/src/input.c index 5b6393e..16d899f 100644 --- a/src/input.c +++ b/src/input.c @@ -20,7 +20,7 @@ static Keybind** input_keybinds; // Contains the players keybindings. // Name of each keybinding. -const char* keybindNames[] = { "accel", "left", "right", // Movement. +const char* keybindNames[] = { "accel", "left", "right", "reverse", // Movement. "primary", "target", "target_nearest", "face", "board", // Combat. "secondary", "secondary_next", // Secondary weapons. "target_planet", "land", // Navigation. @@ -30,6 +30,8 @@ extern double player_turn; extern double player_acc; extern unsigned int player_target; extern int planet_target; +// Grabbed from main.c +extern int show_fps; // Set the default input keys. @@ -38,6 +40,8 @@ void input_setDefault(void) { input_setKeybind("accel", KEYBIND_KEYBOARD, SDLK_w, 0); input_setKeybind("left", KEYBIND_KEYBOARD, SDLK_a, 0); input_setKeybind("right", KEYBIND_KEYBOARD, SDLK_d, 0); + input_setKeybind("reverse", KEYBIND_KEYBOARD, SDLK_s, 0); + // Combat. input_setKeybind("primary", KEYBIND_KEYBOARD, SDLK_SPACE, 0); input_setKeybind("target", KEYBIND_KEYBOARD, SDLK_TAB, 0); @@ -129,6 +133,16 @@ static void input_key(int keynum, double value, int abs) { if(player_turn < -1.) player_turn = -1.; // Make sure value is sane. } + // Turn around to face vel. + else if(KEY("reverse")) { + if(value == KEY_PRESS) player_setFlag(PLAYER_REVERSE); + else if(value == KEY_RELEASE) { + player_rmFlag(PLAYER_REVERSE); + player_turn = 0; // Turning corrections. + if(player_isFlag(PLAYER_TURN_LEFT)) player_turn -= 1; + if(player_isFlag(PLAYER_TURN_RIGHT)) player_turn += 1; + } + } // Shoot primary weapon. BOOM BOOM. else if(KEY("primary")) { if(value == KEY_PRESS) player_setFlag(PLAYER_PRIMARY); @@ -193,11 +207,11 @@ static void input_key(int keynum, double value, int abs) { if(value == KEY_PRESS) player_setRadarRel(-1); } // Take a screenshot. - if(KEY("screenshot")) { + else if(KEY("screenshot")) { if(value == KEY_PRESS) player_screenshot(); } // Pause the game. - if(KEY("pause")) { + else if(KEY("pause")) { if(value == KEY_PRESS) { if(!toolkit) { if(paused) unpause(); diff --git a/src/player.c b/src/player.c index cff0e59..9ee93c2 100644 --- a/src/player.c +++ b/src/player.c @@ -732,13 +732,21 @@ void gui_free(void) { // Used in pilot.c // Basically uses keyboard input instead of AI input. void player_think(Pilot* player) { + double diff; if(player_isFlag(PLAYER_FACE) && (player_target != PLAYER_ID)) { - double diff = angle_diff(player->solid->dir, + diff = angle_diff(player->solid->dir, vect_angle(&player->solid->pos, &pilot_get(player_target)->solid->pos)); player_turn = -10.*diff; if(player_turn > 1.) player_turn = 1.; else if(player_turn < -1.) player_turn = -1.; } + else if(player_isFlag(PLAYER_REVERSE)) { + diff = angle_diff(player->solid->dir, VANGLE(player->solid->vel)); + DEBUG("%f->%f = %f", player->solid->dir, VANGLE(player->solid->vel), diff); + player_turn = 10.*diff; + if(player_turn >= 0.) player_turn = 1.; + else if(player_turn < 0.) player_turn = -1; + } player->solid->dir_vel = 0.; if(player_turn) player->solid->dir_vel -= player->ship->turn * player_turn; diff --git a/src/player.h b/src/player.h index 80e1319..80a5d91 100644 --- a/src/player.h +++ b/src/player.h @@ -4,9 +4,10 @@ // Flag definitions. #define PLAYER_TURN_LEFT (1<<0) // Player is turning left. #define PLAYER_TURN_RIGHT (1<<1) // Player is turning right. -#define PLAYER_FACE (1<<2) // Player is facing target. -#define PLAYER_PRIMARY (1<<3) // Player is shooting primary weapon. -#define PLAYER_SECONDARY (1<<4) // Player is shooting secondary weapon. +#define PLAYER_REVERSE (1<<2) +#define PLAYER_FACE (1<<10) // Player is facing target. +#define PLAYER_PRIMARY (1<<11) // Player is shooting primary weapon. +#define PLAYER_SECONDARY (1<<12) // Player is shooting secondary weapon. // Flag functions. #define player_isFlag(f) (player_flags & f)