Skip to content

Commit cf27784

Browse files
committed
feat: Implement Interactive Physics (Force Push) for Neural Swarm (#8675)
1 parent 92875ed commit cf27784

3 files changed

Lines changed: 40 additions & 6 deletions

File tree

apps/portal/canvas/HomeCanvas.mjs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -864,18 +864,20 @@ class HomeCanvas extends Base {
864864
}
865865
}
866866

867-
// 3. Shockwave Repulsion
867+
// 3. Shockwave Repulsion (Explosive Force)
868868
if (me.shockwaves.length > 0) {
869869
me.shockwaves.forEach(wave => {
870870
let dx = buffer[idx] - wave.x,
871871
dy = buffer[idx + 1] - wave.y,
872872
dist = Math.sqrt(dx*dx + dy*dy),
873873
wRad = wave.age * wave.speed;
874874

875+
// Hit the "Wave Front"
875876
if (Math.abs(dist - wRad) < 40) {
876877
let force = (1 - (wave.age / 60));
877-
buffer[idx + 2] += (dx / dist) * force * 2;
878-
buffer[idx + 3] += (dy / dist) * force * 2;
878+
// Massive Impulse (Throwing)
879+
buffer[idx + 2] += (dx / dist) * force * 10;
880+
buffer[idx + 3] += (dy / dist) * force * 10;
879881
}
880882
});
881883
}

apps/portal/view/home/HomeCanvas.mjs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,22 @@ class HomeCanvas extends Canvas {
8585
return me.canvasId
8686
}
8787

88+
/**
89+
* Forwards click events to the Shared Worker to trigger Shockwaves.
90+
* @param {Object} data
91+
*/
92+
onClick(data) {
93+
let me = this;
94+
95+
if (me.isCanvasReady && me.canvasRect) {
96+
Portal.canvas.HomeCanvas.updateMouseState({
97+
click: true,
98+
x : data.clientX - me.canvasRect.left,
99+
y : data.clientY - me.canvasRect.top
100+
})
101+
}
102+
}
103+
88104
/**
89105
* Pauses the Shared Worker render loop.
90106
*/

apps/portal/view/home/parts/MainNeo.mjs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ class MainNeo extends BaseContainer {
2222

2323
layout: {ntype: 'vbox', align: 'center', pack: 'center'},
2424
/**
25-
* @member {Object} listeners
25+
* @member {Object} domListeners
2626
*/
27-
listeners: {
28-
mousemove: 'onMouseMove'
27+
domListeners: {
28+
click : 'onClick',
29+
mouseleave: 'onMouseLeave',
30+
mousemove : {fn: 'onMouseMove', local: true}
2931
},
3032
/**
3133
* @member {Object[]} items
@@ -119,6 +121,20 @@ class MainNeo extends BaseContainer {
119121
this.getItem('home-canvas')?.pause()
120122
}
121123

124+
/**
125+
* @param {Object} data
126+
*/
127+
onClick(data) {
128+
this.getItem('home-canvas')?.onClick(data)
129+
}
130+
131+
/**
132+
* @param {Object} data
133+
*/
134+
onMouseLeave(data) {
135+
this.getItem('home-canvas')?.onMouseLeave(data)
136+
}
137+
122138
/**
123139
* @param {Object} data
124140
*/

0 commit comments

Comments
 (0)