Frontmatter
| id | 8675 |
| title | Implement Interactive Physics (Drag/Throw) |
| state | Closed |
| labels | enhancementaiperformance |
| assignees | tobiu |
| createdAt | Jan 15, 2026, 3:39 AM |
| updatedAt | Jan 15, 2026, 4:15 AM |
| githubUrl | https://github.com/neomjs/neo/issues/8675 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | 8661 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |
| blockedBy | [] |
| blocking | [] |
| closedAt | Jan 15, 2026, 4:15 AM |
Implement Interactive Physics (Drag/Throw)

tobiu
Jan 15, 2026, 4:15 AM
Input from Gemini 3 Pro:
✦ I have implemented Interactive Physics ("Force Push").
Changes:
- View Layer: Updated
MainNeo.mjsto captureclick,mousemove(local), andmouseleave. These events are delegated toHomeCanvas.mjs, which forwards them to the SharedWorker.- Physics Engine: Implemented a "Force Push" mechanic. When a Shockwave expands, it doesn't just gently repel nodes; it imparts a massive, lasting velocity impulse to any node caught in the wave front (
force * 10).- Result: Clicking on the canvas now feels powerful—like dropping a bomb into the swarm—scattering nodes and agents, which then slowly drift back together due to cohesion.
Objective
Allow users to physically interact with the swarm beyond simple repulsion.
Tasks
Technical Details
updateMouseStateto track drag state.updatePhysicsto override position for grabbed nodes.