[Add] 'f' key to face target.
This commit is contained in:
parent
2f1618ee81
commit
263256974d
4
README
4
README
@ -43,10 +43,14 @@ Keys:
|
||||
Combat:
|
||||
-- Space : Primary weapons.
|
||||
-- Tab : Target.
|
||||
-- 'r' : Target closest hostile ship.
|
||||
-- 'f' : Faces the target.
|
||||
-- 'b' : Board the target.
|
||||
|
||||
GUI:
|
||||
-- UP : Zoom in.
|
||||
-- DOWN : Zoom out.
|
||||
-- F12 : Take a screenshot.
|
||||
|
||||
--------------------------------
|
||||
Developers:
|
||||
|
61
src/player.c
61
src/player.c
@ -22,12 +22,18 @@
|
||||
|
||||
#define pow2(x) ((x)*(x))
|
||||
|
||||
#define GFX_GUI_FRAME "../gfx/gui/frame.png"
|
||||
#define GFX_GUI_TARG_PILOT "../gfx/gui/pilot.png"
|
||||
#define GFX_GUI_TARG_PLANET "../gfx/gui/planet.png"
|
||||
// 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 KEY_PRESS 1.
|
||||
#define KEY_RELEASE -1.
|
||||
// Flag functions.
|
||||
#define player_isFlag(f) (player_flags & f)
|
||||
#define player_setFlag(f) (player_flags |= f)
|
||||
#define player_rmFlag(f) (player_flags ^= f)
|
||||
|
||||
#define KEY_PRESS ( 1.)
|
||||
#define KEY_RELEASE (-1.)
|
||||
|
||||
// Keybind structure.
|
||||
typedef struct {
|
||||
@ -39,12 +45,13 @@ typedef struct {
|
||||
static Keybind** player_input; // Contains the players keybindings.
|
||||
// Name of each keybinding.
|
||||
const char* keybindNames[] = { "accel", "left", "right", // Movement.
|
||||
"primary", "target", "target_nearest", "board", // Combat.
|
||||
"primary", "target", "target_nearest", "face", "board", // Combat.
|
||||
"mapzoomin", "mapzoomout", "screenshot", "end" }; // Misc.
|
||||
|
||||
// Player stuff.
|
||||
Pilot* player = NULL; // extern in pilot.h
|
||||
unsigned int credits = 0;
|
||||
static int player_flags = 0; // Player flags.
|
||||
static double player_turn = 0.; // Turn velocity from input.
|
||||
static double player_acc = 0.; // Accel velocity from input.
|
||||
static int player_primary = 0; // Player is shooting primary weapon.
|
||||
@ -139,6 +146,7 @@ static int gui_parse(const xmlNodePtr parent, const char* name);
|
||||
static void gui_renderPilot(const Pilot* p);
|
||||
static void gui_renderBar(const glColor* c, const Vec2* p, const Rect* r, const double w);
|
||||
|
||||
// Keybinds.
|
||||
static void player_board(void);
|
||||
static void player_screenshot(void);
|
||||
|
||||
@ -731,6 +739,13 @@ void gui_free(void) {
|
||||
// Used in pilot.c
|
||||
// Basically uses keyboard input instead of AI input.
|
||||
void player_think(Pilot* player) {
|
||||
if(player_isFlag(PLAYER_FACE) && (player_target != PLAYER_ID)) {
|
||||
double 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.;
|
||||
}
|
||||
player->solid->dir_vel = 0.;
|
||||
if(player_turn)
|
||||
player->solid->dir_vel -= player->ship->turn * player_turn;
|
||||
@ -786,6 +801,7 @@ void input_setDefault(void) {
|
||||
input_setKeybind("primary", KEYBIND_KEYBOARD, SDLK_SPACE, 0);
|
||||
input_setKeybind("target", KEYBIND_KEYBOARD, SDLK_TAB, 0);
|
||||
input_setKeybind("target_nearest", KEYBIND_KEYBOARD, SDLK_r, 0);
|
||||
input_setKeybind("face", KEYBIND_KEYBOARD, SDLK_f, 0);
|
||||
input_setKeybind("board", KEYBIND_KEYBOARD, SDLK_b, 0);
|
||||
input_setKeybind("mapzoomin", KEYBIND_KEYBOARD, SDLK_UP, 0);
|
||||
input_setKeybind("mapzoomout", KEYBIND_KEYBOARD, SDLK_DOWN, 0);
|
||||
@ -836,17 +852,32 @@ void input_setKeybind(char* keybind, KeybindType type, int key, int reverse) {
|
||||
// abs : Whether or not it's an abs value (For those pesky joysticks.
|
||||
// =====================================================================
|
||||
static void input_key(int keynum, double value, int abs) {
|
||||
// Accelerating.
|
||||
if(strcmp(player_input[keynum]->name, "accel")==0) {
|
||||
if(abs)player_acc = value;
|
||||
else player_acc += value;
|
||||
player_acc = ABS(player_acc); // Make sure value is sane.
|
||||
}
|
||||
// Turning left.
|
||||
else if(strcmp(player_input[keynum]->name, "left")==0) {
|
||||
// Set flags for facing correction.
|
||||
if(value == KEY_PRESS) player_setFlag(PLAYER_TURN_LEFT);
|
||||
else if(value == KEY_RELEASE) player_rmFlag(PLAYER_TURN_LEFT);
|
||||
|
||||
if(abs)player_turn = -value;
|
||||
else player_turn -= value;
|
||||
if(player_turn < -1.) player_turn = -1.; // Make sure value is sane.
|
||||
}
|
||||
// Turning right.
|
||||
else if(strcmp(player_input[keynum]->name, "right")==0) {
|
||||
// Set flags for facing correction.
|
||||
if(value == KEY_PRESS) player_setFlag(PLAYER_TURN_RIGHT);
|
||||
else if(value == KEY_RELEASE) player_rmFlag(PLAYER_TURN_RIGHT);
|
||||
|
||||
if(abs) player_turn = value;
|
||||
else player_turn += value;
|
||||
|
||||
if(player_turn < -1.) player_turn = -1.; // Make sure value is sane.
|
||||
}
|
||||
// Shoot primary weapon. BOOM BOOM.
|
||||
else if(strcmp(player_input[keynum]->name, "primary")==0) {
|
||||
@ -860,6 +891,18 @@ static void input_key(int keynum, double value, int abs) {
|
||||
else if(strcmp(player_input[keynum]->name, "target_nearest")==0) {
|
||||
if(value == KEY_PRESS) player_target = pilot_getHostile();
|
||||
}
|
||||
// Face the target.
|
||||
else if(strcmp(player_input[keynum]->name, "face")==0) {
|
||||
if(value == KEY_PRESS) player_setFlag(PLAYER_FACE);
|
||||
else if(value == KEY_RELEASE) {
|
||||
player_rmFlag(PLAYER_FACE);
|
||||
|
||||
// Turning corrections.
|
||||
player_turn = 0;
|
||||
if(player_isFlag(PLAYER_TURN_LEFT)) player_turn -= 1;
|
||||
if(player_isFlag(PLAYER_TURN_RIGHT)) player_turn += 1;
|
||||
}
|
||||
}
|
||||
// Board those ships.
|
||||
else if(strcmp(player_input[keynum]->name, "board")==0) {
|
||||
if(value == KEY_PRESS) player_board();
|
||||
@ -877,12 +920,6 @@ static void input_key(int keynum, double value, int abs) {
|
||||
else if(strcmp(player_input[keynum]->name, "screenshot")==0) {
|
||||
if(value == KEY_PRESS) player_screenshot();
|
||||
}
|
||||
|
||||
//Make sure values are sane.
|
||||
player_acc = ABS(player_acc);
|
||||
if(player_acc > 1.) player_acc = 1.;
|
||||
if(player_turn > 1.) player_turn = 1.;
|
||||
else if(player_turn < -1.) player_turn = -1.;
|
||||
}
|
||||
|
||||
// --Events--
|
||||
|
Loading…
Reference in New Issue
Block a user