forked from devpack/mayhem
-
Notifications
You must be signed in to change notification settings - Fork 2
/
command.cpp
executable file
·72 lines (60 loc) · 2.24 KB
/
command.cpp
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
#include "command.h"
#include "option.h"
#include "vaisseau_data.h"
#include <cmath>
double mod(double a, double b) {
if (b < 0)
return mod(a, -b);
double ret = fmod(a, b);
if (ret < 0)
ret += b;
return ret;
}
void handle_command(struct command *cmd, double dt) {
struct vaisseau_data *vaisseau = cmd->controlled_ship;
if (!vaisseau->explode) {
if (!(vaisseau->landed) || (vaisseau->rebound)) {
if (cmd->left) // Left arrow?
vaisseau->angle_precise -=
vaisseau->anglestep * (dt / 0.025); // yes, on tourne a droite
if (cmd->right) // Right arrow?
vaisseau->angle_precise +=
vaisseau->anglestep * (dt / 0.025); // yes, on tourne a gauche
vaisseau->angle_precise = mod(vaisseau->angle_precise, 360.0);
vaisseau->angle = vaisseau->angle_precise;
}
if (cmd->shield) {
vaisseau->shield = cmd->shield; // shield activ
if (vaisseau->shield &&
vaisseau->shield_force > 0) // test shield si pas thrust
vaisseau->sprite_ptr = vaisseau->gfx->sprite_shield; // oui shield
else
vaisseau->sprite_ptr = vaisseau->gfx->sprite; // non, normal
vaisseau->thrust = (0); // pas de thrust
} else {
// thrust?
if (vaisseau->fuel > 0 && cmd->thrust) {
// pointe le sprite thrust
if (vaisseau->option_type != OPT_THRUST)
vaisseau->sprite_ptr = vaisseau->gfx->sprite_thrust;
else
vaisseau->sprite_ptr = vaisseau->gfx->sprite_thrust2;
vaisseau->thrust = vaisseau->thrust_max; // acceleration
vaisseau->shield = false; // shield desactiv
vaisseau->landed = false; // pas pos
} else {
vaisseau->thrust = (0); // pas de thrust
vaisseau->sprite_ptr = vaisseau->gfx->sprite; // non, normal
vaisseau->shield = false; // shield desactiv
}
}
if (cmd->fire && !vaisseau->fire && !vaisseau->shield)
vaisseau->fire_delay = true;
else
vaisseau->fire_delay = false;
if (cmd->fire && !vaisseau->shield)
vaisseau->fire = true;
else
vaisseau->fire = false;
}
}