check only normal people

This commit is contained in:
2022-05-03 23:17:45 +02:00
parent fb6e9e82b3
commit 3a41670fea
+54 -53
View File
@@ -108,6 +108,8 @@ impl Population {
pub fn propagate(&mut self) -> [i32; 4] { pub fn propagate(&mut self) -> [i32; 4] {
let mut people_to_check: Vec<Point> = let mut people_to_check: Vec<Point> =
Vec::with_capacity((self.width * self.height) as usize); Vec::with_capacity((self.width * self.height) as usize);
let mut possible_infected: Vec<Point> =
Vec::with_capacity((self.width * self.height) as usize);
let mut people_to_infect: Vec<Point> = let mut people_to_infect: Vec<Point> =
Vec::with_capacity((self.width * self.height) as usize); Vec::with_capacity((self.width * self.height) as usize);
let mut people_to_cure: Vec<Point> = let mut people_to_cure: Vec<Point> =
@@ -120,6 +122,7 @@ impl Population {
for h in self.humans.iter() { for h in self.humans.iter() {
match h.present_state { match h.present_state {
State::Normal => { State::Normal => {
possible_infected.push(Point{ x: h.x, y: h.y});
stats[0] += 1; stats[0] += 1;
} }
State::Infected => { State::Infected => {
@@ -150,59 +153,57 @@ impl Population {
} }
} }
} }
for pos in self.humans.iter() { for pos in possible_infected.iter() {
if pos.present_state == State::Normal { let infected: bool = self.is_inside_and_infected(
let infected: bool = self.is_inside_and_infected( Point {
Point { x: pos.x - 1,
x: pos.x - 1, y: pos.y - 1,
y: pos.y - 1, },
}, ) || //Top Left
) || //Top Left self.is_inside_and_infected(
self.is_inside_and_infected( Point {
Point { x: pos.x,
x: pos.x, y: pos.y - 1,
y: pos.y - 1, },
}, ) || //Top
) || //Top self.is_inside_and_infected(
self.is_inside_and_infected( Point {
Point { x: pos.x + 1,
x: pos.x + 1, y: pos.y - 1,
y: pos.y - 1, },
}, ) || //Top Right
) || //Top Right self.is_inside_and_infected(
self.is_inside_and_infected( Point {
Point { x: pos.x - 1,
x: pos.x - 1, y: pos.y,
y: pos.y, },
}, ) || //Left
) || //Left self.is_inside_and_infected(
self.is_inside_and_infected( Point {
Point { x: pos.x + 1,
x: pos.x + 1, y: pos.y,
y: pos.y, },
}, ) || //Right
) || //Right self.is_inside_and_infected(
self.is_inside_and_infected( Point {
Point { x: pos.x - 1,
x: pos.x - 1, y: pos.y + 1,
y: pos.y + 1, },
}, ) || //Bottom Left
) || //Bottom Left self.is_inside_and_infected(
self.is_inside_and_infected( Point {
Point { x: pos.x,
x: pos.x, y: pos.y + 1,
y: pos.y + 1, },
}, ) || //Bottom
) || //Bottom self.is_inside_and_infected(
self.is_inside_and_infected( Point {
Point { x: pos.x + 1,
x: pos.x + 1, y: pos.y + 1,
y: pos.y + 1, },
}, ); //Bottom Right
); //Bottom Right if infected {
if infected { people_to_infect.push(Point { x: pos.x, y: pos.y });
people_to_infect.push(Point { x: pos.x, y: pos.y });
}
} }
} }