Git Product home page Git Product logo

coffee-physics's Introduction

Coffee Physics

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

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

Build & Example

npm install
bower install
grunt
open demo/index.html

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

coffee-physics's People

Contributors

ariaminaei avatar jastanton avatar lytc avatar soulwire avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.