this.updateMetaballs = function()

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);

      };