use cure_engine::{Effect, Lang};
pub fn rebuild_effects<L: Lang>(lang: &L, node_count: usize) -> Vec<Option<Effect>> {
let mut cache: Vec<Option<Effect>> = vec![None; node_count];
for _round in 0..4 {
let mut changed = false;
for i in 0..node_count {
let id = lang.id_of_index(i);
let mut e = lang.own_effect(id);
for &c in lang.children(id) {
e = e.worst(
cache.get(lang.node_index(c)).and_then(|x| *x).unwrap_or(Effect::Unknown),
);
}
if cache[i] != Some(e) {
cache[i] = Some(e);
changed = true;
}
}
if !changed {
break;
}
}
cache
}