Parse

File Parse collisionbox.js

This tree is parsed live from the source file.

Classes

  • {{ item.name }}

    • {{ key }}

Not Classes

{{ getTree() }}

Comments

{{ getTreeComments() }}

Source

            
class CollisionBox {
    /*
    collisionBox = new CollisionBox(points)
    collisionBox.shuffle()
    */
    constructor(points) {
        this.points = points == undefined ? new PointList: points;
    }

    step(target) {
        this.shuffle(target, this.points);
    }

    shuffle(target, points=this.points) {
        const iterations=5;

        for (let k = 0; k < iterations; k++) {
            if(target) {
                points.forEach((p) => {
                    this.resolveCollision(target, p, true, false);
                });
            }

            for (let i = 0; i < points.length; i++) {
                let p1 = points[i];
                for (let j = i + 1; j < points.length; j++) {
                    let p2 = points[j];
                    this.resolveCollision(p1, p2);
                }
            }
        }
    }

    resolveCollision(p1, p2, p1Static = false, p2Static = false) {
          let dx = p2.x - p1.x;
          let dy = p2.y - p1.y;
          p2Static = p2.locked == true
          p1Static = p1.locked == true
          let dist = Math.hypot(dx, dy);
          let overlap = p1.radius + p2.radius - dist;

        if (overlap > 0) {
            let nx = dx / dist;
            let ny = dy / dist;

            let totalMass = (p1Static ? 0 : 1) + (p2Static ? 0 : 1);
            let p1Move = p1Static ? 0 : overlap / totalMass;
            let p2Move = p2Static ? 0 : overlap / totalMass;

            p1.x -= nx * p1Move;
            p1.y -= ny * p1Move;
            p2.x += nx * p2Move;
            p2.y += ny * p2Move;
        }
    }

}



copy