CoffeePhysics avoidMouse

simple physics engine example: collisions, avoidMouse, pulltoCenter

by schrodingers

HTML

<script src="https://rawgithub.com/soulwire/Coffee-Physics/master/deploy/physics.js"></script>
<script src="https://rawgithub.com/soulwire/sketch.js/master/js/sketch.min.js"></script>

JavaScript

// Create a physics instance which uses the Verlet integration method
var physics = new Physics();
physics.integrator = new Verlet();

// Design some behaviours for particles
var avoidMouse = new Attraction();
var pullToCenter = new Attraction();

// Allow particle collisions to make things interesting
var collision = new Collision();

// Use Sketch.js to make life much easier
var example = Sketch.create({
  container: document.body
});

example.setup = function() {

  for (var i = 0; i < 200; i++) {

    // Create a particle
    var particle = new Particle(Math.random());
    var position = new Vector(random(this.width), random(this.height));
    particle.setRadius(particle.mass * 10);
    particle.moveTo(position);

    // Make it collidable
    collision.pool.push(particle);

    // Apply behaviours
    particle.behaviours.push(avoidMouse, pullToCenter, collision);

    // Add to the simulation
    physics.particles.push(particle);
  }

  pullToCenter.target.x = this.width / 2;
  pullToCenter.target.y = this.height / 2;
  pullToCenter.strength = 220;


  avoidMouse.setRadius(50);

  avoidMouse.strength = -1000;


  example.fillStyle = '#0055ff';
}

example.draw = function() {

  // Step the simulation
  physics.step();

  // Render particles
  for (var i = 0, n = physics.particles.length; i < n; i++) {

    var particle = physics.particles[i];
    example.beginPath();
    example.arc(particle.pos.x, particle.pos.y, particle.radius, 0, Math.PI * 2);
    example.fill();
  }
}

example.mousemove = function() {
  avoidMouse.target.x = example.mouse.x;
  avoidMouse.target.y = example.mouse.y;
}