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