Skip to content
A simple, lightweight physics engine written in CoffeeScript
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
compiled
deploy
source
.gitignore
CakeFile
LICENSE
README.md
index.html

README.md

Coffee Physics

A lightweight physics engine, written in CoffeeScript. Why? Why not!?

Early demos can be found here: http://soulwire.github.com/Coffee-Physics/

A Quick Example

The CoffeePhysics API is designed to be very simple. Consider the following example:

// 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 = 120;
    
    avoidMouse.setRadius( 60 );
    avoidMouse.strength = -1000;
    
    example.fillStyle = '#ff00ff';
}

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;
}
You can’t perform that action at this time.