base game done
This commit is contained in:
parent
7e2b07ca48
commit
d5a0fd4374
|
@ -7,8 +7,8 @@ pub enum AsteroidSize {
|
|||
}
|
||||
pub struct Asteroid {
|
||||
pub pos: Vec2,
|
||||
vel: Vec2,
|
||||
size: AsteroidSize,
|
||||
pub vel: Vec2,
|
||||
pub size: AsteroidSize,
|
||||
sides: u8,
|
||||
radius: f32,
|
||||
rot: f32,
|
||||
|
@ -20,8 +20,8 @@ impl Asteroid {
|
|||
pub fn new(size: AsteroidSize) -> Self {
|
||||
let (sides, radius) = match size {
|
||||
AsteroidSize::Large => (gen_range(6, 10), gen_range(40., 50.)),
|
||||
AsteroidSize::Medium => (gen_range(5, 6), gen_range(20., 30.)),
|
||||
AsteroidSize::Small => (gen_range(3, 5), gen_range(12., 18.)),
|
||||
AsteroidSize::Medium => (gen_range(5, 6), gen_range(30., 40.)),
|
||||
AsteroidSize::Small => (gen_range(3, 5), 20.),
|
||||
};
|
||||
let mut r = vec2(
|
||||
if gen_range(0., 1.) > 0.5 { -1. } else { 1. },
|
||||
|
@ -50,6 +50,13 @@ impl Asteroid {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn new_from(pos: Vec2, vel: Vec2, size: AsteroidSize) -> Self {
|
||||
let mut asteroid = Asteroid::new(size);
|
||||
asteroid.pos = pos;
|
||||
asteroid.vel = vel;
|
||||
asteroid
|
||||
}
|
||||
|
||||
pub fn check_collision(&mut self, pos: Vec2) -> bool {
|
||||
let collided = (pos.x - self.pos.x) * (pos.x - self.pos.x)
|
||||
+ (pos.y - self.pos.y) * (pos.y - self.pos.y)
|
||||
|
|
|
@ -26,13 +26,14 @@ impl Player {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn check_bullet_collisions(&mut self, asteroid: &mut Asteroid) {
|
||||
pub fn check_bullet_collisions(&mut self, asteroid: &mut Asteroid) -> bool {
|
||||
for bullet in &mut self.bullets {
|
||||
if asteroid.check_collision(bullet.pos) {
|
||||
bullet.alive = false;
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
pub fn update(&mut self) {
|
||||
|
|
36
src/world.rs
36
src/world.rs
|
@ -20,15 +20,45 @@ impl World {
|
|||
|
||||
pub fn update(&mut self) {
|
||||
self.player.update();
|
||||
// println!("{}", self.asteroids.len());
|
||||
let mut to_add: Vec<Asteroid> = Vec::new();
|
||||
for asteroid in &mut self.asteroids {
|
||||
asteroid.update();
|
||||
self.player.check_bullet_collisions(asteroid);
|
||||
if self.player.check_bullet_collisions(asteroid) {
|
||||
match asteroid.size {
|
||||
AsteroidSize::Large => {
|
||||
let rand = vec2(gen_range(-50., 50.), gen_range(-50., 50.));
|
||||
to_add.push(Asteroid::new_from(
|
||||
asteroid.pos,
|
||||
asteroid.vel + rand,
|
||||
AsteroidSize::Medium,
|
||||
));
|
||||
to_add.push(Asteroid::new_from(
|
||||
asteroid.pos,
|
||||
asteroid.vel - rand,
|
||||
AsteroidSize::Medium,
|
||||
));
|
||||
}
|
||||
AsteroidSize::Medium => {
|
||||
let rand = vec2(gen_range(-30., 30.), gen_range(-30., 30.));
|
||||
to_add.push(Asteroid::new_from(
|
||||
asteroid.pos,
|
||||
asteroid.vel + rand,
|
||||
AsteroidSize::Small,
|
||||
));
|
||||
to_add.push(Asteroid::new_from(
|
||||
asteroid.pos,
|
||||
asteroid.vel - rand,
|
||||
AsteroidSize::Small,
|
||||
));
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
self.asteroids.append(&mut to_add);
|
||||
self.asteroids.retain(|asteroid| asteroid.alive);
|
||||
if self.asteroids.len() < 5 {
|
||||
self.asteroids.push(Asteroid::new(AsteroidSize::Large));
|
||||
// println!("Added {}", get_time());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue