Skip to content

Commit 7371b43

Browse files
Add Some(camera_shakeke)
1 parent b3260a3 commit 7371b43

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

src/game.rs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use ggez::{
88
};
99
use ggez_goodies::{camera::Camera, nalgebra_glm::Vec2};
1010
use graphics::{Font, Image, Mesh, TextFragment};
11+
use rand::Rng;
1112

1213
use crate::{HEIGHT, Screen, WIDTH, components::{bullet::Turbofish, enemy::Enemy, player::Player, tile::{Tile, TileType}}};
1314

@@ -27,6 +28,7 @@ pub struct Game {
2728
ui_resources: Vec<Image>,
2829

2930
camera: Camera,
31+
elapsed_shake: Option<(f32, Vec2)>,
3032
}
3133

3234
impl Game {
@@ -122,6 +124,7 @@ impl Game {
122124
camera,
123125

124126
consolas: graphics::Font::new(ctx, "/fonts/Consolas.ttf").unwrap(),
127+
elapsed_shake: None
125128
})
126129
}
127130

@@ -222,7 +225,7 @@ impl Game {
222225

223226
let mut done: bool = false;
224227

225-
for fish in &mut self.player_bullets {
228+
for fish in &self.player_bullets {
226229
if fish.pos_x >= go_start_x && fish.pos_x <= go_end_x {
227230
self.enemies.remove(i);
228231

@@ -231,6 +234,12 @@ impl Game {
231234
}
232235

233236
if done {
237+
let cam_loc = self.camera.___location();
238+
let org_pos = cam_loc.data.as_slice();
239+
240+
self.elapsed_shake = Some((0., Vec2::new(org_pos[0], org_pos[1])));
241+
self.camera_shakeke();
242+
234243
break;
235244
}
236245
}
@@ -245,6 +254,17 @@ impl Game {
245254
}
246255
}
247256

257+
if let Some(s) = self.elapsed_shake {
258+
if s.0 < 1. {
259+
self.camera_shakeke();
260+
}
261+
262+
else {
263+
self.camera.move_to(s.1);
264+
self.elapsed_shake = None;
265+
}
266+
}
267+
248268
Ok(None)
249269
}
250270

@@ -269,4 +289,18 @@ impl Game {
269289

270290
None
271291
}
292+
293+
pub fn camera_shakeke(&mut self) {
294+
let mut rng = rand::thread_rng();
295+
296+
let magnitude = 2.;
297+
let elapsed = self.elapsed_shake.unwrap();
298+
299+
let x = rng.gen_range(-1.0, 1.0) * magnitude;
300+
let y = rng.gen_range(-1.0, 1.0) * magnitude;
301+
302+
self.camera.move_by(Vec2::new(x, y));
303+
304+
self.elapsed_shake = Some((elapsed.0 + 0.1, elapsed.1));
305+
}
272306
}

0 commit comments

Comments
 (0)