Better node selection logic

This commit is contained in:
mars 2022-11-03 19:07:11 -06:00
parent 6f0be98a11
commit dfb160ffef
1 changed files with 31 additions and 3 deletions

View File

@ -18,8 +18,8 @@ impl Default for Body {
position: Vec2::ZERO,
velocity: Vec2::ZERO,
acceleration: Vec2::ZERO,
drag: 0.8,
mass: 40.0,
drag: 0.85,
mass: 25.0,
fixed: false,
}
}
@ -338,7 +338,35 @@ impl ForceGraph {
let offset = Vec2::from_angle(child as f32) * 10.0;
let child = &mut self.nodes[child];
child.info.hidden = false;
child.body.fixed = false;
child.body.position = position + offset;
child.body.velocity = Vec2::ZERO;
}
}
pub fn hide(&mut self, node: usize) {
let node = &mut self.nodes[node];
node.info.hidden = true;
let children = node.info.unhide.to_owned();
for child in children {
self.hide(child);
}
}
pub fn on_select(&mut self, id: usize) {
let node = &mut self.nodes[id];
if !node.body.fixed {
node.body.fixed = true;
self.unhide(id);
} else {
node.body.fixed = false;
let children = node.info.unhide.to_owned();
for child in children {
self.hide(child);
}
}
}
@ -446,7 +474,7 @@ impl PanelImpl for ForceDirectedGraphPanel {
.iter()
.position(|node| !node.info.hidden && node.body.position.distance(at) < 6.0);
if let Some(node) = node {
self.graph.unhide(node);
self.graph.on_select(node);
}
}
}