Skip to content

Commit ebac237

Browse files
author
Marek
committed
Improve keyboard handling
1 parent 266f623 commit ebac237

File tree

3 files changed

+43
-47
lines changed

3 files changed

+43
-47
lines changed

client.c

+23-24
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,19 @@ struct
146146
int active_players;
147147

148148

149+
#define KBD_RIGHT (1 << 0)
150+
#define KBD_LEFT (1 << 1)
151+
#define KBD_JUMP (1 << 2)
152+
#define KBD_CREEP (1 << 3)
153+
#define KBD_SPEED (1 << 4)
154+
#define KBD_FIRE (1 << 5)
155+
#define KBD_DOWN_LADDER (1 << 6)
156+
#define KBD_JETPACK (1 << 7)
157+
149158
struct /* keyboard status */
150159
{
151-
unsigned char right,left,jump,creep,speed,fire,weapon,down_ladder;
152-
}keyboard_status;
160+
unsigned char status, weapon;
161+
} keyboard_status;
153162

154163
/* message */
155164
struct msgline_type
@@ -657,28 +666,16 @@ void send_keyboard(void)
657666
{
658667
char packet[3];
659668
packet[0]=P_KEYBOARD;
660-
packet[1]= keyboard_status.right|
661-
(keyboard_status.left<<1)|
662-
(keyboard_status.jump<<2)|
663-
(keyboard_status.creep<<3)|
664-
(keyboard_status.speed<<4)|
665-
(keyboard_status.fire<<5)|
666-
(keyboard_status.down_ladder<<6);
667-
packet[2]= keyboard_status.weapon;
669+
packet[1]=keyboard_status.status;
670+
packet[2]=keyboard_status.weapon;
668671
send_packet(packet,3,(struct sockaddr*)(&server),my_id,0);
669672
}
670673

671674

672675
void reset_keyboard(void)
673676
{
674-
keyboard_status.left=0;
675-
keyboard_status.right=0;
676-
keyboard_status.speed=0;
677-
keyboard_status.jump=0;
678-
keyboard_status.creep=0;
679-
keyboard_status.fire=0;
677+
keyboard_status.status=0;
680678
keyboard_status.weapon=0;
681-
keyboard_status.down_ladder=0;
682679
}
683680

684681
/* recompute object positions */
@@ -2181,13 +2178,15 @@ void play(void)
21812178
if (!chat&&c_was_pressed('c'))
21822179
autocreep^=1;
21832180
if (c_pressed(K_DOWN)||autocreep)
2184-
keyboard_status.creep=1;
2181+
keyboard_status.status |= KBD_CREEP;
21852182
if (c_pressed(K_UP))
2186-
keyboard_status.jump=1;
2183+
keyboard_status.status |= KBD_JUMP;
21872184
if (c_pressed(K_LEFT_CTRL)||c_pressed(K_RIGHT_CTRL)||(!chat&&c_pressed('z')))
2188-
keyboard_status.fire=1;
2185+
keyboard_status.status |= KBD_FIRE;
21892186
if (!chat && c_pressed('d'))
2190-
keyboard_status.down_ladder=1;
2187+
keyboard_status.status |= KBD_DOWN_LADDER;
2188+
if (!chat && c_pressed('j'))
2189+
keyboard_status.status |= KBD_JETPACK;
21912190
if (!chat && c_was_pressed('1'))
21922191
keyboard_status.weapon=1;
21932192
if (!chat && c_was_pressed('2'))
@@ -2205,11 +2204,11 @@ void play(void)
22052204
if (!chat && c_was_pressed('8'))
22062205
keyboard_status.weapon=8;
22072206
if (c_pressed(K_LEFT_SHIFT)||c_pressed(K_RIGHT_SHIFT)||autorun)
2208-
keyboard_status.speed=1;
2207+
keyboard_status.status |= KBD_SPEED;
22092208
if (c_pressed(K_LEFT))
2210-
keyboard_status.left=1;
2209+
keyboard_status.status |= KBD_LEFT;
22112210
if (c_pressed(K_RIGHT))
2212-
keyboard_status.right=1;
2211+
keyboard_status.status |= KBD_RIGHT;
22132212

22142213
send_keyboard();
22152214
sleep_until(last_time+CLIENT_PERIOD_USEC);

server.c

