Add neighbours function to position
This commit is contained in:
parent
de88205379
commit
b88b93db59
@ -3,6 +3,7 @@ use std::ops::Add;
|
|||||||
pub mod walker;
|
pub mod walker;
|
||||||
pub mod storage;
|
pub mod storage;
|
||||||
pub mod model;
|
pub mod model;
|
||||||
|
pub mod generic;
|
||||||
|
|
||||||
pub(crate) const DIM: u32 = 2;
|
pub(crate) const DIM: u32 = 2;
|
||||||
|
|
||||||
@ -17,6 +18,15 @@ impl Position {
|
|||||||
pub fn in_direction(direction: u32, value: i32) -> Self {
|
pub fn in_direction(direction: u32, value: i32) -> Self {
|
||||||
if direction == 0 { Position(value, 0) } else { Position(0, value) }
|
if direction == 0 { Position(value, 0) } else { Position(0, value) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn neighbours(&self) -> impl Iterator<Item=Self> + '_ {
|
||||||
|
let a = (0..DIM).into_iter();
|
||||||
|
|
||||||
|
return a.flat_map(|direction| [
|
||||||
|
self.clone() + Position::in_direction(direction, 1),
|
||||||
|
self.clone() + Position::in_direction(direction, -1),
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Add for Position {
|
impl Add for Position {
|
||||||
|
|||||||
@ -87,16 +87,11 @@ impl<R: Rng, S: Storage, W: Walker<R>> DLASystem<R, S, W> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn check_stick(&mut self, position: &Position) -> bool {
|
fn check_stick(&mut self, position: &Position) -> bool {
|
||||||
for direction in 0..DIM {
|
position.neighbours()
|
||||||
for sign in [-1, 1] {
|
.any(|neighbour|
|
||||||
let neighbour = position.clone() + Position::in_direction(direction, sign);
|
self.storage.at(&neighbour)
|
||||||
if self.storage.at(&neighbour) && self.rng.gen_range(0.0f32..=1.0) < self.stick_probability {
|
&& self.rng.gen_range(0.0f32..=1.0) < self.stick_probability
|
||||||
return true;
|
)
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn spawn_particle(&mut self) {
|
fn spawn_particle(&mut self) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user