Lephisto/src/player.c
2013-02-02 00:39:48 +00:00

128 lines
2.5 KiB
C

#include "def.h"
#include "pilot.h"
#include "log.h"
#include "player.h"
Pilot* player = NULL;
static unsigned int player_flags = PLAYER_FLAG_NULL;
static FP player_turn = 0.;
static FP player_acc = 0.;
// To be used in pilot.c
void player_think(Pilot* player, const FP dt) {
player->solid->dir_vel = 0.;
if(player_turn)
player->solid->dir_vel -= player->ship->turn*player_turn/(FP)(1<<15);
#if 0
if(player_isFlag(PLAYER_FLAG_MOV_LEFT))
player->solid->dir_vel += player->ship->turn;
if(player_isFlag(PLAYER_FLAG_MOV_RIGHT))
player->solid->dir_vel -= player->ship->turn;
#endif
player->solid->force = player->ship->thrust*player_acc/(FP)(1<<15);
}
// Flag manipulationz.
int player_isFlag(unsigned int flag) {
return player_flags & flag;
}
void player_setFlag(unsigned int flag) {
if(!player_isFlag(flag))
player_flags |= flag;
}
void player_rmFlag(unsigned int flag) {
if(player_isFlag(flag))
player_flags ^= flag;
}
// --Events--
// Joystick.
static void handle_joyaxis(int axis, int value) {
switch(axis) {
case 0:
player_turn = (FP)value;
break;
case 1:
if(value <= 0)
player_acc = (FP)-value;
break;
}
}
static void handle_joybutton(int button) {
switch(button) {
case 0:
break;
case 1:
break;
}
}
// Keyboard.
static void handle_keydown(SDLKey key) {
SDL_Event quit;
switch(key) {
case SDLK_ESCAPE:
quit.type = SDL_QUIT;
SDL_PushEvent(&quit);
break;
case SDLK_LEFT:
case SDLK_a:
player_turn -= (FP)(1<<15);
break;
case SDLK_RIGHT:
case SDLK_d:
player_turn += (FP)(1<<15);
break;
case SDLK_UP:
case SDLK_w:
player_acc += (FP)(1<<15);
break;
default:
break;
}
}
static void handle_keyup(SDLKey key) {
switch(key) {
case SDLK_LEFT:
case SDLK_a:
player_turn += (FP)(1<<15);
break;
case SDLK_RIGHT:
case SDLK_d:
player_turn -= (FP)(1<<15);
break;
case SDLK_UP:
case SDLK_w:
player_acc -= (FP)(1<<15);
//break;
default:
break;
}
}
// Global input.
void handle_input(SDL_Event* event) {
switch(event->type) {
case SDL_JOYAXISMOTION:
handle_joyaxis(event->jaxis.axis, event->jaxis.value);
break;
case SDL_JOYBUTTONDOWN:
handle_joybutton(event->jbutton.button);
break;
case SDL_KEYDOWN:
handle_keydown(event->key.keysym.sym);
break;
case SDL_KEYUP:
handle_keyup(event->key.keysym.sym);
break;
}
}