-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplayerevents.c
executable file
·146 lines (139 loc) · 3.38 KB
/
playerevents.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "player.h"
/* note that events for players are significantly less compilcated and
* only require a few basic steps no matter what state you're in. Thus while
* the flow looks a lot like the ai (see all ai files), it's much simpler */
/* if we want to be thrown an event from the outside world */
void PlayerProcessEvent(player_t *player, int event){
switch(event){
case PLAYER_RUNNING:
if(player->state == PLAYER_READY){
player->timer = 0;
PlayerSetAnimation(player, PLAYER_ANIM_RUN);
return;
}
else if(player->state == PLAYER_SHOT){
return;
}
else if(player->state == PLAYER_DYING){
return;
}
else if(player->state == PLAYER_DEAD){
return;
}
break;
case PLAYER_JUMPING:
if(player->state == PLAYER_READY){
player->timer = 0;
PlayerSetAnimation(player, PLAYER_ANIM_JUMP);
return;
}
else if(player->state == PLAYER_SHOT){
return;
}
else if(player->state == PLAYER_DYING){
return;
}
else if(player->state == PLAYER_DEAD){
return;
}
break;
case PLAYER_IDLE:
if(player->state == PLAYER_READY){
player->timer = 0;
PlayerSetAnimation(player, PLAYER_ANIM_IDLE0);
return;
}
else if(player->state == PLAYER_SHOT){
return;
}
else if(player->state == PLAYER_DYING){
return;
}
else if(player->state == PLAYER_DEAD){
return;
}
break;
case PLAYER_GOT_SHOT:
player->health--;
if(player->state == PLAYER_READY){
PlayerReset(player);
player->state = PLAYER_SHOT;
player->timer = 0;
PlayerSetAnimation(player, PLAYER_ANIM_SHOT0);
player->timeout = P_SHOT_TIMEOUT;
return;
}
else if(player->state == PLAYER_SHOT){
player->timer = 0;
PlayerReset(player);
return;
}
else if(player->state == PLAYER_DYING){
return;
}
else if(player->state == PLAYER_DEAD){
return;
}
break;
case PLAYER_KILLED:
if(player->state == PLAYER_READY){
PlayerReset(player);
player->state = PLAYER_DYING;
player->timer = 0;
player->health = -1; /* means you're really dead */
player->radius = 0; /* means you can't be shot anymore */
PlayerSetAnimation(player, PLAYER_ANIM_DYING);
player->timeout = P_DYING_TIMEOUT;
return;
}
else if(player->state == PLAYER_SHOT){
PlayerReset(player);
player->state = PLAYER_DYING;
player->timer = 0;
PlayerSetAnimation(player, PLAYER_ANIM_DYING);
player->timeout = P_DYING_TIMEOUT;
return;
}
else if(player->state == PLAYER_DYING){
return;
}
else if(player->state == PLAYER_DEAD){
return;
}
break;
case PLAYER_TIMEOUT:
if(player->state == PLAYER_READY){
player->timer = 0;
return;
}
else if(player->state == PLAYER_SHOT){
PlayerReset(player);
player->state = PLAYER_READY;
player->timer = 0;
if(player->rFlag || player->lFlag ||
player->fFlag || player->bFlag)
PlayerSetAnimation(player, PLAYER_ANIM_RUN);
else
PlayerSetAnimation(player, PLAYER_ANIM_IDLE0);
player->timeout = P_READY_TIMEOUT;
return;
}
else if(player->state == PLAYER_DYING){
PlayerReset(player);
player->state = PLAYER_DEAD;
PlayerSetAnimation(player, PLAYER_ANIM_DEAD);
player->timer = 0;
player->timeout = P_DEAD_TIMEOUT;
return;
}
else if(player->state == PLAYER_DEAD){
player->timer = 0;
return;
}
break;
}
return;
}