Giter VIP home page Giter VIP 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/

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

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

coffee-physics's Issues

Collision Behaviour Index Out of bounds bug

For some reason the index passed into Collision behaviour was the length of the array causing an error.
This is due to CoffeeScript [3..2] equalling an array [3,2]. To solve this I used arrayslicing, see code below.

     # Check pool for collisions.

- for i in [[email protected] - 1]

- o = @pool[i]

  •    for o in @pool[index..]
         if o isnt p
    

PS. Great library.

Custom renderer for Framer

Hi Justin
First, thank you so much for this amazing engine.

My idea is that CoffeePhysics could make a great module for Framer. Framer is brilliant โ€“ it lets me quickly get all my images together ready for animating, but it doesn't have a particle engine.

If a bunch of Framer layers could be thrown into CoffeePhysics as particles... amazing.

I'm a very novice coder, but would you say that adapting your DOMRenderer into a "FramerRenderer" is a good place to start?

Thank you very much!
Jim

performance.now support

Chrome just made performance.now() the default timestamp for requestAnimationFrame loops.

It'd be great if physics.step() could use this when integrating. Happy to write a PR if it's something the project wants.

Have a rectangle shape

Hello, I'm trying to have a platform with a rectangle shape, and I'm not seeing how I can add that shape.

I can have the drawn part and a Particle interacting well, but the Particle has the shape of a circle. Is there a way to have a rectangle shape?

images in experimental-webgl

Hi, this project looks really interesting. I'm trying to use this in a visualisation. I've managed to set up a working physics world, and now I want render images on the location of certain particles. Have you any idea of how to do this? I've tried drawing with a different context that supports drawImag, but it seems its not possible drawing with two different contexts to the same canvas. Anyone done this?

Attraction and Repulsion increased

Hello,

In the Coffee-Physics example, when you switch tabs and then return on the effect. Attraction and repulsion are considerably increased (proportionally to the time that you stay on the other tab).

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.