128 lines
2.5 KiB
C
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;
|
|
}
|
|
}
|
|
|