seek out food
This commit is contained in:
parent
fe5f5b5f93
commit
33f322c0b1
1 changed files with 21 additions and 3 deletions
|
|
@ -10,7 +10,7 @@ use parry2d::shape::Ball;
|
|||
use parry2d::shape::Segment;
|
||||
use parry2d::shape::Shape;
|
||||
|
||||
const VIEW_DIST: f32 = 80.0;
|
||||
const VIEW_DIST: f32 = 180.0;
|
||||
const BOT_RADIUS: f32 = 16.0;
|
||||
|
||||
struct Robot {
|
||||
|
|
@ -51,6 +51,13 @@ impl Robot {
|
|||
.map(|thing| contact(&Pose2::IDENTITY, &collider, thing.0, thing.1, 0.0).unwrap()).flatten()
|
||||
.map(|contact| contact.point1.distance(self.pose.translation)).reduce(|x: f32,y: f32| x.min(y))
|
||||
}
|
||||
|
||||
pub fn policy(&mut self, sensor: Sensor){
|
||||
match sensor {
|
||||
Sensor::Food => self.move_step(1.0, 0.0),
|
||||
Sensor::None => self.move_step(1.0, 0.01),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct Food {
|
||||
|
|
@ -59,6 +66,11 @@ struct Food {
|
|||
alive: bool,
|
||||
}
|
||||
|
||||
enum Sensor {
|
||||
Food,
|
||||
None
|
||||
}
|
||||
|
||||
impl Food {
|
||||
fn new(position: Vec2) -> Self {
|
||||
let pose:Pose = Pose::from_translation(position.to_array().into());
|
||||
|
|
@ -83,9 +95,13 @@ async fn main() {
|
|||
let mut robots = Vec::new();
|
||||
robots.push(Robot::new(Vec2 { x: 100.0, y: 100.0 }));
|
||||
robots.push(Robot::new(Vec2 { x: 140.0, y: 100.0 }));
|
||||
robots.push(Robot::new(Vec2 { x: 140.0, y: 200.0 }));
|
||||
robots.push(Robot::new(Vec2 { x: 180.0, y: 150.0 }));
|
||||
|
||||
let mut food = Vec::new();
|
||||
food.push(Food::new(Vec2 { x: 160.0, y: 100.0 }));
|
||||
food.push(Food::new(Vec2 { x: 360.0, y: 100.0 }));
|
||||
food.push(Food::new(Vec2 { x: 360.0, y: 300.0 }));
|
||||
|
||||
loop {
|
||||
clear_background(LIGHTGRAY);
|
||||
|
|
@ -95,9 +111,11 @@ async fn main() {
|
|||
}
|
||||
|
||||
for robot in &mut robots {
|
||||
robot.move_step(1.1,0.01);
|
||||
println!("loop");
|
||||
println!("Food detection: {:?}",robot.detect(food.iter().map(Food::collider)));
|
||||
let detect = robot.detect(food.iter().map(Food::collider));
|
||||
let sensor = if detect.is_some() {Sensor::Food} else {Sensor::None};
|
||||
robot.policy(sensor);
|
||||
println!("Food detection: {:?}",detect);
|
||||
robot.draw();
|
||||
}
|
||||
draw_text("HELLO", 20.0, 20.0, 30.0, DARKGRAY);
|
||||
|
|
|
|||
Loading…
Reference in a new issue