diff --git a/app-proto/src/assembly.rs b/app-proto/src/assembly.rs index 615b010..5dae508 100644 --- a/app-proto/src/assembly.rs +++ b/app-proto/src/assembly.rs @@ -148,15 +148,7 @@ pub trait Regulator: ProblemPoser + OutlineItem { fn measurement(&self) -> ReadSignal; fn set_point(&self) -> Signal; - // this method is used to responsively precondition the assembly for - // realization when the regulator becomes a constraint, or is edited while - // acting as a constraint. it should track the set point, do any desired - // preconditioning when the set point is present, and use its return value - // to report whether the set is present. the default implementation does no - // preconditioning - fn try_activate(&self, _assembly: &Assembly) -> bool { - self.set_point().with(|set_pt| set_pt.is_present()) - } + fn activate(&self, _assembly: &Assembly) {} } pub struct InversiveDistanceRegulator { @@ -180,7 +172,11 @@ impl InversiveDistanceRegulator { let set_point = create_signal(SpecifiedValue::from_empty_spec()); - InversiveDistanceRegulator { subjects, measurement, set_point } + InversiveDistanceRegulator { + subjects: subjects, + measurement: measurement, + set_point: set_point + } } } @@ -231,7 +227,11 @@ impl HalfCurvatureRegulator { let set_point = create_signal(SpecifiedValue::from_empty_spec()); - HalfCurvatureRegulator { subject, measurement, set_point } + HalfCurvatureRegulator { + subject: subject, + measurement: measurement, + set_point: set_point + } } } @@ -248,18 +248,14 @@ impl Regulator for HalfCurvatureRegulator { self.set_point } - fn try_activate(&self, assembly: &Assembly) -> bool { - match self.set_point.with(|set_pt| set_pt.value) { - Some(half_curv) => { - let representation = assembly.elements.with_untracked( - |elts| elts[self.subject].representation - ); - representation.update( - |rep| change_half_curvature(rep, half_curv) - ); - true - } - None => false + fn activate(&self, assembly: &Assembly) { + if let Some(half_curv) = self.set_point.with_untracked(|set_pt| set_pt.value) { + let representation = assembly.elements.with_untracked( + |elts| elts[self.subject].representation + ); + representation.update( + |rep| change_half_curvature(rep, half_curv) + ); } } } @@ -391,13 +387,11 @@ impl Assembly { // edited while acting as a constraint let self_for_effect = self.clone(); create_effect(move || { - /* DEBUG */ - // log the regulator update console::log_1(&JsValue::from( format!("Updated regulator with subjects {:?}", regulator_rc.subjects()) )); - - if regulator_rc.try_activate(&self_for_effect) { + if regulator_rc.set_point().with(|set_pt| set_pt.is_present()) { + regulator_rc.activate(&self_for_effect); self_for_effect.realize(); } });