+11-22
Original file line numberDiff line numberDiff line change
@@ -555,12 +555,7 @@ static int add_player(unsigned char color, char *name,struct sockaddr_in *addres
555555
cp->member.color=color;
556556
cp->member.frags=0;
557557
cp->member.deaths=0;
558-
cp->member.keyboard_status.left=0;
559-
cp->member.keyboard_status.right=0;
560-
cp->member.keyboard_status.speed=0;
561-
cp->member.keyboard_status.fire=0;
562-
cp->member.keyboard_status.creep=0;
563-
cp->member.keyboard_status.down_ladder=0;
558+
cp->member.keyboard_status.status=0;
564559
cp->member.keyboard_status.weapon=0;
565560
cp->member.id=n_players+1; /* player numbering starts from 1, 0 is server's ID */
566561
cp->member.last_update=get_time();
@@ -1355,13 +1350,7 @@ static void read_data(void)
13551350
q=find_player(&client,s);
13561351
if (!q)break;
13571352
q->member.last_update=get_time();
1358-
q->member.keyboard_status.right=(packet[1])&1;
1359-
q->member.keyboard_status.left=((packet[1])>>1)&1;
1360-
q->member.keyboard_status.jump=((packet[1])>>2)&1;
1361-
q->member.keyboard_status.creep=((packet[1])>>3)&1;
1362-
q->member.keyboard_status.speed=((packet[1])>>4)&1;
1363-
q->member.keyboard_status.fire=((packet[1])>>5)&1;
1364-
q->member.keyboard_status.down_ladder=((packet[1])>>6)&1;
1353+
q->member.keyboard_status.status=packet[1];
13651354
q->member.keyboard_status.weapon=packet[2];
13661355
break;
13671356

@@ -2736,21 +2725,21 @@ static void move_player(struct player *p)
27362725
if (p->obj->status & S_DEAD)
27372726
return; /* dead player */
27382727

2739-
if (p->keyboard_status.down_ladder) /* climb down a ladder */
2728+
if (p->keyboard_status.status & KBD_DOWN_LADDER) /* climb down a ladder */
27402729
p->obj->status |= S_CLIMB_DOWN;
27412730
else
27422731
p->obj->status &=~ S_CLIMB_DOWN;
27432732

2744-
if (p->keyboard_status.jump)
2733+
if (p->keyboard_status.status & KBD_JUMP)
27452734
jump_player(p);
2746-
if (p->keyboard_status.right)
2735+
if (p->keyboard_status.status & KBD_RIGHT)
27472736
{
27482737
if ((p->obj->status & (S_LOOKLEFT | S_LOOKRIGHT))==S_LOOKRIGHT) /* walk right */
2749-
walk_player(p,2,p->keyboard_status.speed,p->keyboard_status.creep);
2738+
walk_player(p,2,p->keyboard_status.status & KBD_SPEED,p->keyboard_status.status & KBD_CREEP);
27502739
else
27512740
{
27522741
if (p->obj->status & S_WALKING)
2753-
walk_player(p,0,p->keyboard_status.speed,p->keyboard_status.creep); /* stop */
2742+
walk_player(p,0,p->keyboard_status.status & KBD_SPEED,p->keyboard_status.status & KBD_CREEP); /* stop */
27542743
else
27552744
{
27562745
a=p->obj->status & (S_LOOKLEFT | S_LOOKRIGHT);
@@ -2761,14 +2750,14 @@ static void move_player(struct player *p)
27612750
}
27622751
}
27632752

2764-
if (p->keyboard_status.left)
2753+
if (p->keyboard_status.status & KBD_LEFT)
27652754
{
27662755
if ((p->obj->status & (S_LOOKLEFT | S_LOOKRIGHT))==S_LOOKLEFT) /* walk left */
2767-
walk_player(p,1,p->keyboard_status.speed,p->keyboard_status.creep);
2756+
walk_player(p,1,p->keyboard_status.status & KBD_SPEED,p->keyboard_status.status & KBD_CREEP);
27682757
else
27692758
{
27702759
if (p->obj->status & S_WALKING)
2771-
walk_player(p,0,p->keyboard_status.speed,p->keyboard_status.creep); /* stop */
2760+
walk_player(p,0,p->keyboard_status.status & KBD_SPEED,p->keyboard_status.status & KBD_CREEP); /* stop */
27722761
else
27732762
{
27742763
a=p->obj->status & (S_LOOKLEFT | S_LOOKRIGHT);
@@ -2779,7 +2768,7 @@ static void move_player(struct player *p)
27792768
}
27802769
}
27812770
change_weapon_player(p,p->keyboard_status.weapon);
2782-
if (p->keyboard_status.fire)
2771+
if (p->keyboard_status.status & KBD_FIRE)
27832772
fire_player(p,(p->obj->status & (S_LOOKLEFT | S_LOOKRIGHT))>>1);
27842773
}
27852774

server.h

+9-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,14 @@
1010
#include "cfg.h"
1111
#include "data.h"
1212

13+
#define KBD_RIGHT (1 << 0)
14+
#define KBD_LEFT (1 << 1)
15+
#define KBD_JUMP (1 << 2)
16+
#define KBD_CREEP (1 << 3)
17+
#define KBD_SPEED (1 << 4)
18+
#define KBD_FIRE (1 << 5)
19+
#define KBD_DOWN_LADDER (1 << 6)
20+
#define KBD_JETPACK (1 << 7)
1321

1422
/* item of player list */
1523
struct player
@@ -26,7 +34,7 @@ struct player
2634
unsigned long_long last_update; /* last time client sent a packet */
2735
struct /* keyboard status */
2836
{
29-
unsigned char right,left,jump,creep,speed,fire,weapon,down_ladder;
37+
unsigned char status, weapon;
3038
}keyboard_status;
3139
int id;
3240
struct it* obj; /* pointer to player's hero */

0 commit comments

Comments
 (0)