From 43910cce78a2ed8a9681c1cb64369c7441601b38 Mon Sep 17 00:00:00 2001 From: Nova Date: Mon, 12 Feb 2024 11:34:55 -0500 Subject: [PATCH] feat(input): capturing handler's distance is halved --- src/nodes/input/mod.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/nodes/input/mod.rs b/src/nodes/input/mod.rs index 5be7308..7e4af87 100644 --- a/src/nodes/input/mod.rs +++ b/src/nodes/input/mod.rs @@ -170,10 +170,16 @@ impl InputMethod { .add(self as *const InputMethod as usize, &method_alias); } - fn compare_distance(&self, to: &Field) -> f32 { - self.specialization + fn compare_distance(&self, to: &InputHandler) -> f32 { + let distance = self + .specialization .lock() - .compare_distance(&self.spatial, to) + .compare_distance(&self.spatial, &to.field); + if self.captures.contains(to) { + distance * 0.5 + } else { + distance + } } fn true_distance(&self, to: &Field) -> f32 { self.specialization.lock().true_distance(&self.spatial, to) @@ -253,7 +259,7 @@ pub struct DistanceLink { impl DistanceLink { fn from(method: Arc, handler: Arc) -> Self { DistanceLink { - distance: method.compare_distance(&handler.field), + distance: method.compare_distance(&handler), method, handler, }