use rand::rngs::SmallRng; use rand::{Rng, SeedableRng}; use crate::system::model::DLASystem; use crate::system::{Storage}; use crate::system::spaces::square_grid::Grid2D; use crate::system::spaces::VectorStorage; use crate::system::spawner::UniformSpawner; use crate::system::sticker::{ProbabilisticSticking, SimpleSticking, Sticker}; use crate::system::walker::LocalRandomWalker; struct LoggerSticker { inner: SimpleSticking } impl> Sticker for LoggerSticker { fn should_stick(&self, rng: &mut R, space: &S, position: &Grid2D) -> bool { if self.inner.should_stick(rng, space, position) { println!("{:?}", position); } false } } struct ReadOnlyVectorStorage { inner: VectorStorage, } impl Storage for ReadOnlyVectorStorage { fn is_occupied(&self, position: &Grid2D) -> bool { self.inner.is_occupied(position) } fn deposit(&mut self, position: &Grid2D) { eprintln!("Write ignore for space at {position:?}"); } } pub fn surface_probability_measure(seed: u64, max_particles: usize, stick_probability: f32) -> DLASystem { DLASystem::new( SmallRng::seed_from_u64(seed), VectorStorage::new(1600, 3), LocalRandomWalker, UniformSpawner, ProbabilisticSticking { stick_probability }, max_particles, ) }