use crate::force_generators::ForceGenerator;
pub struct ForceRegistry {
registrations: Vec<Box<dyn ForceGenerator>>,
}
impl ForceRegistry {
pub fn new() -> ForceRegistry {
ForceRegistry {
registrations: Vec::new(),
}
}
pub fn add(&mut self, fg: impl ForceGenerator + 'static) {
self.registrations.push(Box::new(fg));
}
pub fn remove_if_contains(&mut self, ptr: usize) {
'removal: loop {
let mut index = 0;
for (i, fg) in self.registrations.iter().enumerate() {
if fg.contains_ptr(ptr) {
index = i;
break;
}
if i >= self.registrations.len() - 1 {
break 'removal;
}
}
self.registrations.remove(index);
}
}
pub fn clear(&mut self) {
self.registrations.clear()
}
pub fn update_forces(&mut self) {
for fg in &mut self.registrations {
fg.update_force();
}
}
}