frame independent -> dependent, nn
This commit is contained in:
parent
6e1b0f9d3b
commit
e66d8ff9d4
|
@ -36,15 +36,15 @@ impl Asteroid {
|
||||||
);
|
);
|
||||||
Self {
|
Self {
|
||||||
pos: r,
|
pos: r,
|
||||||
vel: 0.1 * -r
|
vel: 0.001 * -r
|
||||||
+ vec2(
|
+ vec2(
|
||||||
gen_range(20., 60.) * if gen_range(0., 1.) > 0.5 { -1. } else { 1. },
|
gen_range(0.3, 1.) * if gen_range(0., 1.) > 0.5 { -1. } else { 1. },
|
||||||
gen_range(20., 60.) * if gen_range(0., 1.) > 0.5 { -1. } else { 1. },
|
gen_range(0.3, 1.) * if gen_range(0., 1.) > 0.5 { -1. } else { 1. },
|
||||||
),
|
),
|
||||||
size: size,
|
size: size,
|
||||||
sides: sides,
|
sides: sides,
|
||||||
radius: radius,
|
radius: radius,
|
||||||
omega: gen_range(50., 200.) * if gen_range(0., 1.) > 0.5 { -1. } else { 1. },
|
omega: gen_range(0.8, 3.5) * if gen_range(0., 1.) > 0.5 { -1. } else { 1. },
|
||||||
rot: 0.,
|
rot: 0.,
|
||||||
alive: true,
|
alive: true,
|
||||||
}
|
}
|
||||||
|
|
14
src/main.rs
14
src/main.rs
|
@ -16,15 +16,15 @@ async fn main() {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
set_camera(&cam);
|
set_camera(&cam);
|
||||||
// let mut world = World::new();
|
let mut world = World::new();
|
||||||
let mut nn = NN::new(vec![1, 2, 1]);
|
// let mut nn = NN::new(vec![1, 2, 1]);
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
// clear_background(BLACK);
|
clear_background(BLACK);
|
||||||
// if !world.over {
|
if !world.over {
|
||||||
// world.update();
|
world.update();
|
||||||
// }
|
}
|
||||||
// world.draw();
|
world.draw();
|
||||||
next_frame().await
|
next_frame().await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,29 +56,39 @@ impl Player {
|
||||||
|
|
||||||
pub fn update(&mut self) {
|
pub fn update(&mut self) {
|
||||||
let mut mag = 0.;
|
let mut mag = 0.;
|
||||||
if is_key_down(KeyCode::Right) {
|
let mut keys = vec![false, false, false];
|
||||||
self.rot += 5.;
|
if let Some(brain) = &self.brain {
|
||||||
|
keys = brain
|
||||||
|
.feed_forward(vec![
|
||||||
|
self.pos.x, self.pos.y, self.vel.x, self.vel.y, self.rot,
|
||||||
|
])
|
||||||
|
.iter()
|
||||||
|
.map(|&x| if x > 0. { true } else { false })
|
||||||
|
.collect();
|
||||||
|
}
|
||||||
|
if is_key_down(KeyCode::Right) || keys[0] {
|
||||||
|
self.rot += 0.1;
|
||||||
self.dir = vec2(self.rot.cos(), self.rot.sin());
|
self.dir = vec2(self.rot.cos(), self.rot.sin());
|
||||||
}
|
}
|
||||||
if is_key_down(KeyCode::Left) {
|
if is_key_down(KeyCode::Left) || keys[1] {
|
||||||
self.rot -= 5.;
|
self.rot -= 0.1;
|
||||||
self.dir = vec2(self.rot.cos(), self.rot.sin());
|
self.dir = vec2(self.rot.cos(), self.rot.sin());
|
||||||
}
|
}
|
||||||
if is_key_down(KeyCode::Up) {
|
if is_key_down(KeyCode::Up) || keys[2] {
|
||||||
mag = 360.;
|
mag = 0.14;
|
||||||
}
|
}
|
||||||
if is_key_down(KeyCode::Space) {
|
if is_key_down(KeyCode::Space) {
|
||||||
if self.shot_interval + self.last_shot < get_time() as f32 {
|
if self.shot_interval + self.last_shot < get_time() as f32 {
|
||||||
self.last_shot = get_time() as f32;
|
self.last_shot = get_time() as f32;
|
||||||
self.bullets.push(Bullet {
|
self.bullets.push(Bullet {
|
||||||
pos: self.pos + self.dir.rotate(vec2(20., 0.)),
|
pos: self.pos + self.dir.rotate(vec2(20., 0.)),
|
||||||
vel: self.dir.rotate(vec2(500., 0.)) + self.vel,
|
vel: self.dir.rotate(vec2(8.5, 0.)) + self.vel,
|
||||||
alive: true,
|
alive: true,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.vel += (mag * self.dir - self.drag * self.vel.length() * self.vel);
|
self.vel += mag * self.dir - self.drag * self.vel.length() * self.vel;
|
||||||
self.pos += self.vel;
|
self.pos += self.vel;
|
||||||
if self.pos.x.abs() > screen_width() / 2. + 10. {
|
if self.pos.x.abs() > screen_width() / 2. + 10. {
|
||||||
self.pos.x *= -1.;
|
self.pos.x *= -1.;
|
||||||
|
|
|
@ -40,7 +40,7 @@ impl World {
|
||||||
self.score += 1;
|
self.score += 1;
|
||||||
match asteroid.size {
|
match asteroid.size {
|
||||||
AsteroidSize::Large => {
|
AsteroidSize::Large => {
|
||||||
let rand = vec2(gen_range(-50., 50.), gen_range(-50., 50.));
|
let rand = vec2(gen_range(-0.8, 0.8), gen_range(-0.8, 0.8));
|
||||||
to_add.push(Asteroid::new_from(
|
to_add.push(Asteroid::new_from(
|
||||||
asteroid.pos,
|
asteroid.pos,
|
||||||
asteroid.vel + rand,
|
asteroid.vel + rand,
|
||||||
|
@ -53,7 +53,7 @@ impl World {
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
AsteroidSize::Medium => {
|
AsteroidSize::Medium => {
|
||||||
let rand = vec2(gen_range(-40., 40.), gen_range(-40., 40.));
|
let rand = vec2(gen_range(-0.6, 0.6), gen_range(-0.6, 0.6));
|
||||||
to_add.push(Asteroid::new_from(
|
to_add.push(Asteroid::new_from(
|
||||||
asteroid.pos,
|
asteroid.pos,
|
||||||
asteroid.vel + rand,
|
asteroid.vel + rand,
|
||||||
|
|
Loading…
Reference in New Issue