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