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
|
extern crate sdl2;
extern crate std;
use super::state;
use super::constants;
pub struct Player {
pub x: i32,
pub y: i32,
left_p: bool,
right_p: bool,
up_p: bool,
down_p: bool,
y_d: i32,
x_d: i32,
pub fire_rate: u32,
}
impl Player {
pub fn new() -> Player {
Player { x: 400, y: 500, x_d: 0, y_d: 0, down_p: false, left_p: false, right_p: false, up_p: false, fire_rate: 30 }
}
pub fn act(&mut self, events: &mut sdl2::event::EventPollIterator){
for event in events {
match event {
sdl2::event::Event::Quit {..} |
sdl2::event::Event::KeyDown { keycode: Some(sdl2::keyboard::Keycode::Escape), .. } => {
std::process::exit(0);
},
sdl2::event::Event::KeyDown { keycode: Some(sdl2::keyboard::Keycode::Down), .. } => {
self.down_p = true;
self.y_d = -1;
}
sdl2::event::Event::KeyUp { keycode: Some(sdl2::keyboard::Keycode::Down), .. } => {
self.down_p = false;
}
sdl2::event::Event::KeyDown { keycode: Some(sdl2::keyboard::Keycode::Up), .. } => {
self.up_p = true;
self.y_d = 1;
}
sdl2::event::Event::KeyUp { keycode: Some(sdl2::keyboard::Keycode::Up), .. } => {
self.up_p = false;
}
sdl2::event::Event::KeyDown { keycode: Some(sdl2::keyboard::Keycode::Left), .. } => {
self.left_p = true;
self.x_d = -1;
}
sdl2::event::Event::KeyUp { keycode: Some(sdl2::keyboard::Keycode::Left), .. } => {
self.left_p = false;
}
sdl2::event::Event::KeyDown { keycode: Some(sdl2::keyboard::Keycode::Right), .. } => {
self.right_p = true;
self.x_d = 1;
}
sdl2::event::Event::KeyUp { keycode: Some(sdl2::keyboard::Keycode::Right), .. } => {
self.right_p = false;
}
_ => { },
}
}
if self.left_p {
if !self.right_p {
self.x_d = -1;
}
} else if self.right_p {
self.x_d = 1;
} else {
self.x_d = 0;
}
if self.up_p {
if !self.down_p {
self.y_d = -1;
}
} else if self.down_p {
self.y_d = 1;
} else {
self.y_d = 0;
}
/* Don't go off the side */
if self.x_d < 0 && self.x <= 0 {
self.x_d = 0;
}
else if self.x >= constants::X_DIM as i32 && self.x_d > 0 {
self.x_d = 0;
}
if self.y <= 0 && self.y_d < 0 {
self.y_d = 0;
}
else if self.y >= constants::Y_DIM as i32 && self.y_d > 0 {
self.y_d = 0;
}
self.x += self.x_d;
self.y += self.y_d;
}
}
impl state::Positioned for Player {
fn x(&self) -> i32 {
self.x
}
fn y(&self) -> i32 {
self.y
}
fn radius(&self) -> u32 {
13
}
}
impl state::Drawable for Player {
fn center(&self) -> (u32, u32) {
(30, 19)
}
}
|