You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bomberclone/src/playerinput.c

87 lines
2.2 KiB

/* $Id: playerinput.c,v 1.1 2004/04/03 13:55:30 stpohle Exp $
* playerinput
*
* the playerinput system will only set some values and flags of the player
* not call a player_*() itself (i.e. for dropping a bomb). this will be
* done with the player_*() functions which should be called only from the
* game_loop();
*
* direction keys will set the moveing state (player->m) and the direction
* value (player->d) the bomb and special key will set a special flag this
* the values will be used in player_loop () and the flags will be reset in
* there too.
*/
#include "bomberclone.h"
#include "keyb.h"
#include "chat.h"
/*
* handle the diffrent types of input devices and set the player informations
* to use this function the function keyb_loop() have to be called first.
*/
void
playerinput_loop (int pl_nr)
{
if (!chat.active)
playerinput_keyb_loop (pl_nr);
};
/*
* keyboard handling read keyboard and set playervariables
* if only one player is used player one can even use the keys
* of player two.
*/
void
playerinput_keyb_loop (int pl_nr)
{
int pk_offset; // offset for the player keys
if (bman.state != GS_running)
return;
/* select the current playerkeys (pk_offset) */
if (pl_nr == bman.p_nr)
pk_offset = 0;
else if (pl_nr == bman.p2_nr)
pk_offset = BCPK_max;
else
return; // not a local player
/* read the keys and set playervariables */
playerinput_keyb_read (pk_offset, pl_nr);
if (!IS_LPLAYER2 && pk_offset == 0)
playerinput_keyb_read (BCPK_max, pl_nr);
};
inline void playerinput_keyb_read (int pk_offset, int pl_nr) {
if (keyb_gamekeys.state[pk_offset + BCPK_up]) {
players[pl_nr].d = up;
players[pl_nr].m = 1;
}
if (keyb_gamekeys.state[pk_offset + BCPK_down]) {
players[pl_nr].d = down;
players[pl_nr].m = 1;
}
if (keyb_gamekeys.state[pk_offset + BCPK_right]) {
players[pl_nr].d = right;
players[pl_nr].m = 1;
}
if (keyb_gamekeys.state[pk_offset + BCPK_left]) {
players[pl_nr].d = left;
players[pl_nr].m = 1;
}
if (keyb_gamekeys.state[pk_offset + BCPK_drop] && !keyb_gamekeys.old[pk_offset + BCPK_drop])
players[pl_nr].keyf_bomb = 1;
if (keyb_gamekeys.state[pk_offset + BCPK_special])
players[pl_nr].keyf_special = 1;
};