in src/Layer/NativeMetaballs/NativeMetaballs.js [338:379]
this.updateMetaballs = function () {
time += 0.01;
var count = config.metaballs.length;
var scale = target.height / model.atHeight;
var radius = 30;
var targX, targY, t, d, mb;
for (var i = 0; i < count; i++) {
mb = metaballsObjects[i];
targX = (mb.offset.x * displayWidth) + (mb.center.x * scale + (Math.sin((mb.t + time) * mb.speed) * radius * mb.arcMult.x) + (Math.sin((mb.t + time) * mb.speed) * radius * mb.arcMult.x)) * animationProperties.positionMultiplier;
targY = (mb.offset.y * displayHeight) + (mb.center.y * scale + (Math.cos((mb.t + time) * mb.speed) * radius * mb.arcMult.y) + (Math.cos((mb.t + time) * mb.speed) * radius * mb.arcMult.y)) * animationProperties.positionMultiplier;
t = Math.atan2(mb.x - mousePosition.x, mb.y - mousePosition.y);
d = 500 / Math.sqrt(Math.pow(mousePosition.x - mb.x, 2) + Math.pow(mousePosition.y - mb.y, 2));
if (!isPaused) {
mb.x += d * Math.sin(t) + (targX - mb.x) * 0.1;
mb.y += d * Math.cos(t) + (targY - mb.y) * 0.1;
} else {
// mb.x += d * Math.sin(t);
// mb.y += d * Math.cos(t);
}
}
for (var i = 0; i < count; i++) {
var baseIndex = 3 * i;
var mb = metaballsObjects[i];
dataToSendToGPU[baseIndex + 0] = mb.x;
dataToSendToGPU[baseIndex + 1] = mb.y;
dataToSendToGPU[baseIndex + 2] = (mb.radius * scale * animationProperties.radiusMultiplier);
}
gl.useProgram(program);
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, colorTexture);
gl.enable(gl.BLEND);
gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
gl.uniform3fv(metaballsObjectsHandle, dataToSendToGPU);
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
};