{
    "project": {
        "name": "p2.js",
        "description": "A JavaScript 2D physics engine.",
        "version": "0.7.1"
    },
    "files": {
        "src/collision/AABB.js": {
            "name": "src/collision/AABB.js",
            "modules": {},
            "classes": {
                "AABB": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/collision/Broadphase.js": {
            "name": "src/collision/Broadphase.js",
            "modules": {},
            "classes": {
                "Broadphase": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/collision/NaiveBroadphase.js": {
            "name": "src/collision/NaiveBroadphase.js",
            "modules": {},
            "classes": {
                "NaiveBroadphase": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/collision/Narrowphase.js": {
            "name": "src/collision/Narrowphase.js",
            "modules": {},
            "classes": {
                "Narrowphase": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/collision/Ray.js": {
            "name": "src/collision/Ray.js",
            "modules": {},
            "classes": {
                "Ray": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/collision/RaycastResult.js": {
            "name": "src/collision/RaycastResult.js",
            "modules": {},
            "classes": {
                "RaycastResult": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/collision/SAPBroadphase.js": {
            "name": "src/collision/SAPBroadphase.js",
            "modules": {},
            "classes": {
                "SAPBroadphase": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/constraints/Constraint.js": {
            "name": "src/constraints/Constraint.js",
            "modules": {},
            "classes": {
                "Constraint": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/constraints/DistanceConstraint.js": {
            "name": "src/constraints/DistanceConstraint.js",
            "modules": {},
            "classes": {
                "DistanceConstraint": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/constraints/GearConstraint.js": {
            "name": "src/constraints/GearConstraint.js",
            "modules": {},
            "classes": {
                "GearConstraint": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/constraints/LockConstraint.js": {
            "name": "src/constraints/LockConstraint.js",
            "modules": {},
            "classes": {
                "LockConstraint": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/constraints/PrismaticConstraint.js": {
            "name": "src/constraints/PrismaticConstraint.js",
            "modules": {},
            "classes": {
                "PrismaticConstraint": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/constraints/RevoluteConstraint.js": {
            "name": "src/constraints/RevoluteConstraint.js",
            "modules": {},
            "classes": {
                "RevoluteConstraint": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/equations/AngleLockEquation.js": {
            "name": "src/equations/AngleLockEquation.js",
            "modules": {},
            "classes": {
                "AngleLockEquation": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/equations/ContactEquation.js": {
            "name": "src/equations/ContactEquation.js",
            "modules": {},
            "classes": {
                "ContactEquation": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/equations/Equation.js": {
            "name": "src/equations/Equation.js",
            "modules": {},
            "classes": {
                "Equation": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/equations/FrictionEquation.js": {
            "name": "src/equations/FrictionEquation.js",
            "modules": {},
            "classes": {
                "FrictionEquation": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/equations/RotationalLockEquation.js": {
            "name": "src/equations/RotationalLockEquation.js",
            "modules": {},
            "classes": {
                "RotationalLockEquation": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/equations/RotationalVelocityEquation.js": {
            "name": "src/equations/RotationalVelocityEquation.js",
            "modules": {},
            "classes": {
                "RotationalVelocityEquation": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/events/EventEmitter.js": {
            "name": "src/events/EventEmitter.js",
            "modules": {},
            "classes": {
                "EventEmitter": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/material/ContactMaterial.js": {
            "name": "src/material/ContactMaterial.js",
            "modules": {},
            "classes": {
                "ContactMaterial": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/material/Material.js": {
            "name": "src/material/Material.js",
            "modules": {},
            "classes": {
                "Material": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/math/vec2.js": {
            "name": "src/math/vec2.js",
            "modules": {},
            "classes": {
                "vec2": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/objects/Body.js": {
            "name": "src/objects/Body.js",
            "modules": {},
            "classes": {
                "Body": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/objects/LinearSpring.js": {
            "name": "src/objects/LinearSpring.js",
            "modules": {},
            "classes": {
                "LinearSpring": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/objects/RotationalSpring.js": {
            "name": "src/objects/RotationalSpring.js",
            "modules": {},
            "classes": {
                "RotationalSpring": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/objects/Spring.js": {
            "name": "src/objects/Spring.js",
            "modules": {},
            "classes": {
                "Spring": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/objects/TopDownVehicle.js": {
            "name": "src/objects/TopDownVehicle.js",
            "modules": {},
            "classes": {
                "TopDownVehicle": 1,
                "WheelConstraint": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/shapes/Box.js": {
            "name": "src/shapes/Box.js",
            "modules": {},
            "classes": {
                "Box": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/shapes/Capsule.js": {
            "name": "src/shapes/Capsule.js",
            "modules": {},
            "classes": {
                "Capsule": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/shapes/Circle.js": {
            "name": "src/shapes/Circle.js",
            "modules": {},
            "classes": {
                "Circle": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/shapes/Convex.js": {
            "name": "src/shapes/Convex.js",
            "modules": {},
            "classes": {
                "Convex": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/shapes/Heightfield.js": {
            "name": "src/shapes/Heightfield.js",
            "modules": {},
            "classes": {
                "Heightfield": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/shapes/Line.js": {
            "name": "src/shapes/Line.js",
            "modules": {},
            "classes": {
                "Line": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/shapes/Particle.js": {
            "name": "src/shapes/Particle.js",
            "modules": {},
            "classes": {
                "Particle": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/shapes/Plane.js": {
            "name": "src/shapes/Plane.js",
            "modules": {},
            "classes": {
                "Plane": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/shapes/Shape.js": {
            "name": "src/shapes/Shape.js",
            "modules": {},
            "classes": {
                "Shape": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/solver/GSSolver.js": {
            "name": "src/solver/GSSolver.js",
            "modules": {},
            "classes": {
                "GSSolver": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/solver/Solver.js": {
            "name": "src/solver/Solver.js",
            "modules": {},
            "classes": {
                "Solver": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/utils/ContactEquationPool.js": {
            "name": "src/utils/ContactEquationPool.js",
            "modules": {},
            "classes": {},
            "fors": {},
            "namespaces": {}
        },
        "src/utils/FrictionEquationPool.js": {
            "name": "src/utils/FrictionEquationPool.js",
            "modules": {},
            "classes": {},
            "fors": {},
            "namespaces": {}
        },
        "src/utils/IslandNodePool.js": {
            "name": "src/utils/IslandNodePool.js",
            "modules": {},
            "classes": {},
            "fors": {},
            "namespaces": {}
        },
        "src/utils/IslandPool.js": {
            "name": "src/utils/IslandPool.js",
            "modules": {},
            "classes": {},
            "fors": {},
            "namespaces": {}
        },
        "src/utils/OverlapKeeper.js": {
            "name": "src/utils/OverlapKeeper.js",
            "modules": {},
            "classes": {
                "OverlapKeeper": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/utils/OverlapKeeperRecord.js": {
            "name": "src/utils/OverlapKeeperRecord.js",
            "modules": {},
            "classes": {
                "OverlapKeeperRecord": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/utils/OverlapKeeperRecordPool.js": {
            "name": "src/utils/OverlapKeeperRecordPool.js",
            "modules": {},
            "classes": {
                "": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/utils/Pool.js": {
            "name": "src/utils/Pool.js",
            "modules": {},
            "classes": {
                "Object pooling utility.": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/utils/TupleDictionary.js": {
            "name": "src/utils/TupleDictionary.js",
            "modules": {},
            "classes": {
                "TupleDictionary": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/utils/Utils.js": {
            "name": "src/utils/Utils.js",
            "modules": {},
            "classes": {
                "Utils": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/world/Island.js": {
            "name": "src/world/Island.js",
            "modules": {},
            "classes": {
                "Island": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/world/IslandManager.js": {
            "name": "src/world/IslandManager.js",
            "modules": {},
            "classes": {
                "IslandManager": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/world/IslandNode.js": {
            "name": "src/world/IslandNode.js",
            "modules": {},
            "classes": {
                "IslandNode": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "src/world/World.js": {
            "name": "src/world/World.js",
            "modules": {},
            "classes": {
                "World": 1
            },
            "fors": {},
            "namespaces": {}
        }
    },
    "modules": {},
    "classes": {
        "AABB": {
            "name": "AABB",
            "shortname": "AABB",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/collision/AABB.js",
            "line": 6,
            "description": "Axis aligned bounding box class.",
            "is_constructor": 1,
            "params": [
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "upperBound",
                            "description": "",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "lowerBound",
                            "description": "",
                            "type": "Array",
                            "optional": true
                        }
                    ]
                }
            ]
        },
        "Broadphase": {
            "name": "Broadphase",
            "shortname": "Broadphase",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/collision/Broadphase.js",
            "line": 6,
            "description": "Base class for broadphase implementations.",
            "is_constructor": 1
        },
        "NaiveBroadphase": {
            "name": "NaiveBroadphase",
            "shortname": "NaiveBroadphase",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/collision/NaiveBroadphase.js",
            "line": 10,
            "description": "Naive broadphase implementation. Does N^2 tests.",
            "is_constructor": 1,
            "extends": "Broadphase"
        },
        "Narrowphase": {
            "name": "Narrowphase",
            "shortname": "Narrowphase",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/collision/Narrowphase.js",
            "line": 43,
            "description": "Narrowphase. Creates contacts and friction given shapes and transforms.",
            "is_constructor": 1
        },
        "Ray": {
            "name": "Ray",
            "shortname": "Ray",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/collision/Ray.js",
            "line": 8,
            "description": "A line with a start and end point that is used to intersect shapes. For an example, see {{#crossLink \"World/raycast:method\"}}World.raycast{{/crossLink}}",
            "is_constructor": 1,
            "params": [
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "from",
                            "description": "",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "to",
                            "description": "",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "checkCollisionResponse",
                            "description": "",
                            "type": "Boolean",
                            "optional": true,
                            "optdefault": "true"
                        },
                        {
                            "name": "skipBackfaces",
                            "description": "",
                            "type": "Boolean",
                            "optional": true,
                            "optdefault": "false"
                        },
                        {
                            "name": "collisionMask",
                            "description": "",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "-1"
                        },
                        {
                            "name": "collisionGroup",
                            "description": "",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "-1"
                        },
                        {
                            "name": "mode",
                            "description": "",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "Ray.ANY"
                        },
                        {
                            "name": "callback",
                            "description": "",
                            "type": "Number",
                            "optional": true
                        }
                    ]
                }
            ]
        },
        "RaycastResult": {
            "name": "RaycastResult",
            "shortname": "RaycastResult",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/collision/RaycastResult.js",
            "line": 6,
            "description": "Storage for Ray casting hit data.",
            "is_constructor": 1
        },
        "SAPBroadphase": {
            "name": "SAPBroadphase",
            "shortname": "SAPBroadphase",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/collision/SAPBroadphase.js",
            "line": 6,
            "description": "Sweep and prune broadphase along one axis.",
            "is_constructor": 1,
            "extends": "Broadphase"
        },
        "Constraint": {
            "name": "Constraint",
            "shortname": "Constraint",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/constraints/Constraint.js",
            "line": 5,
            "description": "Base constraint class.",
            "is_constructor": 1,
            "author": "schteppe",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "type",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "collideConnected",
                            "description": "",
                            "type": "Object",
                            "optional": true,
                            "optdefault": "true"
                        }
                    ]
                }
            ]
        },
        "DistanceConstraint": {
            "name": "DistanceConstraint",
            "shortname": "DistanceConstraint",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/constraints/DistanceConstraint.js",
            "line": 8,
            "description": "Constraint that tries to keep the distance between two bodies constant.",
            "is_constructor": 1,
            "author": "schteppe",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "distance",
                            "description": "The distance to keep between the anchor points. Defaults to the current distance between the bodies.",
                            "type": "Number",
                            "optional": true
                        },
                        {
                            "name": "localAnchorA] The anchor point for bodyA, defined locally in bodyA frame. Defaults to [0,0",
                            "description": ".",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "localAnchorB] The anchor point for bodyB, defined locally in bodyB frame. Defaults to [0,0",
                            "description": ".",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "maxForce",
                            "description": "Maximum force to apply.",
                            "type": "Object",
                            "optional": true,
                            "optdefault": "Number.MAX_VALUE"
                        }
                    ]
                }
            ],
            "extends": "Constraint",
            "example": [
                "\n    // If distance is not given as an option, then the current distance between the bodies is used.\n    // In this example, the bodies will be constrained to have a distance of 2 between their centers.\n    var bodyA = new Body({ mass: 1, position: [-1, 0] });\n    var bodyB = new Body({ mass: 1, position: [1, 0] });\n    var constraint = new DistanceConstraint(bodyA, bodyB);\n    world.addConstraint(constraint);",
                "\n    // Manually set the distance and anchors\n    var constraint = new DistanceConstraint(bodyA, bodyB, {\n        distance: 1,          // Distance to keep between the points\n        localAnchorA: [1, 0], // Point on bodyA\n        localAnchorB: [-1, 0] // Point on bodyB\n    });\n    world.addConstraint(constraint);"
            ]
        },
        "GearConstraint": {
            "name": "GearConstraint",
            "shortname": "GearConstraint",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/constraints/GearConstraint.js",
            "line": 8,
            "description": "Constrains the angle of two bodies to each other to be equal. If a gear ratio is not one, the angle of bodyA must be a multiple of the angle of bodyB.",
            "is_constructor": 1,
            "author": "schteppe",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "angle",
                            "description": "Relative angle between the bodies. Will be set to the current angle between the bodies (the gear ratio is accounted for).",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "0"
                        },
                        {
                            "name": "ratio",
                            "description": "Gear ratio.",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "1"
                        },
                        {
                            "name": "maxTorque",
                            "description": "Maximum torque to apply.",
                            "type": "Number",
                            "optional": true
                        }
                    ]
                }
            ],
            "extends": "Constraint",
            "example": [
                "\n    var constraint = new GearConstraint(bodyA, bodyB);\n    world.addConstraint(constraint);",
                "\n    var constraint = new GearConstraint(bodyA, bodyB, {\n        ratio: 2,\n        maxTorque: 1000\n    });\n    world.addConstraint(constraint);"
            ]
        },
        "LockConstraint": {
            "name": "LockConstraint",
            "shortname": "LockConstraint",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/constraints/LockConstraint.js",
            "line": 7,
            "description": "Locks the relative position and rotation between two bodies.",
            "is_constructor": 1,
            "author": "schteppe",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "localOffsetB",
                            "description": "The offset of bodyB in bodyA's frame. If not given the offset is computed from current positions.",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "localAngleB",
                            "description": "The angle of bodyB in bodyA's frame. If not given, the angle is computed from current angles.",
                            "type": "Number",
                            "optional": true
                        },
                        {
                            "name": "maxForce",
                            "description": "",
                            "type": "Number",
                            "optional": true
                        }
                    ]
                }
            ],
            "extends": "Constraint",
            "example": [
                "\n    // Locks the relative position and rotation between bodyA and bodyB\n    var constraint = new LockConstraint(bodyA, bodyB);\n    world.addConstraint(constraint);"
            ]
        },
        "PrismaticConstraint": {
            "name": "PrismaticConstraint",
            "shortname": "PrismaticConstraint",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/constraints/PrismaticConstraint.js",
            "line": 9,
            "description": "Constraint that only allows bodies to move along a line, relative to each other. See <a href=\"http://www.iforce2d.net/b2dtut/joints-prismatic\">this tutorial</a>. Also called \"slider constraint\".",
            "is_constructor": 1,
            "extends": "Constraint",
            "author": "schteppe",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "maxForce",
                            "description": "Max force to be applied by the constraint",
                            "type": "Number",
                            "optional": true
                        },
                        {
                            "name": "localAnchorA",
                            "description": "Body A's anchor point, defined in its own local frame.",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "localAnchorB",
                            "description": "Body B's anchor point, defined in its own local frame.",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "localAxisA",
                            "description": "An axis, defined in body A frame, that body B's anchor point may slide along.",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "disableRotationalLock",
                            "description": "If set to true, bodyB will be free to rotate around its anchor point.",
                            "type": "Boolean",
                            "optional": true
                        },
                        {
                            "name": "upperLimit",
                            "description": "",
                            "type": "Number",
                            "optional": true
                        },
                        {
                            "name": "lowerLimit",
                            "description": "",
                            "type": "Number",
                            "optional": true
                        }
                    ]
                }
            ],
            "todo": [
                "Ability to create using only a point and a worldAxis"
            ]
        },
        "RevoluteConstraint": {
            "name": "RevoluteConstraint",
            "shortname": "RevoluteConstraint",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/constraints/RevoluteConstraint.js",
            "line": 15,
            "description": "Connects two bodies at given offset points, letting them rotate relative to each other around this point.",
            "is_constructor": 1,
            "author": "schteppe",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "worldPivot",
                            "description": "A pivot point given in world coordinates. If specified, localPivotA and localPivotB are automatically computed from this value.",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "localPivotA",
                            "description": "The point relative to the center of mass of bodyA which bodyA is constrained to.",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "localPivotB",
                            "description": "See localPivotA.",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "maxForce",
                            "description": "The maximum force that should be applied to constrain the bodies.",
                            "type": "Number",
                            "optional": true
                        }
                    ]
                }
            ],
            "extends": "Constraint",
            "example": [
                "\n    // This will create a revolute constraint between two bodies with pivot point in between them.\n    var bodyA = new Body({ mass: 1, position: [-1, 0] });\n    var bodyB = new Body({ mass: 1, position: [1, 0] });\n    var constraint = new RevoluteConstraint(bodyA, bodyB, {\n        worldPivot: [0, 0]\n    });\n    world.addConstraint(constraint);\n\n    // Using body-local pivot points, the constraint could have been constructed like this:\n    var constraint = new RevoluteConstraint(bodyA, bodyB, {\n        localPivotA: [1, 0],\n        localPivotB: [-1, 0]\n    });"
            ]
        },
        "AngleLockEquation": {
            "name": "AngleLockEquation",
            "shortname": "AngleLockEquation",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/equations/AngleLockEquation.js",
            "line": 6,
            "description": "Locks the relative angle between two bodies. The constraint tries to keep the dot product between two vectors, local in each body, to zero. The local angle in body i is a parameter.",
            "is_constructor": 1,
            "extends": "Equation",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "angle",
                            "description": "Angle to add to the local vector in body A.",
                            "type": "Number",
                            "optional": true
                        },
                        {
                            "name": "ratio",
                            "description": "Gear ratio",
                            "type": "Number",
                            "optional": true
                        }
                    ]
                }
            ]
        },
        "ContactEquation": {
            "name": "ContactEquation",
            "shortname": "ContactEquation",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/equations/ContactEquation.js",
            "line": 6,
            "description": "Non-penetration constraint equation. Tries to make the contactPointA and contactPointB vectors coincide, while keeping the applied force repulsive.",
            "is_constructor": 1,
            "extends": "Equation",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                }
            ]
        },
        "Equation": {
            "name": "Equation",
            "shortname": "Equation",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/equations/Equation.js",
            "line": 7,
            "description": "Base class for constraint equations.",
            "is_constructor": 1,
            "params": [
                {
                    "name": "bodyA",
                    "description": "First body participating in the equation",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "Second body participating in the equation",
                    "type": "Body"
                },
                {
                    "name": "minForce",
                    "description": "Minimum force to apply. Default: -Number.MAX_VALUE",
                    "type": "Number"
                },
                {
                    "name": "maxForce",
                    "description": "Maximum force to apply. Default: Number.MAX_VALUE",
                    "type": "Number"
                }
            ]
        },
        "FrictionEquation": {
            "name": "FrictionEquation",
            "shortname": "FrictionEquation",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/equations/FrictionEquation.js",
            "line": 7,
            "description": "Constrains the slipping in a contact along a tangent",
            "is_constructor": 1,
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "slipForce",
                    "description": "",
                    "type": "Number"
                }
            ],
            "extends": "Equation"
        },
        "RotationalLockEquation": {
            "name": "RotationalLockEquation",
            "shortname": "RotationalLockEquation",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/equations/RotationalLockEquation.js",
            "line": 6,
            "description": "Locks the relative angle between two bodies. The constraint tries to keep the dot product between two vectors, local in each body, to zero. The local angle in body i is a parameter.",
            "is_constructor": 1,
            "extends": "Equation",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "angle",
                            "description": "Angle to add to the local vector in bodyA.",
                            "type": "Number",
                            "optional": true
                        }
                    ]
                }
            ]
        },
        "RotationalVelocityEquation": {
            "name": "RotationalVelocityEquation",
            "shortname": "RotationalVelocityEquation",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/equations/RotationalVelocityEquation.js",
            "line": 6,
            "description": "Syncs rotational velocity of two bodies, or sets a relative velocity (motor).",
            "is_constructor": 1,
            "extends": "Equation",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                }
            ]
        },
        "EventEmitter": {
            "name": "EventEmitter",
            "shortname": "EventEmitter",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/events/EventEmitter.js",
            "line": 1,
            "description": "Base class for objects that dispatches events.",
            "is_constructor": 1
        },
        "ContactMaterial": {
            "name": "ContactMaterial",
            "shortname": "ContactMaterial",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/material/ContactMaterial.js",
            "line": 6,
            "description": "Defines what happens when two materials meet, such as what friction coefficient to use. You can also set other things such as restitution, surface velocity and constraint parameters.",
            "is_constructor": 1,
            "params": [
                {
                    "name": "materialA",
                    "description": "",
                    "type": "Material"
                },
                {
                    "name": "materialB",
                    "description": "",
                    "type": "Material"
                },
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "friction",
                            "description": "Friction coefficient.",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "0.3"
                        },
                        {
                            "name": "restitution",
                            "description": "Restitution coefficient aka \"bounciness\".",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "0"
                        },
                        {
                            "name": "stiffness",
                            "description": "ContactEquation stiffness.",
                            "type": "Number",
                            "optional": true
                        },
                        {
                            "name": "relaxation",
                            "description": "ContactEquation relaxation.",
                            "type": "Number",
                            "optional": true
                        },
                        {
                            "name": "frictionStiffness",
                            "description": "FrictionEquation stiffness.",
                            "type": "Number",
                            "optional": true
                        },
                        {
                            "name": "frictionRelaxation",
                            "description": "FrictionEquation relaxation.",
                            "type": "Number",
                            "optional": true
                        },
                        {
                            "name": "surfaceVelocity",
                            "description": "Surface velocity.",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "0"
                        }
                    ]
                }
            ],
            "author": "schteppe"
        },
        "Material": {
            "name": "Material",
            "shortname": "Material",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/material/Material.js",
            "line": 3,
            "description": "Defines a physics material.",
            "is_constructor": 1,
            "params": [
                {
                    "name": "id",
                    "description": "Material identifier",
                    "type": "Number"
                }
            ],
            "author": "schteppe"
        },
        "vec2": {
            "name": "vec2",
            "shortname": "vec2",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/math/vec2.js",
            "line": 23,
            "description": "The vec2 object from glMatrix, with some extensions and some removed methods. See http://glmatrix.net."
        },
        "Body": {
            "name": "Body",
            "shortname": "Body",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/objects/Body.js",
            "line": 11,
            "description": "A rigid body. Has got a center of mass, position, velocity and a number of\nshapes that are used for collisions.",
            "is_constructor": 1,
            "extends": "EventEmitter",
            "params": [
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "force",
                            "description": "",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "position",
                            "description": "",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "velocity",
                            "description": "",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "allowSleep",
                            "description": "",
                            "type": "Boolean",
                            "optional": true
                        },
                        {
                            "name": "collisionResponse",
                            "description": "",
                            "type": "Boolean",
                            "optional": true
                        },
                        {
                            "name": "angle",
                            "description": "",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "0"
                        },
                        {
                            "name": "angularForce",
                            "description": "",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "0"
                        },
                        {
                            "name": "angularVelocity",
                            "description": "",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "0"
                        },
                        {
                            "name": "ccdIterations",
                            "description": "",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "10"
                        },
                        {
                            "name": "ccdSpeedThreshold",
                            "description": "",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "-1"
                        },
                        {
                            "name": "fixedRotation",
                            "description": "",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "false"
                        },
                        {
                            "name": "gravityScale",
                            "description": "",
                            "type": "Number",
                            "optional": true
                        },
                        {
                            "name": "id",
                            "description": "",
                            "type": "Number",
                            "optional": true
                        },
                        {
                            "name": "mass",
                            "description": "A number >= 0. If zero, the .type will be set to Body.STATIC.",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "0"
                        },
                        {
                            "name": "sleepSpeedLimit",
                            "description": "",
                            "type": "Number",
                            "optional": true
                        },
                        {
                            "name": "sleepTimeLimit",
                            "description": "",
                            "type": "Number",
                            "optional": true
                        }
                    ]
                }
            ],
            "example": [
                "\n\n    // Create a typical dynamic body\n    var body = new Body({\n        mass: 1,\n        position: [0, 0],\n        angle: 0,\n        velocity: [0, 0],\n        angularVelocity: 0\n    });\n\n    // Add a circular shape to the body\n    body.addShape(new Circle({ radius: 1 }));\n\n    // Add the body to the world\n    world.addBody(body);"
            ]
        },
        "LinearSpring": {
            "name": "LinearSpring",
            "shortname": "LinearSpring",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/objects/LinearSpring.js",
            "line": 7,
            "description": "A spring, connecting two bodies.\n\nThe Spring explicitly adds force and angularForce to the bodies.",
            "extends": "Spring",
            "is_constructor": 1,
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "restLength",
                            "description": "A number > 0. Default is the current distance between the world anchor points.",
                            "type": "Number",
                            "optional": true
                        },
                        {
                            "name": "stiffness",
                            "description": "Spring constant (see Hookes Law). A number >= 0.",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "100"
                        },
                        {
                            "name": "damping",
                            "description": "A number >= 0. Default: 1",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "1"
                        },
                        {
                            "name": "worldAnchorA",
                            "description": "Where to hook the spring to body A, in world coordinates. Overrides the option \"localAnchorA\" if given.",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "worldAnchorB",
                            "description": "",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "localAnchorA",
                            "description": "Where to hook the spring to body A, in local body coordinates. Defaults to the body center.",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "localAnchorB",
                            "description": "",
                            "type": "Array",
                            "optional": true
                        }
                    ]
                }
            ]
        },
        "RotationalSpring": {
            "name": "RotationalSpring",
            "shortname": "RotationalSpring",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/objects/RotationalSpring.js",
            "line": 6,
            "description": "A rotational spring, connecting two bodies rotation. This spring explicitly adds angularForce (torque) to the bodies.\n\nThe spring can be combined with a {{#crossLink \"RevoluteConstraint\"}}{{/crossLink}} to make, for example, a mouse trap.",
            "extends": "Spring",
            "is_constructor": 1,
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "restAngle",
                            "description": "The relative angle of bodies at which the spring is at rest. If not given, it's set to the current relative angle between the bodies.",
                            "type": "Number",
                            "optional": true
                        },
                        {
                            "name": "stiffness",
                            "description": "Spring constant (see Hookes Law). A number >= 0.",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "100"
                        },
                        {
                            "name": "damping",
                            "description": "A number >= 0.",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "1"
                        }
                    ]
                }
            ]
        },
        "Spring": {
            "name": "Spring",
            "shortname": "Spring",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/objects/Spring.js",
            "line": 6,
            "description": "A spring, connecting two bodies. The Spring explicitly adds force and angularForce to the bodies and does therefore not put load on the constraint solver.",
            "is_constructor": 1,
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "stiffness",
                            "description": "Spring constant (see Hookes Law). A number >= 0.",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "100"
                        },
                        {
                            "name": "damping",
                            "description": "A number >= 0. Default: 1",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "1"
                        },
                        {
                            "name": "localAnchorA",
                            "description": "Where to hook the spring to body A, in local body coordinates. Defaults to the body center.",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "localAnchorB",
                            "description": "",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "worldAnchorA",
                            "description": "Where to hook the spring to body A, in world coordinates. Overrides the option \"localAnchorA\" if given.",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "worldAnchorB",
                            "description": "",
                            "type": "Array",
                            "optional": true
                        }
                    ]
                }
            ]
        },
        "TopDownVehicle": {
            "name": "TopDownVehicle",
            "shortname": "TopDownVehicle",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/objects/TopDownVehicle.js",
            "line": 9,
            "is_constructor": 1,
            "params": [
                {
                    "name": "chassisBody",
                    "description": "A dynamic body, already added to the world.",
                    "type": "Body"
                },
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true
                }
            ],
            "example": [
                "\n\n    // Create a dynamic body for the chassis\n    var chassisBody = new Body({\n        mass: 1\n    });\n    var boxShape = new Box({ width: 0.5, height: 1 });\n    chassisBody.addShape(boxShape);\n    world.addBody(chassisBody);\n\n    // Create the vehicle\n    var vehicle = new TopDownVehicle(chassisBody);\n\n    // Add one front wheel and one back wheel - we don't actually need four :)\n    var frontWheel = vehicle.addWheel({\n        localPosition: [0, 0.5] // front\n    });\n    frontWheel.setSideFriction(4);\n\n    // Back wheel\n    var backWheel = vehicle.addWheel({\n        localPosition: [0, -0.5] // back\n    });\n    backWheel.setSideFriction(3); // Less side friction on back wheel makes it easier to drift\n    vehicle.addToWorld(world);\n\n    // Steer value zero means straight forward. Positive is left and negative right.\n    frontWheel.steerValue = Math.PI / 16;\n\n    // Engine force forward\n    backWheel.engineForce = 10;\n    backWheel.setBrakeForce(0);"
            ]
        },
        "WheelConstraint": {
            "name": "WheelConstraint",
            "shortname": "WheelConstraint",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/objects/TopDownVehicle.js",
            "line": 121,
            "is_constructor": 1,
            "extends": "{Constraint}",
            "params": [
                {
                    "name": "vehicle",
                    "description": "",
                    "type": "Vehicle"
                },
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "localForwardVector",
                            "description": "The local wheel forward vector in local body space. Default is zero.",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "localPosition",
                            "description": "The local position of the wheen in the chassis body. Default is zero - the center of the body.",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "sideFriction",
                            "description": "The max friction force in the sideways direction.",
                            "type": "Array",
                            "optional": true,
                            "optdefault": "5"
                        }
                    ]
                }
            ]
        },
        "Box": {
            "name": "Box",
            "shortname": "Box",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/shapes/Box.js",
            "line": 7,
            "description": "Box shape class.",
            "is_constructor": 1,
            "params": [
                {
                    "name": "options",
                    "description": "(Note that this options object will be passed on to the {{#crossLink \"Shape\"}}{{/crossLink}} constructor.)",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "width",
                            "description": "Total width of the box",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "1"
                        },
                        {
                            "name": "height",
                            "description": "Total height of the box",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "1"
                        }
                    ]
                }
            ],
            "extends": "Convex"
        },
        "Capsule": {
            "name": "Capsule",
            "shortname": "Capsule",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/shapes/Capsule.js",
            "line": 6,
            "description": "Capsule shape class.",
            "is_constructor": 1,
            "extends": "Shape",
            "params": [
                {
                    "name": "options",
                    "description": "(Note that this options object will be passed on to the {{#crossLink \"Shape\"}}{{/crossLink}} constructor.)",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "length",
                            "description": "The distance between the end points",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "1"
                        },
                        {
                            "name": "radius",
                            "description": "Radius of the capsule",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "1"
                        }
                    ]
                }
            ],
            "example": [
                "\n    var capsuleShape = new Capsule({\n        length: 1,\n        radius: 2\n    });\n    body.addShape(capsuleShape);"
            ]
        },
        "Circle": {
            "name": "Circle",
            "shortname": "Circle",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/shapes/Circle.js",
            "line": 6,
            "description": "Circle shape class.",
            "extends": "Shape",
            "is_constructor": 1,
            "params": [
                {
                    "name": "options",
                    "description": "(Note that this options object will be passed on to the {{#crossLink \"Shape\"}}{{/crossLink}} constructor.)",
                    "type": "Options",
                    "optional": true,
                    "props": [
                        {
                            "name": "radius",
                            "description": "The radius of this circle",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "1"
                        }
                    ]
                }
            ],
            "example": [
                "\n    var circleShape = new Circle({ radius: 1 });\n    body.addShape(circleShape);"
            ]
        },
        "Convex": {
            "name": "Convex",
            "shortname": "Convex",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/shapes/Convex.js",
            "line": 8,
            "description": "Convex shape class.",
            "is_constructor": 1,
            "extends": "Shape",
            "params": [
                {
                    "name": "options",
                    "description": "(Note that this options object will be passed on to the {{#crossLink \"Shape\"}}{{/crossLink}} constructor.)",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "vertices",
                            "description": "An array of vertices that span this shape. Vertices are given in counter-clockwise (CCW) direction.",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "axes",
                            "description": "An array of unit length vectors, representing the symmetry axes in the convex.",
                            "type": "Array",
                            "optional": true
                        }
                    ]
                }
            ],
            "example": [
                "\n    // Create a box\n    var vertices = [[-1,-1], [1,-1], [1,1], [-1,1]];\n    var convexShape = new Convex({ vertices: vertices });\n    body.addShape(convexShape);"
            ]
        },
        "Heightfield": {
            "name": "Heightfield",
            "shortname": "Heightfield",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/shapes/Heightfield.js",
            "line": 7,
            "description": "Heightfield shape class. Height data is given as an array. These data points are spread out evenly with a distance \"elementWidth\".",
            "extends": "Shape",
            "is_constructor": 1,
            "params": [
                {
                    "name": "options",
                    "description": "(Note that this options object will be passed on to the {{#crossLink \"Shape\"}}{{/crossLink}} constructor.)",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "heights",
                            "description": "An array of Y values that will be used to construct the terrain.",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "minValue",
                            "description": "Minimum value of the data points in the data array. Will be computed automatically if not given.",
                            "type": "Number",
                            "optional": true
                        },
                        {
                            "name": "maxValue",
                            "description": "Maximum value.",
                            "type": "Number",
                            "optional": true
                        },
                        {
                            "name": "elementWidth",
                            "description": "World spacing between the data points in X direction.",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "0.1"
                        }
                    ]
                }
            ],
            "example": [
                "\n    // Generate some height data (y-values).\n    var heights = [];\n    for(var i = 0; i < 1000; i++){\n        var y = 0.5 * Math.cos(0.2 * i);\n        heights.push(y);\n    }\n\n    // Create the heightfield shape\n    var heightfieldShape = new Heightfield({\n        heights: heights,\n        elementWidth: 1 // Distance between the data points in X direction\n    });\n    var heightfieldBody = new Body();\n    heightfieldBody.addShape(heightfieldShape);\n    world.addBody(heightfieldBody);"
            ],
            "todo": [
                "Should use a scale property with X and Y direction instead of just elementWidth"
            ]
        },
        "Line": {
            "name": "Line",
            "shortname": "Line",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/shapes/Line.js",
            "line": 6,
            "description": "Line shape class. The line shape is along the x direction, and stretches from [-length/2, 0] to [length/2,0].",
            "params": [
                {
                    "name": "options",
                    "description": "(Note that this options object will be passed on to the {{#crossLink \"Shape\"}}{{/crossLink}} constructor.)",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "length",
                            "description": "The total length of the line",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "1"
                        }
                    ]
                }
            ],
            "extends": "Shape",
            "is_constructor": 1
        },
        "Particle": {
            "name": "Particle",
            "shortname": "Particle",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/shapes/Particle.js",
            "line": 6,
            "description": "Particle shape class.",
            "is_constructor": 1,
            "params": [
                {
                    "name": "options",
                    "description": "(Note that this options object will be passed on to the {{#crossLink \"Shape\"}}{{/crossLink}} constructor.)",
                    "type": "Object",
                    "optional": true
                }
            ],
            "extends": "Shape"
        },
        "Plane": {
            "name": "Plane",
            "shortname": "Plane",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/shapes/Plane.js",
            "line": 7,
            "description": "Plane shape class. The plane is facing in the Y direction.",
            "extends": "Shape",
            "is_constructor": 1,
            "params": [
                {
                    "name": "options",
                    "description": "(Note that this options object will be passed on to the {{#crossLink \"Shape\"}}{{/crossLink}} constructor.)",
                    "type": "Object",
                    "optional": true
                }
            ]
        },
        "Shape": {
            "name": "Shape",
            "shortname": "Shape",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/shapes/Shape.js",
            "line": 5,
            "description": "Base class for shapes.",
            "is_constructor": 1,
            "params": [
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "position",
                            "description": "",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "angle",
                            "description": "",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "0"
                        },
                        {
                            "name": "collisionGroup",
                            "description": "",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "1"
                        },
                        {
                            "name": "collisionMask",
                            "description": "",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "1"
                        },
                        {
                            "name": "sensor",
                            "description": "",
                            "type": "Boolean",
                            "optional": true,
                            "optdefault": "false"
                        },
                        {
                            "name": "collisionResponse",
                            "description": "",
                            "type": "Boolean",
                            "optional": true,
                            "optdefault": "true"
                        },
                        {
                            "name": "type",
                            "description": "",
                            "type": "Object",
                            "optional": true,
                            "optdefault": "0"
                        }
                    ]
                }
            ]
        },
        "GSSolver": {
            "name": "GSSolver",
            "shortname": "GSSolver",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/solver/GSSolver.js",
            "line": 8,
            "description": "Iterative Gauss-Seidel constraint equation solver.",
            "is_constructor": 1,
            "extends": "Solver",
            "params": [
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "iterations",
                            "description": "",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "10"
                        },
                        {
                            "name": "tolerance",
                            "description": "",
                            "type": "Number",
                            "optional": true,
                            "optdefault": "0"
                        }
                    ]
                }
            ]
        },
        "Solver": {
            "name": "Solver",
            "shortname": "Solver",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/solver/Solver.js",
            "line": 6,
            "description": "Base class for constraint solvers.",
            "is_constructor": 1,
            "extends": "EventEmitter"
        },
        "": {
            "file": "src/utils/OverlapKeeperRecordPool.js",
            "line": 6
        },
        "OverlapKeeper": {
            "name": "OverlapKeeper",
            "shortname": "OverlapKeeper",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/utils/OverlapKeeper.js",
            "line": 8,
            "description": "Keeps track of overlaps in the current state and the last step state.",
            "is_constructor": 1
        },
        "OverlapKeeperRecord": {
            "name": "OverlapKeeperRecord",
            "shortname": "OverlapKeeperRecord",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/utils/OverlapKeeperRecord.js",
            "line": 3,
            "description": "Overlap data container for the OverlapKeeper",
            "is_constructor": 1,
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "shapeA",
                    "description": "",
                    "type": "Shape"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "shapeB",
                    "description": "",
                    "type": "Shape"
                }
            ]
        },
        "Object pooling utility.": {
            "name": "Object pooling utility.",
            "shortname": "Object pooling utility.",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/utils/Pool.js",
            "line": 3
        },
        "TupleDictionary": {
            "name": "TupleDictionary",
            "shortname": "TupleDictionary",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/utils/TupleDictionary.js",
            "line": 5,
            "is_constructor": 1
        },
        "Utils": {
            "name": "Utils",
            "shortname": "Utils",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/utils/Utils.js",
            "line": 5,
            "description": "Misc utility functions",
            "is_constructor": 1
        },
        "Island": {
            "name": "Island",
            "shortname": "Island",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/world/Island.js",
            "line": 5,
            "description": "An island of bodies connected with equations.",
            "is_constructor": 1
        },
        "IslandManager": {
            "name": "IslandManager",
            "shortname": "IslandManager",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/world/IslandManager.js",
            "line": 10,
            "description": "Splits the system of bodies and equations into independent islands",
            "is_constructor": 1,
            "params": [
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true
                }
            ],
            "extends": "Solver"
        },
        "IslandNode": {
            "name": "IslandNode",
            "shortname": "IslandNode",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/world/IslandNode.js",
            "line": 3,
            "description": "Holds a body and keeps track of some additional properties needed for graph traversal.",
            "is_constructor": 1,
            "params": [
                {
                    "name": "body",
                    "description": "",
                    "type": "Body"
                }
            ]
        },
        "World": {
            "name": "World",
            "shortname": "World",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "file": "src/world/World.js",
            "line": 35,
            "description": "The dynamics world, where all bodies and constraints live.",
            "is_constructor": 1,
            "params": [
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "solver",
                            "description": "Defaults to GSSolver.",
                            "type": "Solver",
                            "optional": true
                        },
                        {
                            "name": "gravity",
                            "description": "Defaults to y=-9.78.",
                            "type": "Array",
                            "optional": true
                        },
                        {
                            "name": "broadphase",
                            "description": "Defaults to SAPBroadphase",
                            "type": "Broadphase",
                            "optional": true
                        },
                        {
                            "name": "islandSplit",
                            "description": "",
                            "type": "Boolean",
                            "optional": true,
                            "optdefault": "true"
                        }
                    ]
                }
            ],
            "extends": "EventEmitter",
            "example": [
                "\n    var world = new World({\n        gravity: [0, -10],\n        broadphase: new SAPBroadphase()\n    });\n    world.addBody(new Body());"
            ]
        }
    },
    "classitems": [
        {
            "file": "src/collision/AABB.js",
            "line": 16,
            "description": "The lower bound of the bounding box.",
            "itemtype": "property",
            "name": "lowerBound",
            "type": "{Array}",
            "class": "AABB"
        },
        {
            "file": "src/collision/AABB.js",
            "line": 26,
            "description": "The upper bound of the bounding box.",
            "itemtype": "property",
            "name": "upperBound",
            "type": "{Array}",
            "class": "AABB"
        },
        {
            "file": "src/collision/AABB.js",
            "line": 39,
            "description": "Set the AABB bounds from a set of points, transformed by the given position and angle.",
            "itemtype": "method",
            "name": "setFromPoints",
            "params": [
                {
                    "name": "points",
                    "description": "An array of vec2's.",
                    "type": "Array"
                },
                {
                    "name": "position",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "skinSize",
                    "description": "Some margin to be added to the AABB.",
                    "type": "Number"
                }
            ],
            "class": "AABB"
        },
        {
            "file": "src/collision/AABB.js",
            "line": 101,
            "description": "Copy bounds from an AABB to this AABB",
            "itemtype": "method",
            "name": "copy",
            "params": [
                {
                    "name": "aabb",
                    "description": "",
                    "type": "AABB"
                }
            ],
            "class": "AABB"
        },
        {
            "file": "src/collision/AABB.js",
            "line": 111,
            "description": "Extend this AABB so that it covers the given AABB too.",
            "itemtype": "method",
            "name": "extend",
            "params": [
                {
                    "name": "aabb",
                    "description": "",
                    "type": "AABB"
                }
            ],
            "class": "AABB"
        },
        {
            "file": "src/collision/AABB.js",
            "line": 134,
            "description": "Returns true if the given AABB overlaps this AABB.",
            "itemtype": "method",
            "name": "overlaps",
            "params": [
                {
                    "name": "aabb",
                    "description": "",
                    "type": "AABB"
                }
            ],
            "return": {
                "description": "",
                "type": "Boolean"
            },
            "class": "AABB"
        },
        {
            "file": "src/collision/AABB.js",
            "line": 155,
            "itemtype": "method",
            "name": "containsPoint",
            "params": [
                {
                    "name": "point",
                    "description": "",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "",
                "type": "Boolean"
            },
            "class": "AABB"
        },
        {
            "file": "src/collision/AABB.js",
            "line": 166,
            "description": "Check if the AABB is hit by a ray.",
            "itemtype": "method",
            "name": "overlapsRay",
            "params": [
                {
                    "name": "ray",
                    "description": "",
                    "type": "Ray"
                }
            ],
            "return": {
                "description": "-1 if no hit, a number between 0 and 1 if hit.",
                "type": "Number"
            },
            "class": "AABB"
        },
        {
            "file": "src/collision/Broadphase.js",
            "line": 15,
            "description": "The resulting overlapping pairs. Will be filled with results during .getCollisionPairs().",
            "itemtype": "property",
            "name": "result",
            "type": "{Array}",
            "class": "Broadphase"
        },
        {
            "file": "src/collision/Broadphase.js",
            "line": 22,
            "description": "The world to search for collision pairs in. To change it, use .setWorld()",
            "itemtype": "property",
            "name": "world",
            "type": "{World}",
            "readonly": "",
            "class": "Broadphase"
        },
        {
            "file": "src/collision/Broadphase.js",
            "line": 30,
            "description": "The bounding volume type to use in the broadphase algorithms. Should be set to Broadphase.AABB or Broadphase.BOUNDING_CIRCLE.",
            "itemtype": "property",
            "name": "boundingVolumeType",
            "type": "Number",
            "class": "Broadphase"
        },
        {
            "file": "src/collision/Broadphase.js",
            "line": 37,
            "description": "Axis aligned bounding box type.",
            "static": 1,
            "itemtype": "property",
            "name": "AABB",
            "type": "Number",
            "class": "Broadphase"
        },
        {
            "file": "src/collision/Broadphase.js",
            "line": 44,
            "description": "Bounding circle type.",
            "static": 1,
            "itemtype": "property",
            "name": "BOUNDING_CIRCLE",
            "type": "Number",
            "class": "Broadphase"
        },
        {
            "file": "src/collision/Broadphase.js",
            "line": 51,
            "description": "Set the world that we are searching for collision pairs in.",
            "itemtype": "method",
            "name": "setWorld",
            "params": [
                {
                    "name": "world",
                    "description": "",
                    "type": "World"
                }
            ],
            "class": "Broadphase"
        },
        {
            "file": "src/collision/Broadphase.js",
            "line": 60,
            "description": "Get all potential intersecting body pairs.",
            "itemtype": "method",
            "name": "getCollisionPairs",
            "params": [
                {
                    "name": "world",
                    "description": "The world to search in.",
                    "type": "World"
                }
            ],
            "return": {
                "description": "An array of the bodies, ordered in pairs. Example: A result of [a,b,c,d] means that the potential pairs are: (a,b), (c,d).",
                "type": "Array"
            },
            "class": "Broadphase"
        },
        {
            "file": "src/collision/Broadphase.js",
            "line": 70,
            "description": "Check whether the bounding radius of two bodies overlap.",
            "itemtype": "method",
            "name": "boundingRadiusCheck",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                }
            ],
            "return": {
                "description": "",
                "type": "Boolean"
            },
            "class": "Broadphase"
        },
        {
            "file": "src/collision/Broadphase.js",
            "line": 84,
            "description": "Check whether the bounding radius of two bodies overlap.",
            "itemtype": "method",
            "name": "boundingRadiusCheck",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                }
            ],
            "return": {
                "description": "",
                "type": "Boolean"
            },
            "class": "Broadphase"
        },
        {
            "file": "src/collision/Broadphase.js",
            "line": 95,
            "description": "Check whether the bounding radius of two bodies overlap.",
            "itemtype": "method",
            "name": "boundingRadiusCheck",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                }
            ],
            "return": {
                "description": "",
                "type": "Boolean"
            },
            "class": "Broadphase"
        },
        {
            "file": "src/collision/Broadphase.js",
            "line": 118,
            "description": "Check whether two bodies are allowed to collide at all.",
            "itemtype": "method",
            "name": "canCollide",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                }
            ],
            "return": {
                "description": "",
                "type": "Boolean"
            },
            "class": "Broadphase"
        },
        {
            "file": "src/collision/NaiveBroadphase.js",
            "line": 23,
            "description": "Get the colliding pairs",
            "itemtype": "method",
            "name": "getCollisionPairs",
            "params": [
                {
                    "name": "world",
                    "description": "",
                    "type": "World"
                }
            ],
            "return": {
                "description": "",
                "type": "Array"
            },
            "class": "NaiveBroadphase"
        },
        {
            "file": "src/collision/NaiveBroadphase.js",
            "line": 50,
            "description": "Returns all the bodies within an AABB.",
            "itemtype": "method",
            "name": "aabbQuery",
            "params": [
                {
                    "name": "world",
                    "description": "",
                    "type": "World"
                },
                {
                    "name": "aabb",
                    "description": "",
                    "type": "AABB"
                },
                {
                    "name": "result",
                    "description": "An array to store resulting bodies in.",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "",
                "type": "Array"
            },
            "class": "NaiveBroadphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 50,
            "itemtype": "property",
            "name": "contactEquations",
            "type": "{Array}",
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 56,
            "itemtype": "property",
            "name": "frictionEquations",
            "type": "{Array}",
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 62,
            "description": "Whether to make friction equations in the upcoming contacts.",
            "itemtype": "property",
            "name": "enableFriction",
            "type": "{Boolean}",
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 69,
            "description": "Whether to make equations enabled in upcoming contacts.",
            "itemtype": "property",
            "name": "enabledEquations",
            "type": "{Boolean}",
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 76,
            "description": "The friction slip force to use when creating friction equations.",
            "itemtype": "property",
            "name": "slipForce",
            "type": "{Number}",
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 83,
            "description": "The friction value to use in the upcoming friction equations.",
            "itemtype": "property",
            "name": "frictionCoefficient",
            "type": "{Number}",
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 90,
            "description": "Will be the .relativeVelocity in each produced FrictionEquation.",
            "itemtype": "property",
            "name": "surfaceVelocity",
            "type": "Number",
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 96,
            "description": "Keeps track of the allocated ContactEquations.",
            "itemtype": "property",
            "name": "contactEquationPool",
            "type": "ContactEquationPool",
            "example": [
                "\n\n    // Allocate a few equations before starting the simulation.\n    // This way, no contact objects need to be created on the fly in the game loop.\n    world.narrowphase.contactEquationPool.resize(1024);\n    world.narrowphase.frictionEquationPool.resize(1024);"
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 109,
            "description": "Keeps track of the allocated ContactEquations.",
            "itemtype": "property",
            "name": "frictionEquationPool",
            "type": "FrictionEquationPool",
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 115,
            "description": "The restitution value to use in the next contact equations.",
            "itemtype": "property",
            "name": "restitution",
            "type": "{Number}",
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 122,
            "description": "The stiffness value to use in the next contact equations.",
            "itemtype": "property",
            "name": "stiffness",
            "type": "Number",
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 128,
            "description": "The stiffness value to use in the next contact equations.",
            "itemtype": "property",
            "name": "stiffness",
            "type": "Number",
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 134,
            "description": "The stiffness value to use in the next friction equations.",
            "itemtype": "property",
            "name": "frictionStiffness",
            "type": "{Number}",
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 141,
            "description": "The relaxation value to use in the next friction equations.",
            "itemtype": "property",
            "name": "frictionRelaxation",
            "type": "{Number}",
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 148,
            "description": "Enable reduction of friction equations. If disabled, a box on a plane will generate 2 contact equations and 2 friction equations. If enabled, there will be only one friction equation. Same kind of simplifications are made  for all collision types.",
            "itemtype": "property",
            "name": "enableFrictionReduction",
            "type": "{Boolean}",
            "deprecated": true,
            "deprecationMessage": "This flag will be removed when the feature is stable enough.",
            "default": "true",
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 157,
            "description": "Keeps track of the colliding bodies last step.",
            "access": "private",
            "tagname": "",
            "itemtype": "property",
            "name": "collidingBodiesLastStep",
            "type": "{TupleDictionary}",
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 165,
            "description": "Contact skin size value to use in the next contact equations.",
            "itemtype": "property",
            "name": "contactSkinSize",
            "type": "Number",
            "default": "0.01",
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 176,
            "itemtype": "method",
            "name": "bodiesOverlap",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                }
            ],
            "return": {
                "description": "",
                "type": "Boolean"
            },
            "todo": [
                "shape world transforms are wrong"
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 218,
            "description": "Check if the bodies were in contact since the last reset().",
            "itemtype": "method",
            "name": "collidedLastStep",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                }
            ],
            "return": {
                "description": "",
                "type": "Boolean"
            },
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 231,
            "description": "Throws away the old equations and gets ready to create new",
            "itemtype": "method",
            "name": "reset",
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 260,
            "description": "Creates a ContactEquation, either by reusing an existing object or creating a new one.",
            "itemtype": "method",
            "name": "createContactEquation",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                }
            ],
            "return": {
                "description": "",
                "type": "ContactEquation"
            },
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 284,
            "description": "Creates a FrictionEquation, either by reusing an existing object or creating a new one.",
            "itemtype": "method",
            "name": "createFrictionEquation",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                }
            ],
            "return": {
                "description": "",
                "type": "FrictionEquation"
            },
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 308,
            "description": "Creates a FrictionEquation given the data in the ContactEquation. Uses same offset vectors ri and rj, but the tangent vector will be constructed from the collision normal.",
            "itemtype": "method",
            "name": "createFrictionFromContact",
            "params": [
                {
                    "name": "contactEquation",
                    "description": "",
                    "type": "ContactEquation"
                }
            ],
            "return": {
                "description": "",
                "type": "FrictionEquation"
            },
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 354,
            "description": "Convex/line narrowphase",
            "itemtype": "method",
            "name": "convexLine",
            "params": [
                {
                    "name": "convexBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "convexShape",
                    "description": "",
                    "type": "Convex"
                },
                {
                    "name": "convexOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "convexAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "lineBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "lineShape",
                    "description": "",
                    "type": "Line"
                },
                {
                    "name": "lineOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "lineAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "justTest",
                    "description": "",
                    "type": "Boolean"
                }
            ],
            "todo": [
                "Implement me!"
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 388,
            "description": "Line/box narrowphase",
            "itemtype": "method",
            "name": "lineBox",
            "params": [
                {
                    "name": "lineBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "lineShape",
                    "description": "",
                    "type": "Line"
                },
                {
                    "name": "lineOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "lineAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "boxBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "boxShape",
                    "description": "",
                    "type": "Box"
                },
                {
                    "name": "boxOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "boxAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "justTest",
                    "description": "",
                    "type": "Boolean"
                }
            ],
            "todo": [
                "Implement me!"
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 432,
            "description": "Convex/capsule narrowphase",
            "itemtype": "method",
            "name": "convexCapsule",
            "params": [
                {
                    "name": "convexBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "convexShape",
                    "description": "",
                    "type": "Convex"
                },
                {
                    "name": "convexPosition",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "convexAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "capsuleBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "capsuleShape",
                    "description": "",
                    "type": "Capsule"
                },
                {
                    "name": "capsulePosition",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "capsuleAngle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 483,
            "description": "Capsule/line narrowphase",
            "itemtype": "method",
            "name": "lineCapsule",
            "params": [
                {
                    "name": "lineBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "lineShape",
                    "description": "",
                    "type": "Line"
                },
                {
                    "name": "linePosition",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "lineAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "capsuleBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "capsuleShape",
                    "description": "",
                    "type": "Capsule"
                },
                {
                    "name": "capsulePosition",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "capsuleAngle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "todo": [
                "Implement me!"
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 520,
            "description": "Capsule/capsule narrowphase",
            "itemtype": "method",
            "name": "capsuleCapsule",
            "params": [
                {
                    "name": "bi",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "si",
                    "description": "",
                    "type": "Capsule"
                },
                {
                    "name": "xi",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "ai",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "bj",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "sj",
                    "description": "",
                    "type": "Capsule"
                },
                {
                    "name": "xj",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "aj",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 625,
            "description": "Line/line narrowphase",
            "itemtype": "method",
            "name": "lineLine",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "shapeA",
                    "description": "",
                    "type": "Line"
                },
                {
                    "name": "positionA",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angleA",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "shapeB",
                    "description": "",
                    "type": "Line"
                },
                {
                    "name": "positionB",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angleB",
                    "description": "",
                    "type": "Number"
                }
            ],
            "todo": [
                "Implement me!"
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 658,
            "description": "Plane/line Narrowphase",
            "itemtype": "method",
            "name": "planeLine",
            "params": [
                {
                    "name": "planeBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "planeShape",
                    "description": "",
                    "type": "Plane"
                },
                {
                    "name": "planeOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "planeAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "lineBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "lineShape",
                    "description": "",
                    "type": "Line"
                },
                {
                    "name": "lineOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "lineAngle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 780,
            "description": "Circle/line Narrowphase",
            "itemtype": "method",
            "name": "circleLine",
            "params": [
                {
                    "name": "circleBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "circleShape",
                    "description": "",
                    "type": "Circle"
                },
                {
                    "name": "circleOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "circleAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "lineBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "lineShape",
                    "description": "",
                    "type": "Line"
                },
                {
                    "name": "lineOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "lineAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "justTest",
                    "description": "If set to true, this function will return the result (intersection or not) without adding equations.",
                    "type": "Boolean"
                },
                {
                    "name": "lineRadius",
                    "description": "Radius to add to the line. Can be used to test Capsules.",
                    "type": "Number"
                },
                {
                    "name": "circleRadius",
                    "description": "If set, this value overrides the circle shape radius.",
                    "type": "Number"
                }
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 950,
            "description": "Circle/capsule Narrowphase",
            "itemtype": "method",
            "name": "circleCapsule",
            "params": [
                {
                    "name": "bi",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "si",
                    "description": "",
                    "type": "Circle"
                },
                {
                    "name": "xi",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "ai",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "bj",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "sj",
                    "description": "",
                    "type": "Line"
                },
                {
                    "name": "xj",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "aj",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 967,
            "description": "Circle/convex Narrowphase.",
            "itemtype": "method",
            "name": "circleConvex",
            "params": [
                {
                    "name": "circleBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "circleShape",
                    "description": "",
                    "type": "Circle"
                },
                {
                    "name": "circleOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "circleAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "convexBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "convexShape",
                    "description": "",
                    "type": "Convex"
                },
                {
                    "name": "convexOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "convexAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "justTest",
                    "description": "",
                    "type": "Boolean"
                },
                {
                    "name": "circleRadius",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 1178,
            "description": "Particle/convex Narrowphase",
            "itemtype": "method",
            "name": "particleConvex",
            "params": [
                {
                    "name": "particleBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "particleShape",
                    "description": "",
                    "type": "Particle"
                },
                {
                    "name": "particleOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "particleAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "convexBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "convexShape",
                    "description": "",
                    "type": "Convex"
                },
                {
                    "name": "convexOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "convexAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "justTest",
                    "description": "",
                    "type": "Boolean"
                }
            ],
            "todo": [
                "use pointInConvex and code more similar to circleConvex",
                "don't transform each vertex",
                "but transform the particle position to convex-local instead"
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 1308,
            "description": "Circle/circle Narrowphase",
            "itemtype": "method",
            "name": "circleCircle",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "shapeA",
                    "description": "",
                    "type": "Circle"
                },
                {
                    "name": "offsetA",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angleA",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "shapeB",
                    "description": "",
                    "type": "Circle"
                },
                {
                    "name": "offsetB",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angleB",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "justTest",
                    "description": "",
                    "type": "Boolean"
                },
                {
                    "name": "radiusA",
                    "description": "Optional radius to use for shapeA",
                    "type": "Number",
                    "optional": true
                },
                {
                    "name": "radiusB",
                    "description": "Optional radius to use for shapeB",
                    "type": "Number",
                    "optional": true
                }
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 1373,
            "description": "Plane/Convex Narrowphase",
            "itemtype": "method",
            "name": "planeConvex",
            "params": [
                {
                    "name": "planeBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "planeShape",
                    "description": "",
                    "type": "Plane"
                },
                {
                    "name": "planeOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "planeAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "convexBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "convexShape",
                    "description": "",
                    "type": "Convex"
                },
                {
                    "name": "convexOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "convexAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "justTest",
                    "description": "",
                    "type": "Boolean"
                }
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 1458,
            "description": "Narrowphase for particle vs plane",
            "itemtype": "method",
            "name": "particlePlane",
            "params": [
                {
                    "name": "particleBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "particleShape",
                    "description": "",
                    "type": "Particle"
                },
                {
                    "name": "particleOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "particleAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "planeBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "planeShape",
                    "description": "",
                    "type": "Plane"
                },
                {
                    "name": "planeOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "planeAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "justTest",
                    "description": "",
                    "type": "Boolean"
                }
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 1521,
            "description": "Circle/Particle Narrowphase",
            "itemtype": "method",
            "name": "circleParticle",
            "params": [
                {
                    "name": "circleBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "circleShape",
                    "description": "",
                    "type": "Circle"
                },
                {
                    "name": "circleOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "circleAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "particleBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "particleShape",
                    "description": "",
                    "type": "Particle"
                },
                {
                    "name": "particleOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "particleAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "justTest",
                    "description": "",
                    "type": "Boolean"
                }
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 1582,
            "itemtype": "method",
            "name": "planeCapsule",
            "params": [
                {
                    "name": "planeBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "planeShape",
                    "description": "",
                    "type": "Circle"
                },
                {
                    "name": "planeOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "planeAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "capsuleBody",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "capsuleShape",
                    "description": "",
                    "type": "Particle"
                },
                {
                    "name": "capsuleOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "capsuleAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "justTest",
                    "description": "",
                    "type": "Boolean"
                }
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 1652,
            "description": "Creates ContactEquations and FrictionEquations for a collision.",
            "itemtype": "method",
            "name": "circlePlane",
            "params": [
                {
                    "name": "bi",
                    "description": "The first body that should be connected to the equations.",
                    "type": "Body"
                },
                {
                    "name": "si",
                    "description": "The circle shape participating in the collision.",
                    "type": "Circle"
                },
                {
                    "name": "xi",
                    "description": "Extra offset to take into account for the Shape, in addition to the one in circleBody.position. Will *not* be rotated by circleBody.angle (maybe it should, for sake of homogenity?). Set to null if none.",
                    "type": "Array"
                },
                {
                    "name": "bj",
                    "description": "The second body that should be connected to the equations.",
                    "type": "Body"
                },
                {
                    "name": "sj",
                    "description": "The Plane shape that is participating",
                    "type": "Plane"
                },
                {
                    "name": "xj",
                    "description": "Extra offset for the plane shape.",
                    "type": "Array"
                },
                {
                    "name": "aj",
                    "description": "Extra angle to apply to the plane",
                    "type": "Number"
                }
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 1722,
            "description": "Convex/convex Narrowphase.See <a href=\"http://www.altdevblogaday.com/2011/05/13/contact-generation-between-3d-convex-meshes/\">this article</a> for more info.",
            "itemtype": "method",
            "name": "convexConvex",
            "params": [
                {
                    "name": "bi",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "si",
                    "description": "",
                    "type": "Convex"
                },
                {
                    "name": "xi",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "ai",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "bj",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "sj",
                    "description": "",
                    "type": "Convex"
                },
                {
                    "name": "xj",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "aj",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 1904,
            "description": "Project a Convex onto a world-oriented axis",
            "itemtype": "method",
            "name": "projectConvexOntoAxis",
            "static": 1,
            "params": [
                {
                    "name": "convexShape",
                    "description": "",
                    "type": "Convex"
                },
                {
                    "name": "convexOffset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "convexAngle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "worldAxis",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "result",
                    "description": "",
                    "type": "Array"
                }
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 1956,
            "description": "Find a separating axis between the shapes, that maximizes the separating distance between them.",
            "itemtype": "method",
            "name": "findSeparatingAxis",
            "static": 1,
            "params": [
                {
                    "name": "c1",
                    "description": "",
                    "type": "Convex"
                },
                {
                    "name": "offset1",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angle1",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "c2",
                    "description": "",
                    "type": "Convex"
                },
                {
                    "name": "offset2",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angle2",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "sepAxis",
                    "description": "The resulting axis",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "Whether the axis could be found.",
                "type": "Boolean"
            },
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 2126,
            "description": "Get the edge that has a normal closest to an axis.",
            "itemtype": "method",
            "name": "getClosestEdge",
            "static": 1,
            "params": [
                {
                    "name": "c",
                    "description": "",
                    "type": "Convex"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "axis",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "flip",
                    "description": "",
                    "type": "Boolean"
                }
            ],
            "return": {
                "description": "Index of the edge that is closest. This index and the next spans the resulting edge. Returns -1 if failed.",
                "type": "Number"
            },
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 2176,
            "itemtype": "method",
            "name": "circleHeightfield",
            "params": [
                {
                    "name": "bi",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "si",
                    "description": "",
                    "type": "Circle"
                },
                {
                    "name": "xi",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "bj",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "sj",
                    "description": "",
                    "type": "Heightfield"
                },
                {
                    "name": "xj",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "aj",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Narrowphase.js",
            "line": 2355,
            "itemtype": "method",
            "name": "circleHeightfield",
            "params": [
                {
                    "name": "bi",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "si",
                    "description": "",
                    "type": "Circle"
                },
                {
                    "name": "xi",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "bj",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "sj",
                    "description": "",
                    "type": "Heightfield"
                },
                {
                    "name": "xj",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "aj",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Narrowphase"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 25,
            "description": "Ray start point.",
            "itemtype": "property",
            "name": "from",
            "type": "Array",
            "class": "Ray"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 31,
            "description": "Ray end point",
            "itemtype": "property",
            "name": "to",
            "type": "Array",
            "class": "Ray"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 37,
            "description": "Set to true if you want the Ray to take .collisionResponse flags into account on bodies and shapes.",
            "itemtype": "property",
            "name": "checkCollisionResponse",
            "type": "Boolean",
            "class": "Ray"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 43,
            "description": "If set to true, the ray skips any hits with normal.dot(rayDirection) < 0.",
            "itemtype": "property",
            "name": "skipBackfaces",
            "type": "Boolean",
            "class": "Ray"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 49,
            "itemtype": "property",
            "name": "collisionMask",
            "type": "Number",
            "default": "-1",
            "class": "Ray"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 55,
            "itemtype": "property",
            "name": "collisionGroup",
            "type": "Number",
            "default": "-1",
            "class": "Ray"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 61,
            "description": "The intersection mode. Should be {{#crossLink \"Ray/ANY:property\"}}Ray.ANY{{/crossLink}}, {{#crossLink \"Ray/ALL:property\"}}Ray.ALL{{/crossLink}} or {{#crossLink \"Ray/CLOSEST:property\"}}Ray.CLOSEST{{/crossLink}}.",
            "itemtype": "property",
            "name": "mode",
            "type": "Number",
            "class": "Ray"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 67,
            "description": "Current, user-provided result callback. Will be used if mode is Ray.ALL.",
            "itemtype": "property",
            "name": "callback",
            "type": "Function",
            "class": "Ray"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 73,
            "readonly": "",
            "itemtype": "property",
            "name": "direction",
            "type": "Array",
            "class": "Ray"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 79,
            "description": "Length of the ray",
            "readonly": "",
            "itemtype": "property",
            "name": "length",
            "type": "Number",
            "class": "Ray"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 90,
            "description": "This raycasting mode will make the Ray traverse through all intersection points and only return the closest one.",
            "static": 1,
            "itemtype": "property",
            "name": "CLOSEST",
            "type": "Number",
            "class": "Ray"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 97,
            "description": "This raycasting mode will make the Ray stop when it finds the first intersection point.",
            "static": 1,
            "itemtype": "property",
            "name": "ANY",
            "type": "Number",
            "class": "Ray"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 104,
            "description": "This raycasting mode will traverse all intersection points and executes a callback for each one.",
            "static": 1,
            "itemtype": "property",
            "name": "ALL",
            "type": "Number",
            "class": "Ray"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 111,
            "description": "Should be called if you change the from or to point.",
            "itemtype": "method",
            "name": "update",
            "class": "Ray"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 125,
            "itemtype": "method",
            "name": "intersectBodies",
            "params": [
                {
                    "name": "bodies",
                    "description": "An array of Body objects.",
                    "type": "Array"
                }
            ],
            "class": "Ray"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 141,
            "description": "Shoot a ray at a body, get back information about the hit.",
            "itemtype": "method",
            "name": "intersectBody",
            "access": "private",
            "tagname": "",
            "params": [
                {
                    "name": "body",
                    "description": "",
                    "type": "Body"
                }
            ],
            "class": "Ray"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 186,
            "itemtype": "method",
            "name": "intersectShape",
            "access": "private",
            "tagname": "",
            "params": [
                {
                    "name": "shape",
                    "description": "",
                    "type": "Shape"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "position",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "body",
                    "description": "",
                    "type": "Body"
                }
            ],
            "class": "Ray"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 211,
            "description": "Get the AABB of the ray.",
            "itemtype": "method",
            "name": "getAABB",
            "params": [
                {
                    "name": "aabb",
                    "description": "",
                    "type": "AABB"
                }
            ],
            "class": "Ray"
        },
        {
            "file": "src/collision/Ray.js",
            "line": 233,
            "itemtype": "method",
            "name": "reportIntersection",
            "access": "private",
            "tagname": "",
            "params": [
                {
                    "name": "fraction",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "normal",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "faceIndex",
                    "description": "",
                    "type": "Number",
                    "optional": true,
                    "optdefault": "-1"
                }
            ],
            "return": {
                "description": "True if the intersections should continue",
                "type": "Boolean"
            },
            "class": "Ray"
        },
        {
            "file": "src/collision/RaycastResult.js",
            "line": 13,
            "description": "The normal of the hit, oriented in world space.",
            "itemtype": "property",
            "name": "normal",
            "type": "Array",
            "class": "RaycastResult"
        },
        {
            "file": "src/collision/RaycastResult.js",
            "line": 19,
            "description": "The hit shape, or null.",
            "itemtype": "property",
            "name": "shape",
            "type": "Shape",
            "class": "RaycastResult"
        },
        {
            "file": "src/collision/RaycastResult.js",
            "line": 25,
            "description": "The hit body, or null.",
            "itemtype": "property",
            "name": "body",
            "type": "Body",
            "class": "RaycastResult"
        },
        {
            "file": "src/collision/RaycastResult.js",
            "line": 31,
            "description": "The index of the hit triangle, if the hit shape was indexable.",
            "itemtype": "property",
            "name": "faceIndex",
            "type": "Number",
            "default": "-1",
            "class": "RaycastResult"
        },
        {
            "file": "src/collision/RaycastResult.js",
            "line": 38,
            "description": "Distance to the hit, as a fraction. 0 is at the \"from\" point, 1 is at the \"to\" point. Will be set to -1 if there was no hit yet.",
            "itemtype": "property",
            "name": "fraction",
            "type": "Number",
            "default": "-1",
            "class": "RaycastResult"
        },
        {
            "file": "src/collision/RaycastResult.js",
            "line": 45,
            "description": "If the ray should stop traversing.",
            "readonly": "",
            "itemtype": "property",
            "name": "isStopped",
            "type": "Boolean",
            "class": "RaycastResult"
        },
        {
            "file": "src/collision/RaycastResult.js",
            "line": 53,
            "description": "Reset all result data. Must be done before re-using the result object.",
            "itemtype": "method",
            "name": "reset",
            "class": "RaycastResult"
        },
        {
            "file": "src/collision/RaycastResult.js",
            "line": 66,
            "description": "Get the distance to the hit point.",
            "itemtype": "method",
            "name": "getHitDistance",
            "params": [
                {
                    "name": "ray",
                    "description": "",
                    "type": "Ray"
                }
            ],
            "class": "RaycastResult"
        },
        {
            "file": "src/collision/RaycastResult.js",
            "line": 75,
            "description": "Returns true if the ray hit something since the last reset().",
            "itemtype": "method",
            "name": "hasHit",
            "class": "RaycastResult"
        },
        {
            "file": "src/collision/RaycastResult.js",
            "line": 83,
            "description": "Get world hit point.",
            "itemtype": "method",
            "name": "getHitPoint",
            "params": [
                {
                    "name": "out",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "ray",
                    "description": "",
                    "type": "Ray"
                }
            ],
            "class": "RaycastResult"
        },
        {
            "file": "src/collision/RaycastResult.js",
            "line": 93,
            "description": "Can be called while iterating over hits to stop searching for hit points.",
            "itemtype": "method",
            "name": "stop",
            "class": "RaycastResult"
        },
        {
            "file": "src/collision/RaycastResult.js",
            "line": 101,
            "itemtype": "method",
            "name": "shouldStop",
            "access": "private",
            "tagname": "",
            "params": [
                {
                    "name": "ray",
                    "description": "",
                    "type": "Ray"
                }
            ],
            "return": {
                "description": "",
                "type": "Boolean"
            },
            "class": "RaycastResult"
        },
        {
            "file": "src/collision/RaycastResult.js",
            "line": 111,
            "itemtype": "method",
            "name": "set",
            "access": "private",
            "tagname": "",
            "params": [
                {
                    "name": "normal",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "shape",
                    "description": "",
                    "type": "Shape"
                },
                {
                    "name": "body",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "fraction",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "RaycastResult"
        },
        {
            "file": "src/collision/SAPBroadphase.js",
            "line": 16,
            "description": "List of bodies currently in the broadphase.",
            "itemtype": "property",
            "name": "axisList",
            "type": "{Array}",
            "class": "SAPBroadphase"
        },
        {
            "file": "src/collision/SAPBroadphase.js",
            "line": 23,
            "description": "The axis to sort along. 0 means x-axis and 1 y-axis. If your bodies are more spread out over the X axis, set axisIndex to 0, and you will gain some performance.",
            "itemtype": "property",
            "name": "axisIndex",
            "type": "{Number}",
            "class": "SAPBroadphase"
        },
        {
            "file": "src/collision/SAPBroadphase.js",
            "line": 46,
            "description": "Change the world",
            "itemtype": "method",
            "name": "setWorld",
            "params": [
                {
                    "name": "world",
                    "description": "",
                    "type": "World"
                }
            ],
            "class": "SAPBroadphase"
        },
        {
            "file": "src/collision/SAPBroadphase.js",
            "line": 69,
            "description": "Sorts bodies along an axis.",
            "itemtype": "method",
            "name": "sortAxisList",
            "params": [
                {
                    "name": "a",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "axisIndex",
                    "description": "",
                    "type": "Number"
                }
            ],
            "return": {
                "description": "",
                "type": "Array"
            },
            "class": "SAPBroadphase"
        },
        {
            "file": "src/collision/SAPBroadphase.js",
            "line": 99,
            "description": "Get the colliding pairs",
            "itemtype": "method",
            "name": "getCollisionPairs",
            "params": [
                {
                    "name": "world",
                    "description": "",
                    "type": "World"
                }
            ],
            "return": {
                "description": "",
                "type": "Array"
            },
            "class": "SAPBroadphase"
        },
        {
            "file": "src/collision/SAPBroadphase.js",
            "line": 146,
            "description": "Returns all the bodies within an AABB.",
            "itemtype": "method",
            "name": "aabbQuery",
            "params": [
                {
                    "name": "world",
                    "description": "",
                    "type": "World"
                },
                {
                    "name": "aabb",
                    "description": "",
                    "type": "AABB"
                },
                {
                    "name": "result",
                    "description": "An array to store resulting bodies in.",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "",
                "type": "Array"
            },
            "class": "SAPBroadphase"
        },
        {
            "file": "src/constraints/Constraint.js",
            "line": 19,
            "description": "The type of constraint. May be one of Constraint.DISTANCE, Constraint.GEAR, Constraint.LOCK, Constraint.PRISMATIC or Constraint.REVOLUTE.",
            "itemtype": "property",
            "name": "type",
            "type": "Number",
            "class": "Constraint"
        },
        {
            "file": "src/constraints/Constraint.js",
            "line": 30,
            "description": "Equations to be solved in this constraint",
            "itemtype": "property",
            "name": "equations",
            "type": "{Array}",
            "class": "Constraint"
        },
        {
            "file": "src/constraints/Constraint.js",
            "line": 38,
            "description": "First body participating in the constraint.",
            "itemtype": "property",
            "name": "bodyA",
            "type": "{Body}",
            "class": "Constraint"
        },
        {
            "file": "src/constraints/Constraint.js",
            "line": 45,
            "description": "Second body participating in the constraint.",
            "itemtype": "property",
            "name": "bodyB",
            "type": "{Body}",
            "class": "Constraint"
        },
        {
            "file": "src/constraints/Constraint.js",
            "line": 52,
            "description": "Set to true if you want the connected bodies to collide.",
            "itemtype": "property",
            "name": "collideConnected",
            "type": "{Boolean}",
            "default": "true",
            "class": "Constraint"
        },
        {
            "file": "src/constraints/Constraint.js",
            "line": 71,
            "description": "Updates the internal constraint parameters before solve.",
            "itemtype": "method",
            "name": "update",
            "class": "Constraint"
        },
        {
            "file": "src/constraints/Constraint.js",
            "line": 79,
            "static": 1,
            "itemtype": "property",
            "name": "DISTANCE",
            "type": "Number",
            "class": "Constraint"
        },
        {
            "file": "src/constraints/Constraint.js",
            "line": 85,
            "static": 1,
            "itemtype": "property",
            "name": "GEAR",
            "type": "Number",
            "class": "Constraint"
        },
        {
            "file": "src/constraints/Constraint.js",
            "line": 91,
            "static": 1,
            "itemtype": "property",
            "name": "LOCK",
            "type": "Number",
            "class": "Constraint"
        },
        {
            "file": "src/constraints/Constraint.js",
            "line": 97,
            "static": 1,
            "itemtype": "property",
            "name": "PRISMATIC",
            "type": "Number",
            "class": "Constraint"
        },
        {
            "file": "src/constraints/Constraint.js",
            "line": 103,
            "static": 1,
            "itemtype": "property",
            "name": "REVOLUTE",
            "type": "Number",
            "class": "Constraint"
        },
        {
            "file": "src/constraints/Constraint.js",
            "line": 109,
            "description": "Set stiffness for this constraint.",
            "itemtype": "method",
            "name": "setStiffness",
            "params": [
                {
                    "name": "stiffness",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Constraint"
        },
        {
            "file": "src/constraints/Constraint.js",
            "line": 123,
            "description": "Set relaxation for this constraint.",
            "itemtype": "method",
            "name": "setRelaxation",
            "params": [
                {
                    "name": "relaxation",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Constraint"
        },
        {
            "file": "src/constraints/DistanceConstraint.js",
            "line": 48,
            "description": "Local anchor in body A.",
            "itemtype": "property",
            "name": "localAnchorA",
            "type": "{Array}",
            "class": "DistanceConstraint"
        },
        {
            "file": "src/constraints/DistanceConstraint.js",
            "line": 55,
            "description": "Local anchor in body B.",
            "itemtype": "property",
            "name": "localAnchorB",
            "type": "{Array}",
            "class": "DistanceConstraint"
        },
        {
            "file": "src/constraints/DistanceConstraint.js",
            "line": 65,
            "description": "The distance to keep.",
            "itemtype": "property",
            "name": "distance",
            "type": "{Number}",
            "class": "DistanceConstraint"
        },
        {
            "file": "src/constraints/DistanceConstraint.js",
            "line": 101,
            "description": "Max force to apply.",
            "itemtype": "property",
            "name": "maxForce",
            "type": "Number",
            "class": "DistanceConstraint"
        },
        {
            "file": "src/constraints/DistanceConstraint.js",
            "line": 147,
            "description": "If the upper limit is enabled or not.",
            "itemtype": "property",
            "name": "upperLimitEnabled",
            "type": "Boolean",
            "class": "DistanceConstraint"
        },
        {
            "file": "src/constraints/DistanceConstraint.js",
            "line": 153,
            "description": "The upper constraint limit.",
            "itemtype": "property",
            "name": "upperLimit",
            "type": "Number",
            "class": "DistanceConstraint"
        },
        {
            "file": "src/constraints/DistanceConstraint.js",
            "line": 159,
            "description": "If the lower limit is enabled or not.",
            "itemtype": "property",
            "name": "lowerLimitEnabled",
            "type": "Boolean",
            "class": "DistanceConstraint"
        },
        {
            "file": "src/constraints/DistanceConstraint.js",
            "line": 165,
            "description": "The lower constraint limit.",
            "itemtype": "property",
            "name": "lowerLimit",
            "type": "Number",
            "class": "DistanceConstraint"
        },
        {
            "file": "src/constraints/DistanceConstraint.js",
            "line": 171,
            "description": "Current constraint position. This is equal to the current distance between the world anchor points.",
            "itemtype": "property",
            "name": "position",
            "type": "Number",
            "class": "DistanceConstraint"
        },
        {
            "file": "src/constraints/DistanceConstraint.js",
            "line": 180,
            "description": "Update the constraint equations. Should be done if any of the bodies changed position, before solving.",
            "itemtype": "method",
            "name": "update",
            "class": "DistanceConstraint"
        },
        {
            "file": "src/constraints/DistanceConstraint.js",
            "line": 249,
            "description": "Set the max force to be used",
            "itemtype": "method",
            "name": "setMaxForce",
            "params": [
                {
                    "name": "maxForce",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "DistanceConstraint"
        },
        {
            "file": "src/constraints/DistanceConstraint.js",
            "line": 260,
            "description": "Get the max force",
            "itemtype": "method",
            "name": "getMaxForce",
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "DistanceConstraint"
        },
        {
            "file": "src/constraints/GearConstraint.js",
            "line": 37,
            "description": "The gear ratio.",
            "itemtype": "property",
            "name": "ratio",
            "type": "{Number}",
            "class": "GearConstraint"
        },
        {
            "file": "src/constraints/GearConstraint.js",
            "line": 44,
            "description": "The relative angle",
            "itemtype": "property",
            "name": "angle",
            "type": "{Number}",
            "class": "GearConstraint"
        },
        {
            "file": "src/constraints/GearConstraint.js",
            "line": 75,
            "description": "Set the max torque for the constraint.",
            "itemtype": "method",
            "name": "setMaxTorque",
            "params": [
                {
                    "name": "torque",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "GearConstraint"
        },
        {
            "file": "src/constraints/GearConstraint.js",
            "line": 84,
            "description": "Get the max torque for the constraint.",
            "itemtype": "method",
            "name": "getMaxTorque",
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "GearConstraint"
        },
        {
            "file": "src/constraints/LockConstraint.js",
            "line": 88,
            "description": "The offset of bodyB in bodyA's frame.",
            "itemtype": "property",
            "name": "localOffsetB",
            "type": "Array",
            "class": "LockConstraint"
        },
        {
            "file": "src/constraints/LockConstraint.js",
            "line": 101,
            "description": "The offset angle of bodyB in bodyA's frame.",
            "itemtype": "property",
            "name": "localAngleB",
            "type": "Number",
            "class": "LockConstraint"
        },
        {
            "file": "src/constraints/LockConstraint.js",
            "line": 119,
            "description": "Set the maximum force to be applied.",
            "itemtype": "method",
            "name": "setMaxForce",
            "params": [
                {
                    "name": "force",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "LockConstraint"
        },
        {
            "file": "src/constraints/LockConstraint.js",
            "line": 132,
            "description": "Get the max force.",
            "itemtype": "method",
            "name": "getMaxForce",
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "LockConstraint"
        },
        {
            "file": "src/constraints/PrismaticConstraint.js",
            "line": 40,
            "itemtype": "property",
            "name": "localAnchorA",
            "type": "{Array}",
            "class": "PrismaticConstraint"
        },
        {
            "file": "src/constraints/PrismaticConstraint.js",
            "line": 46,
            "itemtype": "property",
            "name": "localAnchorB",
            "type": "{Array}",
            "class": "PrismaticConstraint"
        },
        {
            "file": "src/constraints/PrismaticConstraint.js",
            "line": 52,
            "itemtype": "property",
            "name": "localAxisA",
            "type": "{Array}",
            "class": "PrismaticConstraint"
        },
        {
            "file": "src/constraints/PrismaticConstraint.js",
            "line": 114,
            "description": "The position of anchor A relative to anchor B, along the constraint axis.",
            "itemtype": "property",
            "name": "position",
            "type": "{Number}",
            "class": "PrismaticConstraint"
        },
        {
            "file": "src/constraints/PrismaticConstraint.js",
            "line": 124,
            "description": "Set to true to enable lower limit.",
            "itemtype": "property",
            "name": "lowerLimitEnabled",
            "type": "{Boolean}",
            "class": "PrismaticConstraint"
        },
        {
            "file": "src/constraints/PrismaticConstraint.js",
            "line": 131,
            "description": "Set to true to enable upper limit.",
            "itemtype": "property",
            "name": "upperLimitEnabled",
            "type": "{Boolean}",
            "class": "PrismaticConstraint"
        },
        {
            "file": "src/constraints/PrismaticConstraint.js",
            "line": 138,
            "description": "Lower constraint limit. The constraint position is forced to be larger than this value.",
            "itemtype": "property",
            "name": "lowerLimit",
            "type": "{Number}",
            "class": "PrismaticConstraint"
        },
        {
            "file": "src/constraints/PrismaticConstraint.js",
            "line": 145,
            "description": "Upper constraint limit. The constraint position is forced to be smaller than this value.",
            "itemtype": "property",
            "name": "upperLimit",
            "type": "{Number}",
            "class": "PrismaticConstraint"
        },
        {
            "file": "src/constraints/PrismaticConstraint.js",
            "line": 160,
            "description": "Equation used for the motor.",
            "itemtype": "property",
            "name": "motorEquation",
            "type": "{Equation}",
            "class": "PrismaticConstraint"
        },
        {
            "file": "src/constraints/PrismaticConstraint.js",
            "line": 167,
            "description": "The current motor state. Enable or disable the motor using .enableMotor",
            "itemtype": "property",
            "name": "motorEnabled",
            "type": "{Boolean}",
            "class": "PrismaticConstraint"
        },
        {
            "file": "src/constraints/PrismaticConstraint.js",
            "line": 174,
            "description": "Set the target speed for the motor.",
            "itemtype": "property",
            "name": "motorSpeed",
            "type": "{Number}",
            "class": "PrismaticConstraint"
        },
        {
            "file": "src/constraints/PrismaticConstraint.js",
            "line": 207,
            "description": "Update the constraint equations. Should be done if any of the bodies changed position, before solving.",
            "itemtype": "method",
            "name": "update",
            "class": "PrismaticConstraint"
        },
        {
            "file": "src/constraints/PrismaticConstraint.js",
            "line": 304,
            "description": "Enable the motor",
            "itemtype": "method",
            "name": "enableMotor",
            "class": "PrismaticConstraint"
        },
        {
            "file": "src/constraints/PrismaticConstraint.js",
            "line": 316,
            "description": "Disable the rotational motor",
            "itemtype": "method",
            "name": "disableMotor",
            "class": "PrismaticConstraint"
        },
        {
            "file": "src/constraints/PrismaticConstraint.js",
            "line": 329,
            "description": "Set the constraint limits.",
            "itemtype": "method",
            "name": "setLimits",
            "params": [
                {
                    "name": "lower",
                    "description": "Lower limit.",
                    "type": "Number"
                },
                {
                    "name": "upper",
                    "description": "Upper limit.",
                    "type": "Number"
                }
            ],
            "class": "PrismaticConstraint"
        },
        {
            "file": "src/constraints/RevoluteConstraint.js",
            "line": 50,
            "itemtype": "property",
            "name": "pivotA",
            "type": "Array",
            "class": "RevoluteConstraint"
        },
        {
            "file": "src/constraints/RevoluteConstraint.js",
            "line": 55,
            "itemtype": "property",
            "name": "pivotB",
            "type": "Array",
            "class": "RevoluteConstraint"
        },
        {
            "file": "src/constraints/RevoluteConstraint.js",
            "line": 106,
            "description": "Indicates whether the motor is enabled. Use .enableMotor() to enable the constraint motor.",
            "itemtype": "property",
            "name": "motorEnabled",
            "type": "Boolean",
            "readonly": "",
            "class": "RevoluteConstraint"
        },
        {
            "file": "src/constraints/RevoluteConstraint.js",
            "line": 113,
            "description": "The constraint position.",
            "itemtype": "property",
            "name": "angle",
            "type": "{Number}",
            "readonly": "",
            "class": "RevoluteConstraint"
        },
        {
            "file": "src/constraints/RevoluteConstraint.js",
            "line": 121,
            "description": "Set to true to enable lower limit",
            "itemtype": "property",
            "name": "lowerLimitEnabled",
            "type": "{Boolean}",
            "class": "RevoluteConstraint"
        },
        {
            "file": "src/constraints/RevoluteConstraint.js",
            "line": 128,
            "description": "Set to true to enable upper limit",
            "itemtype": "property",
            "name": "upperLimitEnabled",
            "type": "{Boolean}",
            "class": "RevoluteConstraint"
        },
        {
            "file": "src/constraints/RevoluteConstraint.js",
            "line": 135,
            "description": "The lower limit on the constraint angle.",
            "itemtype": "property",
            "name": "lowerLimit",
            "type": "{Boolean}",
            "class": "RevoluteConstraint"
        },
        {
            "file": "src/constraints/RevoluteConstraint.js",
            "line": 142,
            "description": "The upper limit on the constraint angle.",
            "itemtype": "property",
            "name": "upperLimit",
            "type": "{Boolean}",
            "class": "RevoluteConstraint"
        },
        {
            "file": "src/constraints/RevoluteConstraint.js",
            "line": 157,
            "description": "Set the constraint angle limits.",
            "itemtype": "method",
            "name": "setLimits",
            "params": [
                {
                    "name": "lower",
                    "description": "Lower angle limit.",
                    "type": "Number"
                },
                {
                    "name": "upper",
                    "description": "Upper angle limit.",
                    "type": "Number"
                }
            ],
            "class": "RevoluteConstraint"
        },
        {
            "file": "src/constraints/RevoluteConstraint.js",
            "line": 267,
            "description": "Enable the rotational motor",
            "itemtype": "method",
            "name": "enableMotor",
            "class": "RevoluteConstraint"
        },
        {
            "file": "src/constraints/RevoluteConstraint.js",
            "line": 279,
            "description": "Disable the rotational motor",
            "itemtype": "method",
            "name": "disableMotor",
            "class": "RevoluteConstraint"
        },
        {
            "file": "src/constraints/RevoluteConstraint.js",
            "line": 292,
            "description": "Check if the motor is enabled.",
            "itemtype": "method",
            "name": "motorIsEnabled",
            "deprecated": true,
            "deprecationMessage": "use property motorEnabled instead.",
            "return": {
                "description": "",
                "type": "Boolean"
            },
            "class": "RevoluteConstraint"
        },
        {
            "file": "src/constraints/RevoluteConstraint.js",
            "line": 302,
            "description": "Set the speed of the rotational constraint motor",
            "itemtype": "method",
            "name": "setMotorSpeed",
            "params": [
                {
                    "name": "speed",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "RevoluteConstraint"
        },
        {
            "file": "src/constraints/RevoluteConstraint.js",
            "line": 315,
            "description": "Get the speed of the rotational constraint motor",
            "itemtype": "method",
            "name": "getMotorSpeed",
            "return": {
                "description": "The current speed, or false if the motor is not enabled.",
                "type": "Number"
            },
            "class": "RevoluteConstraint"
        },
        {
            "file": "src/equations/AngleLockEquation.js",
            "line": 23,
            "description": "The gear ratio.",
            "itemtype": "property",
            "name": "ratio",
            "type": "Number",
            "access": "private",
            "tagname": "",
            "see": [
                "setRatio"
            ],
            "class": "AngleLockEquation"
        },
        {
            "file": "src/equations/AngleLockEquation.js",
            "line": 40,
            "description": "Set the gear ratio for this equation",
            "itemtype": "method",
            "name": "setRatio",
            "params": [
                {
                    "name": "ratio",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "AngleLockEquation"
        },
        {
            "file": "src/equations/AngleLockEquation.js",
            "line": 52,
            "description": "Set the max force for the equation.",
            "itemtype": "method",
            "name": "setMaxTorque",
            "params": [
                {
                    "name": "torque",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "AngleLockEquation"
        },
        {
            "file": "src/equations/ContactEquation.js",
            "line": 18,
            "description": "Vector from body i center of mass to the contact point.",
            "itemtype": "property",
            "name": "contactPointA",
            "type": "{Array}",
            "class": "ContactEquation"
        },
        {
            "file": "src/equations/ContactEquation.js",
            "line": 26,
            "description": "World-oriented vector from body A center of mass to the contact point.",
            "itemtype": "property",
            "name": "contactPointB",
            "type": "{Array}",
            "class": "ContactEquation"
        },
        {
            "file": "src/equations/ContactEquation.js",
            "line": 33,
            "description": "The normal vector, pointing out of body i",
            "itemtype": "property",
            "name": "normalA",
            "type": "{Array}",
            "class": "ContactEquation"
        },
        {
            "file": "src/equations/ContactEquation.js",
            "line": 40,
            "description": "The restitution to use (0=no bounciness, 1=max bounciness).",
            "itemtype": "property",
            "name": "restitution",
            "type": "{Number}",
            "class": "ContactEquation"
        },
        {
            "file": "src/equations/ContactEquation.js",
            "line": 47,
            "description": "This property is set to true if this is the first impact between the bodies (not persistant contact).",
            "itemtype": "property",
            "name": "firstImpact",
            "type": "{Boolean}",
            "readonly": "",
            "class": "ContactEquation"
        },
        {
            "file": "src/equations/ContactEquation.js",
            "line": 55,
            "description": "The shape in body i that triggered this contact.",
            "itemtype": "property",
            "name": "shapeA",
            "type": "{Shape}",
            "class": "ContactEquation"
        },
        {
            "file": "src/equations/ContactEquation.js",
            "line": 62,
            "description": "The shape in body j that triggered this contact.",
            "itemtype": "property",
            "name": "shapeB",
            "type": "{Shape}",
            "class": "ContactEquation"
        },
        {
            "file": "src/equations/ContactEquation.js",
            "line": 120,
            "description": "Get the relative velocity along the normal vector.",
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "ContactEquation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 18,
            "description": "Minimum force to apply when solving.",
            "itemtype": "property",
            "name": "minForce",
            "type": "{Number}",
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 25,
            "description": "Max force to apply when solving.",
            "itemtype": "property",
            "name": "maxForce",
            "type": "{Number}",
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 32,
            "description": "First body participating in the constraint",
            "itemtype": "property",
            "name": "bodyA",
            "type": "{Body}",
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 39,
            "description": "Second body participating in the constraint",
            "itemtype": "property",
            "name": "bodyB",
            "type": "{Body}",
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 46,
            "description": "The stiffness of this equation. Typically chosen to a large number (~1e7), but can be chosen somewhat freely to get a stable simulation.",
            "itemtype": "property",
            "name": "stiffness",
            "type": "{Number}",
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 53,
            "description": "The number of time steps needed to stabilize the constraint equation. Typically between 3 and 5 time steps.",
            "itemtype": "property",
            "name": "relaxation",
            "type": "{Number}",
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 60,
            "description": "The Jacobian entry of this equation. 6 numbers, 3 per body (x,y,angle).",
            "itemtype": "property",
            "name": "G",
            "type": "{Array}",
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 77,
            "description": "Indicates if stiffness or relaxation was changed.",
            "itemtype": "property",
            "name": "needsUpdate",
            "type": "Boolean",
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 83,
            "description": "The resulting constraint multiplier from the last solve. This is mostly equivalent to the force produced by the constraint.",
            "itemtype": "property",
            "name": "multiplier",
            "type": "{Number}",
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 90,
            "description": "Relative velocity.",
            "itemtype": "property",
            "name": "relativeVelocity",
            "type": "Number",
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 96,
            "description": "Whether this equation is enabled or not. If true, it will be added to the solver.",
            "itemtype": "property",
            "name": "enabled",
            "type": "Boolean",
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 104,
            "description": "The default stiffness when creating a new Equation.",
            "static": 1,
            "itemtype": "property",
            "name": "DEFAULT_STIFFNESS",
            "type": "Number",
            "default": "1e6",
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 112,
            "description": "The default relaxation when creating a new Equation.",
            "static": 1,
            "itemtype": "property",
            "name": "DEFAULT_RELAXATION",
            "type": "Number",
            "default": "4",
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 120,
            "description": "Compute SPOOK parameters .a, .b and .epsilon according to the current parameters. See equations 9, 10 and 11 in the <a href=\"http://www8.cs.umu.se/kurser/5DV058/VT09/lectures/spooknotes.pdf\">SPOOK notes</a>.",
            "itemtype": "method",
            "name": "update",
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 136,
            "description": "Multiply a jacobian entry with corresponding positions or velocities",
            "itemtype": "method",
            "name": "gmult",
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 150,
            "description": "Computes the RHS of the SPOOK equation",
            "itemtype": "method",
            "name": "computeB",
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 162,
            "description": "Computes G\\*q, where q are the generalized body coordinates",
            "itemtype": "method",
            "name": "computeGq",
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 181,
            "description": "Computes G\\*W, where W are the body velocities",
            "itemtype": "method",
            "name": "computeGW",
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 197,
            "description": "Computes G\\*Wlambda, where W are the body velocities",
            "itemtype": "method",
            "name": "computeGWlambda",
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 213,
            "description": "Computes G\\*inv(M)\\*f, where M is the mass matrix with diagonal blocks for each body, and f are the forces on the bodies.",
            "itemtype": "method",
            "name": "computeGiMf",
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 241,
            "description": "Computes G\\*inv(M)\\*G'",
            "itemtype": "method",
            "name": "computeGiMGt",
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 270,
            "description": "Add constraint velocity to the bodies.",
            "itemtype": "method",
            "name": "addToWlambda",
            "params": [
                {
                    "name": "deltalambda",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Equation"
        },
        {
            "file": "src/equations/Equation.js",
            "line": 313,
            "description": "Compute the denominator part of the SPOOK equation: C = G\\*inv(M)\\*G' + eps",
            "itemtype": "method",
            "name": "computeInvC",
            "params": [
                {
                    "name": "eps",
                    "description": "",
                    "type": "Number"
                }
            ],
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "Equation"
        },
        {
            "file": "src/equations/FrictionEquation.js",
            "line": 20,
            "description": "Relative vector from center of body A to the contact point, world oriented.",
            "itemtype": "property",
            "name": "contactPointA",
            "type": "{Array}",
            "class": "FrictionEquation"
        },
        {
            "file": "src/equations/FrictionEquation.js",
            "line": 27,
            "description": "Relative vector from center of body B to the contact point, world oriented.",
            "itemtype": "property",
            "name": "contactPointB",
            "type": "{Array}",
            "class": "FrictionEquation"
        },
        {
            "file": "src/equations/FrictionEquation.js",
            "line": 34,
            "description": "Tangent vector that the friction force will act along. World oriented.",
            "itemtype": "property",
            "name": "t",
            "type": "{Array}",
            "class": "FrictionEquation"
        },
        {
            "file": "src/equations/FrictionEquation.js",
            "line": 41,
            "description": "ContactEquations connected to this friction equation. The contact equations can be used to rescale the max force for the friction. If more than one contact equation is given, then the max force can be set to the average.",
            "itemtype": "property",
            "name": "contactEquations",
            "type": "{ContactEquation}",
            "class": "FrictionEquation"
        },
        {
            "file": "src/equations/FrictionEquation.js",
            "line": 48,
            "description": "The shape in body i that triggered this friction.",
            "itemtype": "property",
            "name": "shapeA",
            "type": "{Shape}",
            "todo": [
                "Needed? The shape can be looked up via contactEquation.shapeA..."
            ],
            "class": "FrictionEquation"
        },
        {
            "file": "src/equations/FrictionEquation.js",
            "line": 56,
            "description": "The shape in body j that triggered this friction.",
            "itemtype": "property",
            "name": "shapeB",
            "type": "{Shape}",
            "todo": [
                "Needed? The shape can be looked up via contactEquation.shapeB..."
            ],
            "class": "FrictionEquation"
        },
        {
            "file": "src/equations/FrictionEquation.js",
            "line": 64,
            "description": "The friction coefficient to use.",
            "itemtype": "property",
            "name": "frictionCoefficient",
            "type": "{Number}",
            "class": "FrictionEquation"
        },
        {
            "file": "src/equations/FrictionEquation.js",
            "line": 74,
            "description": "Set the slipping condition for the constraint. The friction force cannot be\nlarger than this value.",
            "itemtype": "method",
            "name": "setSlipForce",
            "params": [
                {
                    "name": "slipForce",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "FrictionEquation"
        },
        {
            "file": "src/equations/FrictionEquation.js",
            "line": 85,
            "description": "Get the max force for the constraint.",
            "itemtype": "method",
            "name": "getSlipForce",
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "FrictionEquation"
        },
        {
            "file": "src/equations/RotationalLockEquation.js",
            "line": 21,
            "itemtype": "property",
            "name": "angle",
            "type": "Number",
            "class": "RotationalLockEquation"
        },
        {
            "file": "src/events/EventEmitter.js",
            "line": 13,
            "description": "Add an event listener",
            "itemtype": "method",
            "name": "on",
            "params": [
                {
                    "name": "type",
                    "description": "",
                    "type": "String"
                },
                {
                    "name": "listener",
                    "description": "",
                    "type": "Function"
                }
            ],
            "return": {
                "description": "The self object, for chainability.",
                "type": "EventEmitter"
            },
            "class": "EventEmitter"
        },
        {
            "file": "src/events/EventEmitter.js",
            "line": 35,
            "description": "Check if an event listener is added",
            "itemtype": "method",
            "name": "has",
            "params": [
                {
                    "name": "type",
                    "description": "",
                    "type": "String"
                },
                {
                    "name": "listener",
                    "description": "",
                    "type": "Function"
                }
            ],
            "return": {
                "description": "",
                "type": "Boolean"
            },
            "class": "EventEmitter"
        },
        {
            "file": "src/events/EventEmitter.js",
            "line": 60,
            "description": "Remove an event listener",
            "itemtype": "method",
            "name": "off",
            "params": [
                {
                    "name": "type",
                    "description": "",
                    "type": "String"
                },
                {
                    "name": "listener",
                    "description": "",
                    "type": "Function"
                }
            ],
            "return": {
                "description": "The self object, for chainability.",
                "type": "EventEmitter"
            },
            "class": "EventEmitter"
        },
        {
            "file": "src/events/EventEmitter.js",
            "line": 79,
            "description": "Emit an event.",
            "itemtype": "method",
            "name": "emit",
            "params": [
                {
                    "name": "event",
                    "description": "",
                    "type": "Object",
                    "props": [
                        {
                            "name": "type",
                            "description": "",
                            "type": "String"
                        }
                    ]
                }
            ],
            "return": {
                "description": "The self object, for chainability.",
                "type": "EventEmitter"
            },
            "class": "EventEmitter"
        },
        {
            "file": "src/material/ContactMaterial.js",
            "line": 29,
            "description": "The contact material identifier",
            "itemtype": "property",
            "name": "id",
            "type": "{Number}",
            "class": "ContactMaterial"
        },
        {
            "file": "src/material/ContactMaterial.js",
            "line": 36,
            "description": "First material participating in the contact material",
            "itemtype": "property",
            "name": "materialA",
            "type": "{Material}",
            "class": "ContactMaterial"
        },
        {
            "file": "src/material/ContactMaterial.js",
            "line": 43,
            "description": "Second material participating in the contact material",
            "itemtype": "property",
            "name": "materialB",
            "type": "{Material}",
            "class": "ContactMaterial"
        },
        {
            "file": "src/material/ContactMaterial.js",
            "line": 50,
            "description": "Friction coefficient to use in the contact of these two materials. Friction = 0 will make the involved objects super slippery, and friction = 1 will make it much less slippery. A friction coefficient larger than 1 will allow for very large friction forces, which can be convenient for preventing car tires not slip on the ground.",
            "itemtype": "property",
            "name": "friction",
            "type": "{Number}",
            "default": "0.3",
            "class": "ContactMaterial"
        },
        {
            "file": "src/material/ContactMaterial.js",
            "line": 58,
            "description": "Restitution, or \"bounciness\" to use in the contact of these two materials. A restitution of 0 will make no bounce, while restitution=1 will approximately bounce back with the same velocity the object came with.",
            "itemtype": "property",
            "name": "restitution",
            "type": "{Number}",
            "default": "0",
            "class": "ContactMaterial"
        },
        {
            "file": "src/material/ContactMaterial.js",
            "line": 66,
            "description": "Hardness of the contact. Less stiffness will make the objects penetrate more, and will make the contact act more like a spring than a contact force. Default value is {{#crossLink \"Equation/DEFAULT_STIFFNESS:property\"}}Equation.DEFAULT_STIFFNESS{{/crossLink}}.",
            "itemtype": "property",
            "name": "stiffness",
            "type": "{Number}",
            "class": "ContactMaterial"
        },
        {
            "file": "src/material/ContactMaterial.js",
            "line": 73,
            "description": "Relaxation of the resulting ContactEquation that this ContactMaterial generate. Default value is {{#crossLink \"Equation/DEFAULT_RELAXATION:property\"}}Equation.DEFAULT_RELAXATION{{/crossLink}}.",
            "itemtype": "property",
            "name": "relaxation",
            "type": "{Number}",
            "class": "ContactMaterial"
        },
        {
            "file": "src/material/ContactMaterial.js",
            "line": 80,
            "description": "Stiffness of the resulting friction force. For most cases, the value of this property should be a large number. I cannot think of any case where you would want less frictionStiffness. Default value is {{#crossLink \"Equation/DEFAULT_STIFFNESS:property\"}}Equation.DEFAULT_STIFFNESS{{/crossLink}}.",
            "itemtype": "property",
            "name": "frictionStiffness",
            "type": "{Number}",
            "class": "ContactMaterial"
        },
        {
            "file": "src/material/ContactMaterial.js",
            "line": 87,
            "description": "Relaxation of the resulting friction force. The default value should be good for most simulations. Default value is {{#crossLink \"Equation/DEFAULT_RELAXATION:property\"}}Equation.DEFAULT_RELAXATION{{/crossLink}}.",
            "itemtype": "property",
            "name": "frictionRelaxation",
            "type": "{Number}",
            "class": "ContactMaterial"
        },
        {
            "file": "src/material/ContactMaterial.js",
            "line": 94,
            "description": "Will add surface velocity to this material. If bodyA rests on top if bodyB, and the surface velocity is positive, bodyA will slide to the right.",
            "itemtype": "property",
            "name": "surfaceVelocity",
            "type": "Number",
            "default": "0",
            "class": "ContactMaterial"
        },
        {
            "file": "src/material/ContactMaterial.js",
            "line": 101,
            "description": "Offset to be set on ContactEquations. A positive value will make the bodies penetrate more into each other. Can be useful in scenes where contacts need to be more persistent, for example when stacking. Aka \"cure for nervous contacts\".",
            "itemtype": "property",
            "name": "contactSkinSize",
            "type": "{Number}",
            "class": "ContactMaterial"
        },
        {
            "file": "src/material/Material.js",
            "line": 11,
            "description": "The material identifier",
            "itemtype": "property",
            "name": "id",
            "type": "{Number}",
            "class": "Material"
        },
        {
            "file": "src/math/vec2.js",
            "line": 32,
            "description": "Make a cross product and only return the z component",
            "itemtype": "method",
            "name": "crossLength",
            "static": 1,
            "params": [
                {
                    "name": "a",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "b",
                    "description": "",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 44,
            "description": "Cross product between a vector and the Z component of a vector",
            "itemtype": "method",
            "name": "crossVZ",
            "static": 1,
            "params": [
                {
                    "name": "out",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "vec",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "zcomp",
                    "description": "",
                    "type": "Number"
                }
            ],
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 59,
            "description": "Cross product between a vector and the Z component of a vector",
            "itemtype": "method",
            "name": "crossZV",
            "static": 1,
            "params": [
                {
                    "name": "out",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "zcomp",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "vec",
                    "description": "",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 74,
            "description": "Rotate a vector by an angle",
            "itemtype": "method",
            "name": "rotate",
            "static": 1,
            "params": [
                {
                    "name": "out",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "a",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 96,
            "description": "Rotate a vector 90 degrees clockwise",
            "itemtype": "method",
            "name": "rotate90cw",
            "static": 1,
            "params": [
                {
                    "name": "out",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "a",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 111,
            "description": "Transform a point position to local frame.",
            "itemtype": "method",
            "name": "toLocalFrame",
            "params": [
                {
                    "name": "out",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "worldPoint",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "framePosition",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "frameAngle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 125,
            "description": "Transform a point position to global frame.",
            "itemtype": "method",
            "name": "toGlobalFrame",
            "params": [
                {
                    "name": "out",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "localPoint",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "framePosition",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "frameAngle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 139,
            "description": "Transform a vector to local frame.",
            "itemtype": "method",
            "name": "vectorToLocalFrame",
            "params": [
                {
                    "name": "out",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "worldVector",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "frameAngle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 150,
            "description": "Transform a point position to global frame.",
            "itemtype": "method",
            "name": "toGlobalFrame",
            "params": [
                {
                    "name": "out",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "localVector",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "frameAngle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 161,
            "description": "Compute centroid of a triangle spanned by vectors a,b,c. See http://easycalculation.com/analytical/learn-centroid.php",
            "itemtype": "method",
            "name": "centroid",
            "static": 1,
            "params": [
                {
                    "name": "out",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "a",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "b",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "c",
                    "description": "",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "The out object",
                "type": "Array"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 178,
            "description": "Creates a new, empty vec2",
            "static": 1,
            "itemtype": "method",
            "name": "create",
            "return": {
                "description": "a new 2D vector",
                "type": "Array"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 191,
            "description": "Creates a new vec2 initialized with values from an existing vector",
            "static": 1,
            "itemtype": "method",
            "name": "clone",
            "params": [
                {
                    "name": "a",
                    "description": "vector to clone",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "a new 2D vector",
                "type": "Array"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 205,
            "description": "Creates a new vec2 initialized with the given values",
            "static": 1,
            "itemtype": "method",
            "name": "fromValues",
            "params": [
                {
                    "name": "x",
                    "description": "X component",
                    "type": "Number"
                },
                {
                    "name": "y",
                    "description": "Y component",
                    "type": "Number"
                }
            ],
            "return": {
                "description": "a new 2D vector",
                "type": "Array"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 220,
            "description": "Copy the values from one vec2 to another",
            "static": 1,
            "itemtype": "method",
            "name": "copy",
            "params": [
                {
                    "name": "out",
                    "description": "the receiving vector",
                    "type": "Array"
                },
                {
                    "name": "a",
                    "description": "the source vector",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "out",
                "type": "Array"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 234,
            "description": "Set the components of a vec2 to the given values",
            "static": 1,
            "itemtype": "method",
            "name": "set",
            "params": [
                {
                    "name": "out",
                    "description": "the receiving vector",
                    "type": "Array"
                },
                {
                    "name": "x",
                    "description": "X component",
                    "type": "Number"
                },
                {
                    "name": "y",
                    "description": "Y component",
                    "type": "Number"
                }
            ],
            "return": {
                "description": "out",
                "type": "Array"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 249,
            "description": "Adds two vec2's",
            "static": 1,
            "itemtype": "method",
            "name": "add",
            "params": [
                {
                    "name": "out",
                    "description": "the receiving vector",
                    "type": "Array"
                },
                {
                    "name": "a",
                    "description": "the first operand",
                    "type": "Array"
                },
                {
                    "name": "b",
                    "description": "the second operand",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "out",
                "type": "Array"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 264,
            "description": "Subtracts two vec2's",
            "static": 1,
            "itemtype": "method",
            "name": "subtract",
            "params": [
                {
                    "name": "out",
                    "description": "the receiving vector",
                    "type": "Array"
                },
                {
                    "name": "a",
                    "description": "the first operand",
                    "type": "Array"
                },
                {
                    "name": "b",
                    "description": "the second operand",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "out",
                "type": "Array"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 279,
            "description": "Alias for vec2.subtract",
            "static": 1,
            "itemtype": "method",
            "name": "sub",
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 286,
            "description": "Multiplies two vec2's",
            "static": 1,
            "itemtype": "method",
            "name": "multiply",
            "params": [
                {
                    "name": "out",
                    "description": "the receiving vector",
                    "type": "Array"
                },
                {
                    "name": "a",
                    "description": "the first operand",
                    "type": "Array"
                },
                {
                    "name": "b",
                    "description": "the second operand",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "out",
                "type": "Array"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 301,
            "description": "Alias for vec2.multiply",
            "static": 1,
            "itemtype": "method",
            "name": "mul",
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 308,
            "description": "Divides two vec2's",
            "static": 1,
            "itemtype": "method",
            "name": "divide",
            "params": [
                {
                    "name": "out",
                    "description": "the receiving vector",
                    "type": "Array"
                },
                {
                    "name": "a",
                    "description": "the first operand",
                    "type": "Array"
                },
                {
                    "name": "b",
                    "description": "the second operand",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "out",
                "type": "Array"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 323,
            "description": "Alias for vec2.divide",
            "static": 1,
            "itemtype": "method",
            "name": "div",
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 330,
            "description": "Scales a vec2 by a scalar number",
            "static": 1,
            "itemtype": "method",
            "name": "scale",
            "params": [
                {
                    "name": "out",
                    "description": "the receiving vector",
                    "type": "Array"
                },
                {
                    "name": "a",
                    "description": "the vector to scale",
                    "type": "Array"
                },
                {
                    "name": "b",
                    "description": "amount to scale the vector by",
                    "type": "Number"
                }
            ],
            "return": {
                "description": "out",
                "type": "Array"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 345,
            "description": "Calculates the euclidian distance between two vec2's",
            "static": 1,
            "itemtype": "method",
            "name": "distance",
            "params": [
                {
                    "name": "a",
                    "description": "the first operand",
                    "type": "Array"
                },
                {
                    "name": "b",
                    "description": "the second operand",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "distance between a and b",
                "type": "Number"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 359,
            "description": "Alias for vec2.distance",
            "static": 1,
            "itemtype": "method",
            "name": "dist",
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 366,
            "description": "Calculates the squared euclidian distance between two vec2's",
            "static": 1,
            "itemtype": "method",
            "name": "squaredDistance",
            "params": [
                {
                    "name": "a",
                    "description": "the first operand",
                    "type": "Array"
                },
                {
                    "name": "b",
                    "description": "the second operand",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "squared distance between a and b",
                "type": "Number"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 380,
            "description": "Alias for vec2.squaredDistance",
            "static": 1,
            "itemtype": "method",
            "name": "sqrDist",
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 387,
            "description": "Calculates the length of a vec2",
            "static": 1,
            "itemtype": "method",
            "name": "length",
            "params": [
                {
                    "name": "a",
                    "description": "vector to calculate length of",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "length of a",
                "type": "Number"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 400,
            "description": "Alias for vec2.length",
            "itemtype": "method",
            "name": "len",
            "static": 1,
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 407,
            "description": "Calculates the squared length of a vec2",
            "static": 1,
            "itemtype": "method",
            "name": "squaredLength",
            "params": [
                {
                    "name": "a",
                    "description": "vector to calculate squared length of",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "squared length of a",
                "type": "Number"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 420,
            "description": "Alias for vec2.squaredLength",
            "static": 1,
            "itemtype": "method",
            "name": "sqrLen",
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 427,
            "description": "Negates the components of a vec2",
            "static": 1,
            "itemtype": "method",
            "name": "negate",
            "params": [
                {
                    "name": "out",
                    "description": "the receiving vector",
                    "type": "Array"
                },
                {
                    "name": "a",
                    "description": "vector to negate",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "out",
                "type": "Array"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 441,
            "description": "Normalize a vec2",
            "static": 1,
            "itemtype": "method",
            "name": "normalize",
            "params": [
                {
                    "name": "out",
                    "description": "the receiving vector",
                    "type": "Array"
                },
                {
                    "name": "a",
                    "description": "vector to normalize",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "out",
                "type": "Array"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 462,
            "description": "Calculates the dot product of two vec2's",
            "static": 1,
            "itemtype": "method",
            "name": "dot",
            "params": [
                {
                    "name": "a",
                    "description": "the first operand",
                    "type": "Array"
                },
                {
                    "name": "b",
                    "description": "the second operand",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "dot product of a and b",
                "type": "Number"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 474,
            "description": "Returns a string representation of a vector",
            "static": 1,
            "itemtype": "method",
            "name": "str",
            "params": [
                {
                    "name": "vec",
                    "description": "vector to represent as a string",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "string representation of the vector",
                "type": "String"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 485,
            "description": "Linearly interpolate/mix two vectors.",
            "static": 1,
            "itemtype": "method",
            "name": "lerp",
            "params": [
                {
                    "name": "out",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "a",
                    "description": "First vector",
                    "type": "Array"
                },
                {
                    "name": "b",
                    "description": "Second vector",
                    "type": "Array"
                },
                {
                    "name": "t",
                    "description": "Lerp factor",
                    "type": "Number"
                }
            ],
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 502,
            "description": "Reflect a vector along a normal.",
            "static": 1,
            "itemtype": "method",
            "name": "reflect",
            "params": [
                {
                    "name": "out",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "vector",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "normal",
                    "description": "",
                    "type": "Array"
                }
            ],
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 516,
            "description": "Get the intersection point between two line segments.",
            "static": 1,
            "itemtype": "method",
            "name": "getLineSegmentsIntersection",
            "params": [
                {
                    "name": "out",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "p0",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "p1",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "p2",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "p3",
                    "description": "",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "True if there was an intersection, otherwise false.",
                "type": "Boolean"
            },
            "class": "vec2"
        },
        {
            "file": "src/math/vec2.js",
            "line": 538,
            "description": "Get the intersection fraction between two line segments. If successful, the intersection is at p0 + t * (p1 - p0)",
            "static": 1,
            "itemtype": "method",
            "name": "getLineSegmentsIntersectionFraction",
            "params": [
                {
                    "name": "p0",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "p1",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "p2",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "p3",
                    "description": "",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "A number between 0 and 1 if there was an intersection, otherwise -1.",
                "type": "Number"
            },
            "class": "vec2"
        },
        {
            "file": "src/objects/Body.js",
            "line": 58,
            "description": "The body identifyer",
            "itemtype": "property",
            "name": "id",
            "type": "{Number}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 65,
            "description": "The world that this body is added to. This property is set to NULL if the body is not added to any world.",
            "itemtype": "property",
            "name": "world",
            "type": "{World}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 72,
            "description": "The shapes of the body.",
            "itemtype": "property",
            "name": "shapes",
            "type": "{Array}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 80,
            "description": "The mass of the body.",
            "itemtype": "property",
            "name": "mass",
            "type": "{number}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 87,
            "description": "The inverse mass of the body.",
            "itemtype": "property",
            "name": "invMass",
            "type": "{number}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 94,
            "description": "The inertia of the body around the Z axis.",
            "itemtype": "property",
            "name": "inertia",
            "type": "{number}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 101,
            "description": "The inverse inertia of the body.",
            "itemtype": "property",
            "name": "invInertia",
            "type": "{number}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 111,
            "description": "Set to true if you want to fix the rotation of the body.",
            "itemtype": "property",
            "name": "fixedRotation",
            "type": "{Boolean}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 118,
            "description": "Set to true if you want to fix the body movement along the X axis. The body will still be able to move along Y.",
            "itemtype": "property",
            "name": "fixedX",
            "type": "Boolean",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 124,
            "description": "Set to true if you want to fix the body movement along the Y axis. The body will still be able to move along X.",
            "itemtype": "property",
            "name": "fixedY",
            "type": "Boolean",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 130,
            "access": "private",
            "tagname": "",
            "itemtype": "property",
            "name": "massMultiplier",
            "type": "Array",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 136,
            "description": "The position of the body",
            "itemtype": "property",
            "name": "position",
            "type": "{Array}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 146,
            "description": "The interpolated position of the body. Use this for rendering.",
            "itemtype": "property",
            "name": "interpolatedPosition",
            "type": "{Array}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 153,
            "description": "The interpolated angle of the body. Use this for rendering.",
            "itemtype": "property",
            "name": "interpolatedAngle",
            "type": "{Number}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 160,
            "description": "The previous position of the body.",
            "itemtype": "property",
            "name": "previousPosition",
            "type": "{Array}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 167,
            "description": "The previous angle of the body.",
            "itemtype": "property",
            "name": "previousAngle",
            "type": "{Number}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 174,
            "description": "The current velocity of the body.",
            "itemtype": "property",
            "name": "velocity",
            "type": "{Array}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 184,
            "description": "Constraint velocity that was added to the body during the last step.",
            "itemtype": "property",
            "name": "vlambda",
            "type": "{Array}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 191,
            "description": "Angular constraint velocity that was added to the body during last step.",
            "itemtype": "property",
            "name": "wlambda",
            "type": "{Array}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 198,
            "description": "The angle of the body, in radians.",
            "itemtype": "property",
            "name": "angle",
            "type": "{number}",
            "example": [
                "\n    // The angle property is not normalized to the interval 0 to 2*pi, it can be any value.\n    // If you need a value between 0 and 2*pi, use the following function to normalize it.\n    function normalizeAngle(angle){\n        angle = angle % (2*Math.PI);\n        if(angle < 0){\n            angle += (2*Math.PI);\n        }\n        return angle;\n    }"
            ],
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 215,
            "description": "The angular velocity of the body, in radians per second.",
            "itemtype": "property",
            "name": "angularVelocity",
            "type": "{number}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 222,
            "description": "The force acting on the body. Since the body force (and {{#crossLink \"Body/angularForce:property\"}}{{/crossLink}}) will be zeroed after each step, so you need to set the force before each step.",
            "itemtype": "property",
            "name": "force",
            "type": "{Array}",
            "example": [
                "\n    // This produces a forcefield of 1 Newton in the positive x direction.\n    for(var i=0; i<numSteps; i++){\n        body.force[0] = 1;\n        world.step(1/60);\n    }",
                "\n    // This will apply a rotational force on the body\n    for(var i=0; i<numSteps; i++){\n        body.angularForce = -3;\n        world.step(1/60);\n    }"
            ],
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 246,
            "description": "The angular force acting on the body. See {{#crossLink \"Body/force:property\"}}{{/crossLink}}.",
            "itemtype": "property",
            "name": "angularForce",
            "type": "{number}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 253,
            "description": "The linear damping acting on the body in the velocity direction. Should be a value between 0 and 1.",
            "itemtype": "property",
            "name": "damping",
            "type": "{Number}",
            "default": "0.1",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 261,
            "description": "The angular force acting on the body. Should be a value between 0 and 1.",
            "itemtype": "property",
            "name": "angularDamping",
            "type": "{Number}",
            "default": "0.1",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 269,
            "description": "The type of motion this body has. Should be one of: {{#crossLink \"Body/STATIC:property\"}}Body.STATIC{{/crossLink}}, {{#crossLink \"Body/DYNAMIC:property\"}}Body.DYNAMIC{{/crossLink}} and {{#crossLink \"Body/KINEMATIC:property\"}}Body.KINEMATIC{{/crossLink}}.\n\n* Static bodies do not move, and they do not respond to forces or collision.\n* Dynamic bodies body can move and respond to collisions and forces.\n* Kinematic bodies only moves according to its .velocity, and does not respond to collisions or force.",
            "itemtype": "property",
            "name": "type",
            "type": "{number}",
            "example": [
                "\n    // Bodies are static by default. Static bodies will never move.\n    var body = new Body();\n    console.log(body.type == Body.STATIC); // true",
                "\n    // By setting the mass of a body to a nonzero number, the body\n    // will become dynamic and will move and interact with other bodies.\n    var dynamicBody = new Body({\n        mass : 1\n    });\n    console.log(dynamicBody.type == Body.DYNAMIC); // true",
                "\n    // Kinematic bodies will only move if you change their velocity.\n    var kinematicBody = new Body({\n        type: Body.KINEMATIC // Type can be set via the options object.\n    });"
            ],
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 308,
            "description": "Bounding circle radius.",
            "itemtype": "property",
            "name": "boundingRadius",
            "type": "{Number}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 315,
            "description": "Bounding box of this body.",
            "itemtype": "property",
            "name": "aabb",
            "type": "{AABB}",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 322,
            "description": "Indicates if the AABB needs update. Update it with {{#crossLink \"Body/updateAABB:method\"}}.updateAABB(){{/crossLink}}.",
            "itemtype": "property",
            "name": "aabbNeedsUpdate",
            "type": "{Boolean}",
            "see": [
                "updateAABB"
            ],
            "example": [
                "\n    // Force update the AABB\n    body.aabbNeedsUpdate = true;\n    body.updateAABB();\n    console.log(body.aabbNeedsUpdate); // false"
            ],
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 336,
            "description": "If true, the body will automatically fall to sleep. Note that you need to enable sleeping in the {{#crossLink \"World\"}}{{/crossLink}} before anything will happen.",
            "itemtype": "property",
            "name": "allowSleep",
            "type": "{Boolean}",
            "default": "true",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 346,
            "description": "One of {{#crossLink \"Body/AWAKE:property\"}}Body.AWAKE{{/crossLink}}, {{#crossLink \"Body/SLEEPY:property\"}}Body.SLEEPY{{/crossLink}} and {{#crossLink \"Body/SLEEPING:property\"}}Body.SLEEPING{{/crossLink}}.\n\nThe body is initially Body.AWAKE. If its velocity norm is below .sleepSpeedLimit, the sleepState will become Body.SLEEPY. If the body continues to be Body.SLEEPY for .sleepTimeLimit seconds, it will fall asleep (Body.SLEEPY).",
            "itemtype": "property",
            "name": "sleepState",
            "type": "{Number}",
            "default": "Body.AWAKE",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 357,
            "description": "If the speed (the norm of the velocity) is smaller than this value, the body is considered sleepy.",
            "itemtype": "property",
            "name": "sleepSpeedLimit",
            "type": "{Number}",
            "default": "0.2",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 365,
            "description": "If the body has been sleepy for this sleepTimeLimit seconds, it is considered sleeping.",
            "itemtype": "property",
            "name": "sleepTimeLimit",
            "type": "{Number}",
            "default": "1",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 373,
            "description": "Gravity scaling factor. If you want the body to ignore gravity, set this to zero. If you want to reverse gravity, set it to -1.",
            "itemtype": "property",
            "name": "gravityScale",
            "type": "Number",
            "default": "1",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 380,
            "description": "Whether to produce contact forces when in contact with other bodies. Note that contacts will be generated, but they will be disabled. That means that this body will move through other bodies, but it will still trigger contact events, etc.",
            "itemtype": "property",
            "name": "collisionResponse",
            "type": "Boolean",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 386,
            "description": "How long the body has been sleeping.",
            "itemtype": "property",
            "name": "idleTime",
            "type": "Number",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 392,
            "description": "The last time when the body went to SLEEPY state.",
            "itemtype": "property",
            "name": "timeLastSleepy",
            "type": "Number",
            "access": "private",
            "tagname": "",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 399,
            "description": "If the body speed exceeds this threshold, CCD (continuous collision detection) will be enabled. Set it to a negative number to disable CCD completely for this body.",
            "itemtype": "property",
            "name": "ccdSpeedThreshold",
            "type": "Number",
            "default": "-1",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 406,
            "description": "The number of iterations that should be used when searching for the time of impact during CCD. A larger number will assure that there's a small penetration on CCD collision, but a small number will give more performance.",
            "itemtype": "property",
            "name": "ccdIterations",
            "type": "Number",
            "default": "10",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 424,
            "access": "private",
            "tagname": "",
            "itemtype": "method",
            "name": "updateSolveMassProperties",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 438,
            "description": "Set the total density of the body",
            "itemtype": "method",
            "name": "setDensity",
            "params": [
                {
                    "name": "density",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 449,
            "description": "Get the total area of all shapes in the body",
            "itemtype": "method",
            "name": "getArea",
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 462,
            "description": "Get the AABB from the body. The AABB is updated if necessary.",
            "itemtype": "method",
            "name": "getAABB",
            "return": {
                "description": "The AABB instance (this.aabb)",
                "type": "AABB"
            },
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 477,
            "description": "Updates the AABB of the Body, and set .aabbNeedsUpdate = false.",
            "itemtype": "method",
            "name": "updateAABB",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 508,
            "description": "Update the bounding radius of the body (this.boundingRadius). Should be done if any of the shape dimensions or positions are changed.",
            "itemtype": "method",
            "name": "updateBoundingRadius",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 529,
            "description": "Add a shape to the body. You can pass a local transform when adding a shape,\nso that the shape gets an offset and angle relative to the body center of mass.\nWill automatically update the mass properties and bounding radius.",
            "itemtype": "method",
            "name": "addShape",
            "params": [
                {
                    "name": "shape",
                    "description": "",
                    "type": "Shape"
                },
                {
                    "name": "offset",
                    "description": "Local body offset of the shape.",
                    "type": "Array",
                    "optional": true
                },
                {
                    "name": "angle",
                    "description": "Local body angle.",
                    "type": "Number",
                    "optional": true
                }
            ],
            "example": [
                "\n    var body = new Body(),\n        shape = new Circle({ radius: 1 });\n\n    // Add the shape to the body, positioned in the center\n    body.addShape(shape);\n\n    // Add another shape to the body, positioned 1 unit length from the body center of mass along the local x-axis.\n    body.addShape(shape,[1,0]);\n\n    // Add another shape to the body, positioned 1 unit length from the body center of mass along the local y-axis, and rotated 90 degrees CCW.\n    body.addShape(shape,[0,1],Math.PI/2);"
            ],
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 574,
            "description": "Remove a shape",
            "itemtype": "method",
            "name": "removeShape",
            "params": [
                {
                    "name": "shape",
                    "description": "",
                    "type": "Shape"
                }
            ],
            "return": {
                "description": "True if the shape was found and removed, else false.",
                "type": "Boolean"
            },
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 593,
            "description": "Updates .inertia, .invMass, .invInertia for this Body. Should be called when\nchanging the structure or mass of the Body.",
            "itemtype": "method",
            "name": "updateMassProperties",
            "example": [
                "\n    body.mass += 1;\n    body.updateMassProperties();"
            ],
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 646,
            "description": "Apply force to a point relative to the center of mass of the body. This could for example be a point on the RigidBody surface. Applying force this way will add to Body.force and Body.angularForce. If relativePoint is zero, the force will be applied directly on the center of mass, and the torque produced will be zero.",
            "itemtype": "method",
            "name": "applyForce",
            "params": [
                {
                    "name": "force",
                    "description": "The force to add.",
                    "type": "Array"
                },
                {
                    "name": "relativePoint",
                    "description": "A world point to apply the force on.",
                    "type": "Array",
                    "optional": true
                }
            ],
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 667,
            "description": "Apply force to a body-local point.",
            "itemtype": "method",
            "name": "applyForceLocal",
            "params": [
                {
                    "name": "localForce",
                    "description": "The force vector to add, oriented in local body space.",
                    "type": "Array"
                },
                {
                    "name": "localPoint",
                    "description": "A point relative to the body in world space. If not given, it is set to zero and all of the impulse will be excerted on the center of mass.",
                    "type": "Array",
                    "optional": true
                }
            ],
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 685,
            "description": "Apply impulse to a point relative to the body. This could for example be a point on the Body surface. An impulse is a force added to a body during a short period of time (impulse = force * time). Impulses will be added to Body.velocity and Body.angularVelocity.",
            "itemtype": "method",
            "name": "applyImpulse",
            "params": [
                {
                    "name": "impulse",
                    "description": "The impulse vector to add, oriented in world space.",
                    "type": "Array"
                },
                {
                    "name": "relativePoint",
                    "description": "A point relative to the body in world space. If not given, it is set to zero and all of the impulse will be excerted on the center of mass.",
                    "type": "Array",
                    "optional": true
                }
            ],
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 715,
            "description": "Apply impulse to a point relative to the body. This could for example be a point on the Body surface. An impulse is a force added to a body during a short period of time (impulse = force * time). Impulses will be added to Body.velocity and Body.angularVelocity.",
            "itemtype": "method",
            "name": "applyImpulseLocal",
            "params": [
                {
                    "name": "impulse",
                    "description": "The impulse vector to add, oriented in world space.",
                    "type": "Array"
                },
                {
                    "name": "relativePoint",
                    "description": "A point relative to the body in world space. If not given, it is set to zero and all of the impulse will be excerted on the center of mass.",
                    "type": "Array",
                    "optional": true
                }
            ],
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 733,
            "description": "Transform a world point to local body frame.",
            "itemtype": "method",
            "name": "toLocalFrame",
            "params": [
                {
                    "name": "out",
                    "description": "The vector to store the result in",
                    "type": "Array"
                },
                {
                    "name": "worldPoint",
                    "description": "The input world point",
                    "type": "Array"
                }
            ],
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 743,
            "description": "Transform a local point to world frame.",
            "itemtype": "method",
            "name": "toWorldFrame",
            "params": [
                {
                    "name": "out",
                    "description": "The vector to store the result in",
                    "type": "Array"
                },
                {
                    "name": "localPoint",
                    "description": "The input local point",
                    "type": "Array"
                }
            ],
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 753,
            "description": "Transform a world point to local body frame.",
            "itemtype": "method",
            "name": "vectorToLocalFrame",
            "params": [
                {
                    "name": "out",
                    "description": "The vector to store the result in",
                    "type": "Array"
                },
                {
                    "name": "worldVector",
                    "description": "The input world vector",
                    "type": "Array"
                }
            ],
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 763,
            "description": "Transform a local point to world frame.",
            "itemtype": "method",
            "name": "vectorToWorldFrame",
            "params": [
                {
                    "name": "out",
                    "description": "The vector to store the result in",
                    "type": "Array"
                },
                {
                    "name": "localVector",
                    "description": "The input local vector",
                    "type": "Array"
                }
            ],
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 773,
            "description": "Reads a polygon shape path, and assembles convex shapes from that and puts them at proper offset points.",
            "itemtype": "method",
            "name": "fromPolygon",
            "params": [
                {
                    "name": "path",
                    "description": "An array of 2d vectors, e.g. [[0,0],[0,1],...] that resembles a concave or convex polygon. The shape must be simple and without holes.",
                    "type": "Array"
                },
                {
                    "name": "options",
                    "description": "",
                    "type": "Object",
                    "optional": true,
                    "props": [
                        {
                            "name": "optimalDecomp",
                            "description": "Set to true if you need optimal decomposition. Warning: very slow for polygons with more than 10 vertices.",
                            "type": "Boolean",
                            "optional": true,
                            "optdefault": "false"
                        },
                        {
                            "name": "skipSimpleCheck",
                            "description": "Set to true if you already know that the path is not intersecting itself.",
                            "type": "Boolean",
                            "optional": true,
                            "optdefault": "false"
                        },
                        {
                            "name": "removeCollinearPoints",
                            "description": "Set to a number (angle threshold value) to remove collinear points, or false to keep all points.",
                            "type": "Boolean|Number",
                            "optional": true,
                            "optdefault": "false"
                        }
                    ]
                }
            ],
            "return": {
                "description": "True on success, else false.",
                "type": "Boolean"
            },
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 858,
            "description": "Moves the shape offsets so their center of mass becomes the body center of mass.",
            "itemtype": "method",
            "name": "adjustCenterOfMass",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 896,
            "description": "Sets the force on the body to zero.",
            "itemtype": "method",
            "name": "setZeroForce",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 919,
            "description": "Apply damping, see <a href=\"http://code.google.com/p/bullet/issues/detail?id=74\">this</a> for details.",
            "itemtype": "method",
            "name": "applyDamping",
            "params": [
                {
                    "name": "dt",
                    "description": "Current time step",
                    "type": "Number"
                }
            ],
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 932,
            "description": "Wake the body up. Normally you should not need this, as the body is automatically awoken at events such as collisions.\nSets the sleepState to {{#crossLink \"Body/AWAKE:property\"}}Body.AWAKE{{/crossLink}} and emits the wakeUp event if the body wasn't awake before.",
            "itemtype": "method",
            "name": "wakeUp",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 946,
            "description": "Force body sleep",
            "itemtype": "method",
            "name": "sleep",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 959,
            "description": "Called every timestep to update internal sleep timer and change sleep state if needed.",
            "itemtype": "method",
            "name": "sleepTick",
            "params": [
                {
                    "name": "time",
                    "description": "The world time in seconds",
                    "type": "Number"
                },
                {
                    "name": "dontSleep",
                    "description": "",
                    "type": "Boolean"
                },
                {
                    "name": "dt",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 994,
            "description": "Check if the body is overlapping another body. Note that this method only works if the body was added to a World and if at least one step was taken.",
            "itemtype": "method",
            "name": "overlaps",
            "params": [
                {
                    "name": "body",
                    "description": "",
                    "type": "Body"
                }
            ],
            "return": {
                "description": "",
                "type": "Boolean"
            },
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 1007,
            "description": "Move the body forward in time given its current velocity.",
            "itemtype": "method",
            "name": "integrate",
            "params": [
                {
                    "name": "dt",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 1138,
            "description": "Get velocity of a point in the body.",
            "itemtype": "method",
            "name": "getVelocityAtPoint",
            "params": [
                {
                    "name": "result",
                    "description": "A vector to store the result in",
                    "type": "Array"
                },
                {
                    "name": "relativePoint",
                    "description": "A world oriented vector, indicating the position of the point to get the velocity from",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "The result vector",
                "type": "Array"
            },
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 1151,
            "itemtype": "event",
            "name": "sleepy",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 1158,
            "itemtype": "event",
            "name": "sleep",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 1165,
            "itemtype": "event",
            "name": "wakeup",
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 1172,
            "description": "Dynamic body.",
            "itemtype": "property",
            "name": "DYNAMIC",
            "type": "{Number}",
            "static": 1,
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 1180,
            "description": "Static body.",
            "itemtype": "property",
            "name": "STATIC",
            "type": "{Number}",
            "static": 1,
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 1188,
            "description": "Kinematic body.",
            "itemtype": "property",
            "name": "KINEMATIC",
            "type": "{Number}",
            "static": 1,
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 1196,
            "itemtype": "property",
            "name": "AWAKE",
            "type": "{Number}",
            "static": 1,
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 1203,
            "itemtype": "property",
            "name": "SLEEPY",
            "type": "{Number}",
            "static": 1,
            "class": "Body"
        },
        {
            "file": "src/objects/Body.js",
            "line": 1210,
            "itemtype": "property",
            "name": "SLEEPING",
            "type": "{Number}",
            "static": 1,
            "class": "Body"
        },
        {
            "file": "src/objects/LinearSpring.js",
            "line": 31,
            "description": "Anchor for bodyA in local bodyA coordinates.",
            "itemtype": "property",
            "name": "localAnchorA",
            "type": "{Array}",
            "class": "LinearSpring"
        },
        {
            "file": "src/objects/LinearSpring.js",
            "line": 38,
            "description": "Anchor for bodyB in local bodyB coordinates.",
            "itemtype": "property",
            "name": "localAnchorB",
            "type": "{Array}",
            "class": "LinearSpring"
        },
        {
            "file": "src/objects/LinearSpring.js",
            "line": 56,
            "description": "Rest length of the spring.",
            "itemtype": "property",
            "name": "restLength",
            "type": "{number}",
            "class": "LinearSpring"
        },
        {
            "file": "src/objects/LinearSpring.js",
            "line": 66,
            "description": "Set the anchor point on body A, using world coordinates.",
            "itemtype": "method",
            "name": "setWorldAnchorA",
            "params": [
                {
                    "name": "worldAnchorA",
                    "description": "",
                    "type": "Array"
                }
            ],
            "class": "LinearSpring"
        },
        {
            "file": "src/objects/LinearSpring.js",
            "line": 75,
            "description": "Set the anchor point on body B, using world coordinates.",
            "itemtype": "method",
            "name": "setWorldAnchorB",
            "params": [
                {
                    "name": "worldAnchorB",
                    "description": "",
                    "type": "Array"
                }
            ],
            "class": "LinearSpring"
        },
        {
            "file": "src/objects/LinearSpring.js",
            "line": 84,
            "description": "Get the anchor point on body A, in world coordinates.",
            "itemtype": "method",
            "name": "getWorldAnchorA",
            "params": [
                {
                    "name": "result",
                    "description": "The vector to store the result in.",
                    "type": "Array"
                }
            ],
            "class": "LinearSpring"
        },
        {
            "file": "src/objects/LinearSpring.js",
            "line": 93,
            "description": "Get the anchor point on body B, in world coordinates.",
            "itemtype": "method",
            "name": "getWorldAnchorB",
            "params": [
                {
                    "name": "result",
                    "description": "The vector to store the result in.",
                    "type": "Array"
                }
            ],
            "class": "LinearSpring"
        },
        {
            "file": "src/objects/LinearSpring.js",
            "line": 112,
            "description": "Apply the spring force to the connected bodies.",
            "itemtype": "method",
            "name": "applyForce",
            "class": "LinearSpring"
        },
        {
            "file": "src/objects/RotationalSpring.js",
            "line": 26,
            "description": "Rest angle of the spring.",
            "itemtype": "property",
            "name": "restAngle",
            "type": "{number}",
            "class": "RotationalSpring"
        },
        {
            "file": "src/objects/RotationalSpring.js",
            "line": 36,
            "description": "Apply the spring force to the connected bodies.",
            "itemtype": "method",
            "name": "applyForce",
            "class": "RotationalSpring"
        },
        {
            "file": "src/objects/Spring.js",
            "line": 27,
            "description": "Stiffness of the spring.",
            "itemtype": "property",
            "name": "stiffness",
            "type": "{number}",
            "class": "Spring"
        },
        {
            "file": "src/objects/Spring.js",
            "line": 34,
            "description": "Damping of the spring.",
            "itemtype": "property",
            "name": "damping",
            "type": "{number}",
            "class": "Spring"
        },
        {
            "file": "src/objects/Spring.js",
            "line": 41,
            "description": "First connected body.",
            "itemtype": "property",
            "name": "bodyA",
            "type": "{Body}",
            "class": "Spring"
        },
        {
            "file": "src/objects/Spring.js",
            "line": 48,
            "description": "Second connected body.",
            "itemtype": "property",
            "name": "bodyB",
            "type": "{Body}",
            "class": "Spring"
        },
        {
            "file": "src/objects/Spring.js",
            "line": 56,
            "description": "Apply the spring force to the connected bodies.",
            "itemtype": "method",
            "name": "applyForce",
            "class": "Spring"
        },
        {
            "file": "src/objects/TopDownVehicle.js",
            "line": 51,
            "itemtype": "property",
            "name": "chassisBody",
            "type": "Body",
            "class": "TopDownVehicle"
        },
        {
            "file": "src/objects/TopDownVehicle.js",
            "line": 56,
            "itemtype": "property",
            "name": "wheels",
            "type": "Array",
            "class": "TopDownVehicle"
        },
        {
            "file": "src/objects/TopDownVehicle.js",
            "line": 72,
            "itemtype": "method",
            "name": "addToWorld",
            "params": [
                {
                    "name": "world",
                    "description": "",
                    "type": "World"
                }
            ],
            "class": "TopDownVehicle"
        },
        {
            "file": "src/objects/TopDownVehicle.js",
            "line": 86,
            "itemtype": "method",
            "name": "removeFromWorld",
            "params": [
                {
                    "name": "world",
                    "description": "",
                    "type": "World"
                }
            ],
            "class": "TopDownVehicle"
        },
        {
            "file": "src/objects/TopDownVehicle.js",
            "line": 101,
            "itemtype": "method",
            "name": "addWheel",
            "params": [
                {
                    "name": "wheelOptions",
                    "description": "",
                    "type": "Object",
                    "optional": true
                }
            ],
            "return": {
                "description": "",
                "type": "WheelConstraint"
            },
            "class": "TopDownVehicle"
        },
        {
            "file": "src/objects/TopDownVehicle.js",
            "line": 112,
            "itemtype": "method",
            "name": "update",
            "class": "TopDownVehicle"
        },
        {
            "file": "src/objects/TopDownVehicle.js",
            "line": 140,
            "itemtype": "property",
            "name": "steerValue",
            "type": "Number",
            "class": "WheelConstraint"
        },
        {
            "file": "src/objects/TopDownVehicle.js",
            "line": 145,
            "itemtype": "property",
            "name": "engineForce",
            "type": "Number",
            "class": "WheelConstraint"
        },
        {
            "file": "src/objects/TopDownVehicle.js",
            "line": 152,
            "itemtype": "property",
            "name": "localForwardVector",
            "type": "Array",
            "class": "WheelConstraint"
        },
        {
            "file": "src/objects/TopDownVehicle.js",
            "line": 160,
            "itemtype": "property",
            "name": "localPosition",
            "type": "Array",
            "class": "WheelConstraint"
        },
        {
            "file": "src/objects/TopDownVehicle.js",
            "line": 179,
            "itemtype": "method",
            "name": "setForwardFriction",
            "class": "WheelConstraint"
        },
        {
            "file": "src/objects/TopDownVehicle.js",
            "line": 186,
            "itemtype": "method",
            "name": "setSideFriction",
            "class": "WheelConstraint"
        },
        {
            "file": "src/objects/TopDownVehicle.js",
            "line": 196,
            "itemtype": "method",
            "name": "getSpeed",
            "class": "WheelConstraint"
        },
        {
            "file": "src/objects/TopDownVehicle.js",
            "line": 207,
            "itemtype": "method",
            "name": "update",
            "class": "WheelConstraint"
        },
        {
            "file": "src/shapes/Box.js",
            "line": 26,
            "description": "Total width of the box",
            "itemtype": "property",
            "name": "width",
            "type": "{Number}",
            "class": "Box"
        },
        {
            "file": "src/shapes/Box.js",
            "line": 33,
            "description": "Total height of the box",
            "itemtype": "property",
            "name": "height",
            "type": "{Number}",
            "class": "Box"
        },
        {
            "file": "src/shapes/Box.js",
            "line": 59,
            "description": "Compute moment of inertia",
            "itemtype": "method",
            "name": "computeMomentOfInertia",
            "params": [
                {
                    "name": "mass",
                    "description": "",
                    "type": "Number"
                }
            ],
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "Box"
        },
        {
            "file": "src/shapes/Box.js",
            "line": 71,
            "description": "Update the bounding radius",
            "itemtype": "method",
            "name": "updateBoundingRadius",
            "class": "Box"
        },
        {
            "file": "src/shapes/Box.js",
            "line": 86,
            "itemtype": "method",
            "name": "computeAABB",
            "params": [
                {
                    "name": "out",
                    "description": "The resulting AABB.",
                    "type": "AABB"
                },
                {
                    "name": "position",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Box"
        },
        {
            "file": "src/shapes/Capsule.js",
            "line": 31,
            "description": "The distance between the end points.",
            "itemtype": "property",
            "name": "length",
            "type": "Number",
            "class": "Capsule"
        },
        {
            "file": "src/shapes/Capsule.js",
            "line": 37,
            "description": "The radius of the capsule.",
            "itemtype": "property",
            "name": "radius",
            "type": "Number",
            "class": "Capsule"
        },
        {
            "file": "src/shapes/Capsule.js",
            "line": 49,
            "description": "Compute the mass moment of inertia of the Capsule.",
            "itemtype": "method",
            "name": "conputeMomentOfInertia",
            "params": [
                {
                    "name": "mass",
                    "description": "",
                    "type": "Number"
                }
            ],
            "return": {
                "description": "",
                "type": "Number"
            },
            "todo": [
                ""
            ],
            "class": "Capsule"
        },
        {
            "file": "src/shapes/Capsule.js",
            "line": 64,
            "itemtype": "method",
            "name": "updateBoundingRadius",
            "class": "Capsule"
        },
        {
            "file": "src/shapes/Capsule.js",
            "line": 71,
            "itemtype": "method",
            "name": "updateArea",
            "class": "Capsule"
        },
        {
            "file": "src/shapes/Capsule.js",
            "line": 80,
            "itemtype": "method",
            "name": "computeAABB",
            "params": [
                {
                    "name": "out",
                    "description": "The resulting AABB.",
                    "type": "AABB"
                },
                {
                    "name": "position",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Capsule"
        },
        {
            "file": "src/shapes/Capsule.js",
            "line": 112,
            "itemtype": "method",
            "name": "raycast",
            "params": [
                {
                    "name": "result",
                    "description": "",
                    "type": "RaycastResult"
                },
                {
                    "name": "ray",
                    "description": "",
                    "type": "Ray"
                },
                {
                    "name": "position",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Capsule"
        },
        {
            "file": "src/shapes/Circle.js",
            "line": 27,
            "description": "The radius of the circle.",
            "itemtype": "property",
            "name": "radius",
            "type": "{number}",
            "class": "Circle"
        },
        {
            "file": "src/shapes/Circle.js",
            "line": 40,
            "itemtype": "method",
            "name": "computeMomentOfInertia",
            "params": [
                {
                    "name": "mass",
                    "description": "",
                    "type": "Number"
                }
            ],
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "Circle"
        },
        {
            "file": "src/shapes/Circle.js",
            "line": 50,
            "itemtype": "method",
            "name": "updateBoundingRadius",
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "Circle"
        },
        {
            "file": "src/shapes/Circle.js",
            "line": 58,
            "itemtype": "method",
            "name": "updateArea",
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "Circle"
        },
        {
            "file": "src/shapes/Circle.js",
            "line": 66,
            "itemtype": "method",
            "name": "computeAABB",
            "params": [
                {
                    "name": "out",
                    "description": "The resulting AABB.",
                    "type": "AABB"
                },
                {
                    "name": "position",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Circle"
        },
        {
            "file": "src/shapes/Circle.js",
            "line": 85,
            "itemtype": "method",
            "name": "raycast",
            "params": [
                {
                    "name": "result",
                    "description": "",
                    "type": "RaycastResult"
                },
                {
                    "name": "ray",
                    "description": "",
                    "type": "Ray"
                },
                {
                    "name": "position",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Circle"
        },
        {
            "file": "src/shapes/Convex.js",
            "line": 32,
            "description": "Vertices defined in the local frame.",
            "itemtype": "property",
            "name": "vertices",
            "type": "{Array}",
            "class": "Convex"
        },
        {
            "file": "src/shapes/Convex.js",
            "line": 47,
            "description": "Axes defined in the local frame.",
            "itemtype": "property",
            "name": "axes",
            "type": "{Array}",
            "class": "Convex"
        },
        {
            "file": "src/shapes/Convex.js",
            "line": 83,
            "description": "The center of mass of the Convex",
            "itemtype": "property",
            "name": "centerOfMass",
            "type": "{Array}",
            "class": "Convex"
        },
        {
            "file": "src/shapes/Convex.js",
            "line": 90,
            "description": "Triangulated version of this convex. The structure is Array of 3-Arrays, and each subarray contains 3 integers, referencing the vertices.",
            "itemtype": "property",
            "name": "triangles",
            "type": "{Array}",
            "class": "Convex"
        },
        {
            "file": "src/shapes/Convex.js",
            "line": 102,
            "description": "The bounding radius of the convex",
            "itemtype": "property",
            "name": "boundingRadius",
            "type": "{Number}",
            "class": "Convex"
        },
        {
            "file": "src/shapes/Convex.js",
            "line": 124,
            "description": "Project a Convex onto a world-oriented axis",
            "itemtype": "method",
            "name": "projectOntoAxis",
            "static": 1,
            "params": [
                {
                    "name": "offset",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "localAxis",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "result",
                    "description": "",
                    "type": "Array"
                }
            ],
            "class": "Convex"
        },
        {
            "file": "src/shapes/Convex.js",
            "line": 177,
            "description": "Update the .triangles property",
            "itemtype": "method",
            "name": "updateTriangles",
            "class": "Convex"
        },
        {
            "file": "src/shapes/Convex.js",
            "line": 216,
            "description": "Update the .centerOfMass property.",
            "itemtype": "method",
            "name": "updateCenterOfMass",
            "class": "Convex"
        },
        {
            "file": "src/shapes/Convex.js",
            "line": 258,
            "description": "Compute the mass moment of inertia of the Convex.",
            "itemtype": "method",
            "name": "computeMomentOfInertia",
            "params": [
                {
                    "name": "mass",
                    "description": "",
                    "type": "Number"
                }
            ],
            "return": {
                "description": "",
                "type": "Number"
            },
            "see": [
                "http://www.gamedev.net/topic/342822-moment-of-inertia-of-a-polygon-2d/"
            ],
            "class": "Convex"
        },
        {
            "file": "src/shapes/Convex.js",
            "line": 280,
            "description": "Updates the .boundingRadius property",
            "itemtype": "method",
            "name": "updateBoundingRadius",
            "class": "Convex"
        },
        {
            "file": "src/shapes/Convex.js",
            "line": 298,
            "description": "Get the area of the triangle spanned by the three points a, b, c. The area is positive if the points are given in counter-clockwise order, otherwise negative.",
            "static": 1,
            "itemtype": "method",
            "name": "triangleArea",
            "params": [
                {
                    "name": "a",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "b",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "c",
                    "description": "",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "Convex"
        },
        {
            "file": "src/shapes/Convex.js",
            "line": 311,
            "description": "Update the .area",
            "itemtype": "method",
            "name": "updateArea",
            "class": "Convex"
        },
        {
            "file": "src/shapes/Convex.js",
            "line": 333,
            "itemtype": "method",
            "name": "computeAABB",
            "params": [
                {
                    "name": "out",
                    "description": "",
                    "type": "AABB"
                },
                {
                    "name": "position",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Convex"
        },
        {
            "file": "src/shapes/Convex.js",
            "line": 347,
            "itemtype": "method",
            "name": "raycast",
            "params": [
                {
                    "name": "result",
                    "description": "",
                    "type": "RaycastResult"
                },
                {
                    "name": "ray",
                    "description": "",
                    "type": "Ray"
                },
                {
                    "name": "position",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Convex"
        },
        {
            "file": "src/shapes/Heightfield.js",
            "line": 53,
            "description": "An array of numbers, or height values, that are spread out along the x axis.",
            "itemtype": "property",
            "name": "heights",
            "type": "Array",
            "class": "Heightfield"
        },
        {
            "file": "src/shapes/Heightfield.js",
            "line": 59,
            "description": "Max value of the heights",
            "itemtype": "property",
            "name": "maxValue",
            "type": "Number",
            "class": "Heightfield"
        },
        {
            "file": "src/shapes/Heightfield.js",
            "line": 65,
            "description": "Max value of the heights",
            "itemtype": "property",
            "name": "minValue",
            "type": "Number",
            "class": "Heightfield"
        },
        {
            "file": "src/shapes/Heightfield.js",
            "line": 71,
            "description": "The width of each element",
            "itemtype": "property",
            "name": "elementWidth",
            "type": "Number",
            "class": "Heightfield"
        },
        {
            "file": "src/shapes/Heightfield.js",
            "line": 87,
            "description": "Update the .minValue and the .maxValue",
            "itemtype": "method",
            "name": "updateMaxMinValues",
            "class": "Heightfield"
        },
        {
            "file": "src/shapes/Heightfield.js",
            "line": 108,
            "itemtype": "method",
            "name": "computeMomentOfInertia",
            "params": [
                {
                    "name": "mass",
                    "description": "",
                    "type": "Number"
                }
            ],
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "Heightfield"
        },
        {
            "file": "src/shapes/Heightfield.js",
            "line": 137,
            "itemtype": "method",
            "name": "computeAABB",
            "params": [
                {
                    "name": "out",
                    "description": "The resulting AABB.",
                    "type": "AABB"
                },
                {
                    "name": "position",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Heightfield"
        },
        {
            "file": "src/shapes/Heightfield.js",
            "line": 151,
            "description": "Get a line segment in the heightfield",
            "itemtype": "method",
            "name": "getLineSegment",
            "params": [
                {
                    "name": "start",
                    "description": "Where to store the resulting start point",
                    "type": "Array"
                },
                {
                    "name": "end",
                    "description": "Where to store the resulting end point",
                    "type": "Array"
                },
                {
                    "name": "i",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Heightfield"
        },
        {
            "file": "src/shapes/Heightfield.js",
            "line": 205,
            "itemtype": "method",
            "name": "raycast",
            "params": [
                {
                    "name": "result",
                    "description": "",
                    "type": "RayResult"
                },
                {
                    "name": "ray",
                    "description": "",
                    "type": "Ray"
                },
                {
                    "name": "position",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Heightfield"
        },
        {
            "file": "src/shapes/Line.js",
            "line": 23,
            "description": "Length of this line",
            "itemtype": "property",
            "name": "length",
            "type": "Number",
            "default": "1",
            "class": "Line"
        },
        {
            "file": "src/shapes/Line.js",
            "line": 46,
            "itemtype": "method",
            "name": "computeAABB",
            "params": [
                {
                    "name": "out",
                    "description": "The resulting AABB.",
                    "type": "AABB"
                },
                {
                    "name": "position",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Line"
        },
        {
            "file": "src/shapes/Line.js",
            "line": 65,
            "itemtype": "method",
            "name": "raycast",
            "params": [
                {
                    "name": "result",
                    "description": "",
                    "type": "RaycastResult"
                },
                {
                    "name": "ray",
                    "description": "",
                    "type": "Ray"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "position",
                    "description": "",
                    "type": "Array"
                }
            ],
            "class": "Line"
        },
        {
            "file": "src/shapes/Particle.js",
            "line": 29,
            "itemtype": "method",
            "name": "computeAABB",
            "params": [
                {
                    "name": "out",
                    "description": "",
                    "type": "AABB"
                },
                {
                    "name": "position",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Particle"
        },
        {
            "file": "src/shapes/Plane.js",
            "line": 22,
            "description": "Compute moment of inertia",
            "itemtype": "method",
            "name": "computeMomentOfInertia",
            "class": "Plane"
        },
        {
            "file": "src/shapes/Plane.js",
            "line": 30,
            "description": "Update the bounding radius",
            "itemtype": "method",
            "name": "updateBoundingRadius",
            "class": "Plane"
        },
        {
            "file": "src/shapes/Plane.js",
            "line": 38,
            "itemtype": "method",
            "name": "computeAABB",
            "params": [
                {
                    "name": "out",
                    "description": "",
                    "type": "AABB"
                },
                {
                    "name": "position",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Plane"
        },
        {
            "file": "src/shapes/Plane.js",
            "line": 95,
            "itemtype": "method",
            "name": "raycast",
            "params": [
                {
                    "name": "result",
                    "description": "",
                    "type": "RayResult"
                },
                {
                    "name": "ray",
                    "description": "",
                    "type": "Ray"
                },
                {
                    "name": "position",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "angle",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Plane"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 21,
            "description": "The body this shape is attached to. A shape can only be attached to a single body.",
            "itemtype": "property",
            "name": "body",
            "type": "Body",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 27,
            "description": "Body-local position of the shape.",
            "itemtype": "property",
            "name": "position",
            "type": "Array",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 36,
            "description": "Body-local angle of the shape.",
            "itemtype": "property",
            "name": "angle",
            "type": "Number",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 42,
            "description": "The type of the shape. One of:\n\n* {{#crossLink \"Shape/CIRCLE:property\"}}Shape.CIRCLE{{/crossLink}}\n* {{#crossLink \"Shape/PARTICLE:property\"}}Shape.PARTICLE{{/crossLink}}\n* {{#crossLink \"Shape/PLANE:property\"}}Shape.PLANE{{/crossLink}}\n* {{#crossLink \"Shape/CONVEX:property\"}}Shape.CONVEX{{/crossLink}}\n* {{#crossLink \"Shape/LINE:property\"}}Shape.LINE{{/crossLink}}\n* {{#crossLink \"Shape/BOX:property\"}}Shape.BOX{{/crossLink}}\n* {{#crossLink \"Shape/CAPSULE:property\"}}Shape.CAPSULE{{/crossLink}}\n* {{#crossLink \"Shape/HEIGHTFIELD:property\"}}Shape.HEIGHTFIELD{{/crossLink}}",
            "itemtype": "property",
            "name": "type",
            "type": "Number",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 58,
            "description": "Shape object identifier.",
            "type": "{Number}",
            "itemtype": "property",
            "name": "id",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 65,
            "description": "Bounding circle radius of this shape",
            "itemtype": "property",
            "name": "boundingRadius",
            "type": "{Number}",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 72,
            "description": "Collision group that this shape belongs to (bit mask). See <a href=\"http://www.aurelienribon.com/blog/2011/07/box2d-tutorial-collision-filtering/\">this tutorial</a>.",
            "itemtype": "property",
            "name": "collisionGroup",
            "type": "{Number}",
            "example": [
                "\n    // Setup bits for each available group\n    var PLAYER = Math.pow(2,0),\n        ENEMY =  Math.pow(2,1),\n        GROUND = Math.pow(2,2)\n\n    // Put shapes into their groups\n    player1Shape.collisionGroup = PLAYER;\n    player2Shape.collisionGroup = PLAYER;\n    enemyShape  .collisionGroup = ENEMY;\n    groundShape .collisionGroup = GROUND;\n\n    // Assign groups that each shape collide with.\n    // Note that the players can collide with ground and enemies, but not with other players.\n    player1Shape.collisionMask = ENEMY | GROUND;\n    player2Shape.collisionMask = ENEMY | GROUND;\n    enemyShape  .collisionMask = PLAYER | GROUND;\n    groundShape .collisionMask = PLAYER | ENEMY;",
                "\n    // How collision check is done\n    if(shapeA.collisionGroup & shapeB.collisionMask)!=0 && (shapeB.collisionGroup & shapeA.collisionMask)!=0){\n        // The shapes will collide\n    }"
            ],
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 103,
            "description": "Whether to produce contact forces when in contact with other bodies. Note that contacts will be generated, but they will be disabled. That means that this shape will move through other body shapes, but it will still trigger contact events, etc.",
            "itemtype": "property",
            "name": "collisionResponse",
            "type": "Boolean",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 109,
            "description": "Collision mask of this shape. See .collisionGroup.",
            "itemtype": "property",
            "name": "collisionMask",
            "type": "{Number}",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 116,
            "description": "Material to use in collisions for this Shape. If this is set to null, the world will use default material properties instead.",
            "itemtype": "property",
            "name": "material",
            "type": "{Material}",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 123,
            "description": "Area of this shape.",
            "itemtype": "property",
            "name": "area",
            "type": "{Number}",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 130,
            "description": "Set to true if you want this shape to be a sensor. A sensor does not generate contacts, but it still reports contact events. This is good if you want to know if a shape is overlapping another shape, without them generating contacts.",
            "itemtype": "property",
            "name": "sensor",
            "type": "Boolean",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 145,
            "static": 1,
            "itemtype": "property",
            "name": "CIRCLE",
            "type": "Number",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 151,
            "static": 1,
            "itemtype": "property",
            "name": "PARTICLE",
            "type": "Number",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 157,
            "static": 1,
            "itemtype": "property",
            "name": "PLANE",
            "type": "Number",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 163,
            "static": 1,
            "itemtype": "property",
            "name": "CONVEX",
            "type": "Number",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 169,
            "static": 1,
            "itemtype": "property",
            "name": "LINE",
            "type": "Number",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 175,
            "static": 1,
            "itemtype": "property",
            "name": "BOX",
            "type": "Number",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 188,
            "static": 1,
            "itemtype": "property",
            "name": "CAPSULE",
            "type": "Number",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 194,
            "static": 1,
            "itemtype": "property",
            "name": "HEIGHTFIELD",
            "type": "Number",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 200,
            "description": "Should return the moment of inertia around the Z axis of the body given the total mass. See <a href=\"http://en.wikipedia.org/wiki/List_of_moments_of_inertia\">Wikipedia's list of moments of inertia</a>.",
            "itemtype": "method",
            "name": "computeMomentOfInertia",
            "params": [
                {
                    "name": "mass",
                    "description": "",
                    "type": "Number"
                }
            ],
            "return": {
                "description": "If the inertia is infinity or if the object simply isn't possible to rotate, return 0.",
                "type": "Number"
            },
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 208,
            "description": "Returns the bounding circle radius of this shape.",
            "itemtype": "method",
            "name": "updateBoundingRadius",
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 215,
            "description": "Update the .area property of the shape.",
            "itemtype": "method",
            "name": "updateArea",
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 223,
            "description": "Compute the world axis-aligned bounding box (AABB) of this shape.",
            "itemtype": "method",
            "name": "computeAABB",
            "params": [
                {
                    "name": "out",
                    "description": "The resulting AABB.",
                    "type": "AABB"
                },
                {
                    "name": "position",
                    "description": "World position of the shape.",
                    "type": "Array"
                },
                {
                    "name": "angle",
                    "description": "World angle of the shape.",
                    "type": "Number"
                }
            ],
            "class": "Shape"
        },
        {
            "file": "src/shapes/Shape.js",
            "line": 234,
            "description": "Perform raycasting on this shape.",
            "itemtype": "method",
            "name": "raycast",
            "params": [
                {
                    "name": "result",
                    "description": "Where to store the resulting data.",
                    "type": "RayResult"
                },
                {
                    "name": "ray",
                    "description": "The Ray that you want to use for raycasting.",
                    "type": "Ray"
                },
                {
                    "name": "position",
                    "description": "World position of the shape (the .position property will be ignored).",
                    "type": "Array"
                },
                {
                    "name": "angle",
                    "description": "World angle of the shape (the .angle property will be ignored).",
                    "type": "Number"
                }
            ],
            "class": "Shape"
        },
        {
            "file": "src/solver/GSSolver.js",
            "line": 22,
            "description": "The max number of iterations to do when solving. More gives better results, but is more expensive.",
            "itemtype": "property",
            "name": "iterations",
            "type": "{Number}",
            "class": "GSSolver"
        },
        {
            "file": "src/solver/GSSolver.js",
            "line": 29,
            "description": "The error tolerance, per constraint. If the total error is below this limit, the solver will stop iterating. Set to zero for as good solution as possible, but to something larger than zero to make computations faster.",
            "itemtype": "property",
            "name": "tolerance",
            "type": "{Number}",
            "default": "1e-7",
            "class": "GSSolver"
        },
        {
            "file": "src/solver/GSSolver.js",
            "line": 42,
            "description": "Set to true to set all right hand side terms to zero when solving. Can be handy for a few applications.",
            "itemtype": "property",
            "name": "useZeroRHS",
            "type": "{Boolean}",
            "todo": [
                "Remove",
                "not used"
            ],
            "class": "GSSolver"
        },
        {
            "file": "src/solver/GSSolver.js",
            "line": 50,
            "description": "Number of solver iterations that are used to approximate normal forces used for friction (F_friction = mu * F_normal). These friction forces will override any other friction forces that are set. If you set frictionIterations = 0, then this feature will be disabled.\n\nUse only frictionIterations > 0 if the approximated normal force (F_normal = mass * gravity) is not good enough. Examples of where it can happen is in space games where gravity is zero, or in tall stacks where the normal force is large at bottom but small at top.",
            "itemtype": "property",
            "name": "frictionIterations",
            "type": "{Number}",
            "default": "0",
            "class": "GSSolver"
        },
        {
            "file": "src/solver/GSSolver.js",
            "line": 61,
            "description": "The number of iterations that were made during the last solve. If .tolerance is zero, this value will always be equal to .iterations, but if .tolerance is larger than zero, and the solver can quit early, then this number will be somewhere between 1 and .iterations.",
            "itemtype": "property",
            "name": "usedIterations",
            "type": "Number",
            "class": "GSSolver"
        },
        {
            "file": "src/solver/GSSolver.js",
            "line": 77,
            "description": "Solve the system of equations",
            "itemtype": "method",
            "name": "solve",
            "params": [
                {
                    "name": "h",
                    "description": "Time step",
                    "type": "Number"
                },
                {
                    "name": "world",
                    "description": "World to solve",
                    "type": "World"
                }
            ],
            "class": "GSSolver"
        },
        {
            "file": "src/solver/Solver.js",
            "line": 19,
            "description": "Current equations in the solver.",
            "itemtype": "property",
            "name": "equations",
            "type": "{Array}",
            "class": "Solver"
        },
        {
            "file": "src/solver/Solver.js",
            "line": 27,
            "description": "Function that is used to sort all equations before each solve.",
            "itemtype": "property",
            "name": "equationSortFunction",
            "type": "{function|boolean}",
            "class": "Solver"
        },
        {
            "file": "src/solver/Solver.js",
            "line": 37,
            "description": "Method to be implemented in each subclass",
            "itemtype": "method",
            "name": "solve",
            "params": [
                {
                    "name": "dt",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "world",
                    "description": "",
                    "type": "World"
                }
            ],
            "class": "Solver"
        },
        {
            "file": "src/solver/Solver.js",
            "line": 49,
            "description": "Solves all constraints in an island.",
            "itemtype": "method",
            "name": "solveIsland",
            "params": [
                {
                    "name": "dt",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "island",
                    "description": "",
                    "type": "Island"
                }
            ],
            "class": "Solver"
        },
        {
            "file": "src/solver/Solver.js",
            "line": 72,
            "description": "Sort all equations using the .equationSortFunction. Should be called by subclasses before solving.",
            "itemtype": "method",
            "name": "sortEquations",
            "class": "Solver"
        },
        {
            "file": "src/solver/Solver.js",
            "line": 82,
            "description": "Add an equation to be solved.",
            "itemtype": "method",
            "name": "addEquation",
            "params": [
                {
                    "name": "eq",
                    "description": "",
                    "type": "Equation"
                }
            ],
            "class": "Solver"
        },
        {
            "file": "src/solver/Solver.js",
            "line": 94,
            "description": "Add equations. Same as .addEquation, but this time the argument is an array of Equations",
            "itemtype": "method",
            "name": "addEquations",
            "params": [
                {
                    "name": "eqs",
                    "description": "",
                    "type": "Array"
                }
            ],
            "class": "Solver"
        },
        {
            "file": "src/solver/Solver.js",
            "line": 110,
            "description": "Remove an equation.",
            "itemtype": "method",
            "name": "removeEquation",
            "params": [
                {
                    "name": "eq",
                    "description": "",
                    "type": "Equation"
                }
            ],
            "class": "Solver"
        },
        {
            "file": "src/solver/Solver.js",
            "line": 123,
            "description": "Remove all currently added equations.",
            "itemtype": "method",
            "name": "removeAllEquations",
            "class": "Solver"
        },
        {
            "file": "src/utils/ContactEquationPool.js",
            "line": 15,
            "itemtype": "method",
            "name": "create",
            "return": {
                "description": "",
                "type": "ContactEquation"
            },
            "class": "OverlapKeeper"
        },
        {
            "file": "src/utils/ContactEquationPool.js",
            "line": 23,
            "itemtype": "method",
            "name": "destroy",
            "params": [
                {
                    "name": "equation",
                    "description": "",
                    "type": "ContactEquation"
                }
            ],
            "return": {
                "description": "",
                "type": "ContactEquationPool"
            },
            "class": "OverlapKeeper"
        },
        {
            "file": "src/utils/FrictionEquationPool.js",
            "line": 15,
            "itemtype": "method",
            "name": "create",
            "return": {
                "description": "",
                "type": "FrictionEquation"
            },
            "class": "OverlapKeeper"
        },
        {
            "file": "src/utils/FrictionEquationPool.js",
            "line": 23,
            "itemtype": "method",
            "name": "destroy",
            "params": [
                {
                    "name": "equation",
                    "description": "",
                    "type": "FrictionEquation"
                }
            ],
            "return": {
                "description": "",
                "type": "FrictionEquationPool"
            },
            "class": "OverlapKeeper"
        },
        {
            "file": "src/utils/IslandNodePool.js",
            "line": 15,
            "itemtype": "method",
            "name": "create",
            "return": {
                "description": "",
                "type": "IslandNode"
            },
            "class": "OverlapKeeper"
        },
        {
            "file": "src/utils/IslandNodePool.js",
            "line": 23,
            "itemtype": "method",
            "name": "destroy",
            "params": [
                {
                    "name": "node",
                    "description": "",
                    "type": "IslandNode"
                }
            ],
            "return": {
                "description": "",
                "type": "IslandNodePool"
            },
            "class": "OverlapKeeper"
        },
        {
            "file": "src/utils/IslandPool.js",
            "line": 15,
            "itemtype": "method",
            "name": "create",
            "return": {
                "description": "",
                "type": "Island"
            },
            "class": "OverlapKeeper"
        },
        {
            "file": "src/utils/IslandPool.js",
            "line": 23,
            "itemtype": "method",
            "name": "destroy",
            "params": [
                {
                    "name": "island",
                    "description": "",
                    "type": "Island"
                }
            ],
            "return": {
                "description": "",
                "type": "IslandPool"
            },
            "class": "OverlapKeeper"
        },
        {
            "file": "src/utils/OverlapKeeper.js",
            "line": 21,
            "description": "Ticks one step forward in time. This will move the current overlap state to the \"old\" overlap state, and create a new one as current.",
            "itemtype": "method",
            "name": "tick",
            "class": "OverlapKeeper"
        },
        {
            "file": "src/utils/OverlapKeeper.js",
            "line": 51,
            "itemtype": "method",
            "name": "setOverlapping",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "shapeA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "shapeB",
                    "description": "",
                    "type": "Body"
                }
            ],
            "class": "OverlapKeeper"
        },
        {
            "file": "src/utils/OverlapKeeper.js",
            "line": 78,
            "description": "Checks if two bodies are currently overlapping.",
            "itemtype": "method",
            "name": "bodiesAreOverlapping",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                }
            ],
            "return": {
                "description": "",
                "type": "Boolean"
            },
            "class": "OverlapKeeper"
        },
        {
            "file": "src/utils/OverlapKeeperRecord.js",
            "line": 13,
            "itemtype": "property",
            "name": "shapeA",
            "type": "Shape",
            "class": "OverlapKeeperRecord"
        },
        {
            "file": "src/utils/OverlapKeeperRecord.js",
            "line": 17,
            "itemtype": "property",
            "name": "shapeB",
            "type": "Shape",
            "class": "OverlapKeeperRecord"
        },
        {
            "file": "src/utils/OverlapKeeperRecord.js",
            "line": 21,
            "itemtype": "property",
            "name": "bodyA",
            "type": "Body",
            "class": "OverlapKeeperRecord"
        },
        {
            "file": "src/utils/OverlapKeeperRecord.js",
            "line": 25,
            "itemtype": "property",
            "name": "bodyB",
            "type": "Body",
            "class": "OverlapKeeperRecord"
        },
        {
            "file": "src/utils/OverlapKeeperRecord.js",
            "line": 31,
            "description": "Set the data for the record",
            "itemtype": "method",
            "name": "set",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "shapeA",
                    "description": "",
                    "type": "Shape"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "shapeB",
                    "description": "",
                    "type": "Shape"
                }
            ],
            "class": "OverlapKeeperRecord"
        },
        {
            "file": "src/utils/OverlapKeeperRecordPool.js",
            "line": 15,
            "itemtype": "method",
            "name": "create",
            "return": {
                "description": "",
                "type": "OverlapKeeperRecord"
            },
            "class": "Object pooling utility."
        },
        {
            "file": "src/utils/OverlapKeeperRecordPool.js",
            "line": 23,
            "itemtype": "method",
            "name": "destroy",
            "params": [
                {
                    "name": "record",
                    "description": "",
                    "type": "OverlapKeeperRecord"
                }
            ],
            "return": {
                "description": "",
                "type": "OverlapKeeperRecordPool"
            },
            "class": "Object pooling utility."
        },
        {
            "file": "src/utils/Pool.js",
            "line": 9,
            "itemtype": "property",
            "name": "objects",
            "type": "{Array}",
            "class": "Object pooling utility."
        },
        {
            "file": "src/utils/Pool.js",
            "line": 20,
            "itemtype": "method",
            "name": "resize",
            "params": [
                {
                    "name": "size",
                    "description": "",
                    "type": "Number"
                }
            ],
            "return": {
                "description": "Self, for chaining",
                "type": "Pool"
            },
            "class": "Object pooling utility."
        },
        {
            "file": "src/utils/Pool.js",
            "line": 39,
            "description": "Get an object from the pool or create a new instance.",
            "itemtype": "method",
            "name": "get",
            "return": {
                "description": "",
                "type": "Object"
            },
            "class": "Object pooling utility."
        },
        {
            "file": "src/utils/Pool.js",
            "line": 49,
            "description": "Clean up and put the object back into the pool for later use.",
            "itemtype": "method",
            "name": "release",
            "params": [
                {
                    "name": "object",
                    "description": "",
                    "type": "Object"
                }
            ],
            "return": {
                "description": "Self for chaining",
                "type": "Pool"
            },
            "class": "Object pooling utility."
        },
        {
            "file": "src/utils/TupleDictionary.js",
            "line": 11,
            "description": "The data storage",
            "itemtype": "property",
            "name": "data",
            "type": "{Object}",
            "class": "TupleDictionary"
        },
        {
            "file": "src/utils/TupleDictionary.js",
            "line": 18,
            "description": "Keys that are currently used.",
            "itemtype": "property",
            "name": "keys",
            "type": "Array",
            "class": "TupleDictionary"
        },
        {
            "file": "src/utils/TupleDictionary.js",
            "line": 25,
            "description": "Generate a key given two integers",
            "itemtype": "method",
            "name": "getKey",
            "params": [
                {
                    "name": "i",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "j",
                    "description": "",
                    "type": "Number"
                }
            ],
            "return": {
                "description": "",
                "type": "String"
            },
            "class": "TupleDictionary"
        },
        {
            "file": "src/utils/TupleDictionary.js",
            "line": 47,
            "itemtype": "method",
            "name": "getByKey",
            "params": [
                {
                    "name": "key",
                    "description": "",
                    "type": "Number"
                }
            ],
            "return": {
                "description": "",
                "type": "Object"
            },
            "class": "TupleDictionary"
        },
        {
            "file": "src/utils/TupleDictionary.js",
            "line": 57,
            "itemtype": "method",
            "name": "get",
            "params": [
                {
                    "name": "i",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "j",
                    "description": "",
                    "type": "Number"
                }
            ],
            "return": {
                "description": "",
                "type": "Number"
            },
            "class": "TupleDictionary"
        },
        {
            "file": "src/utils/TupleDictionary.js",
            "line": 67,
            "description": "Set a value.",
            "itemtype": "method",
            "name": "set",
            "params": [
                {
                    "name": "i",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "j",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "value",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "TupleDictionary"
        },
        {
            "file": "src/utils/TupleDictionary.js",
            "line": 91,
            "description": "Remove all data.",
            "itemtype": "method",
            "name": "reset",
            "class": "TupleDictionary"
        },
        {
            "file": "src/utils/TupleDictionary.js",
            "line": 107,
            "description": "Copy another TupleDictionary. Note that all data in this dictionary will be removed.",
            "itemtype": "method",
            "name": "copy",
            "params": [
                {
                    "name": "dict",
                    "description": "The TupleDictionary to copy into this one.",
                    "type": "TupleDictionary"
                }
            ],
            "class": "TupleDictionary"
        },
        {
            "file": "src/utils/Utils.js",
            "line": 12,
            "description": "Append the values in array b to the array a. See <a href=\"http://stackoverflow.com/questions/1374126/how-to-append-an-array-to-an-existing-javascript-array/1374131#1374131\">this</a> for an explanation.",
            "itemtype": "method",
            "name": "appendArray",
            "static": 1,
            "params": [
                {
                    "name": "a",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "b",
                    "description": "",
                    "type": "Array"
                }
            ],
            "class": "Utils"
        },
        {
            "file": "src/utils/Utils.js",
            "line": 29,
            "description": "Garbage free Array.splice(). Does not allocate a new array.",
            "itemtype": "method",
            "name": "splice",
            "static": 1,
            "params": [
                {
                    "name": "array",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "index",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "howmany",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "Utils"
        },
        {
            "file": "src/utils/Utils.js",
            "line": 45,
            "description": "The array type to use for internal numeric computations throughout the library. Float32Array is used if it is available, but falls back on Array. If you want to set array type manually, inject it via the global variable P2_ARRAY_TYPE. See example below.",
            "static": 1,
            "itemtype": "property",
            "name": "ARRAY_TYPE",
            "type": "Function",
            "example": [
                "\n    <script>\n        <!-- Inject your preferred array type before loading p2.js -->\n        P2_ARRAY_TYPE = Array;\n    </script>\n    <script src=\"p2.js\"></script>"
            ],
            "class": "Utils"
        },
        {
            "file": "src/utils/Utils.js",
            "line": 64,
            "description": "Extend an object with the properties of another",
            "static": 1,
            "itemtype": "method",
            "name": "extend",
            "params": [
                {
                    "name": "a",
                    "description": "",
                    "type": "Object"
                },
                {
                    "name": "b",
                    "description": "",
                    "type": "Object"
                }
            ],
            "class": "Utils"
        },
        {
            "file": "src/utils/Utils.js",
            "line": 77,
            "description": "Extend an options object with default values.",
            "static": 1,
            "itemtype": "method",
            "name": "defaults",
            "params": [
                {
                    "name": "options",
                    "description": "The options object. May be falsy: in this case, a new object is created and returned.",
                    "type": "Object"
                },
                {
                    "name": "defaults",
                    "description": "An object containing default values.",
                    "type": "Object"
                }
            ],
            "return": {
                "description": "The modified options object.",
                "type": "Object"
            },
            "class": "Utils"
        },
        {
            "file": "src/world/Island.js",
            "line": 12,
            "description": "Current equations in this island.",
            "itemtype": "property",
            "name": "equations",
            "type": "{Array}",
            "class": "Island"
        },
        {
            "file": "src/world/Island.js",
            "line": 19,
            "description": "Current bodies in this island.",
            "itemtype": "property",
            "name": "bodies",
            "type": "{Array}",
            "class": "Island"
        },
        {
            "file": "src/world/Island.js",
            "line": 27,
            "description": "Clean this island from bodies and equations.",
            "itemtype": "method",
            "name": "reset",
            "class": "Island"
        },
        {
            "file": "src/world/Island.js",
            "line": 37,
            "description": "Get all unique bodies in this island.",
            "itemtype": "method",
            "name": "getBodies",
            "return": {
                "description": "An array of Body",
                "type": "Array"
            },
            "class": "Island"
        },
        {
            "file": "src/world/Island.js",
            "line": 60,
            "description": "Check if the entire island wants to sleep.",
            "itemtype": "method",
            "name": "wantsToSleep",
            "return": {
                "description": "",
                "type": "Boolean"
            },
            "class": "Island"
        },
        {
            "file": "src/world/Island.js",
            "line": 75,
            "description": "Make all bodies in the island sleep.",
            "itemtype": "method",
            "name": "sleep",
            "class": "Island"
        },
        {
            "file": "src/world/IslandManager.js",
            "line": 20,
            "itemtype": "property",
            "name": "nodePool",
            "type": "{IslandNodePool}",
            "class": "IslandManager"
        },
        {
            "file": "src/world/IslandManager.js",
            "line": 26,
            "itemtype": "property",
            "name": "islandPool",
            "type": "{IslandPool}",
            "class": "IslandManager"
        },
        {
            "file": "src/world/IslandManager.js",
            "line": 32,
            "description": "The equations to split. Manually fill this array before running .split().",
            "itemtype": "property",
            "name": "equations",
            "type": "Array",
            "class": "IslandManager"
        },
        {
            "file": "src/world/IslandManager.js",
            "line": 38,
            "description": "The resulting {{#crossLink \"Island\"}}{{/crossLink}}s.",
            "itemtype": "property",
            "name": "islands",
            "type": "Array",
            "class": "IslandManager"
        },
        {
            "file": "src/world/IslandManager.js",
            "line": 44,
            "description": "The resulting graph nodes.",
            "itemtype": "property",
            "name": "nodes",
            "type": "Array",
            "class": "IslandManager"
        },
        {
            "file": "src/world/IslandManager.js",
            "line": 50,
            "description": "The node queue, used when traversing the graph of nodes.",
            "access": "private",
            "tagname": "",
            "itemtype": "property",
            "name": "queue",
            "type": "Array",
            "class": "IslandManager"
        },
        {
            "file": "src/world/IslandManager.js",
            "line": 58,
            "description": "Get an unvisited node from a list of nodes.",
            "static": 1,
            "itemtype": "method",
            "name": "getUnvisitedNode",
            "params": [
                {
                    "name": "nodes",
                    "description": "",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "The node if found, else false.",
                "type": "IslandNode|boolean"
            },
            "class": "IslandManager"
        },
        {
            "file": "src/world/IslandManager.js",
            "line": 76,
            "description": "Visit a node.",
            "itemtype": "method",
            "name": "visit",
            "params": [
                {
                    "name": "node",
                    "description": "",
                    "type": "IslandNode"
                },
                {
                    "name": "bds",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "eqs",
                    "description": "",
                    "type": "Array"
                }
            ],
            "class": "IslandManager"
        },
        {
            "file": "src/world/IslandManager.js",
            "line": 94,
            "description": "Runs the search algorithm, starting at a root node. The resulting bodies and equations will be stored in the provided arrays.",
            "itemtype": "method",
            "name": "bfs",
            "params": [
                {
                    "name": "root",
                    "description": "The node to start from",
                    "type": "IslandNode"
                },
                {
                    "name": "bds",
                    "description": "An array to append resulting Bodies to.",
                    "type": "Array"
                },
                {
                    "name": "eqs",
                    "description": "An array to append resulting Equations to.",
                    "type": "Array"
                }
            ],
            "class": "IslandManager"
        },
        {
            "file": "src/world/IslandManager.js",
            "line": 132,
            "description": "Split the world into independent islands. The result is stored in .islands.",
            "itemtype": "method",
            "name": "split",
            "params": [
                {
                    "name": "world",
                    "description": "",
                    "type": "World"
                }
            ],
            "return": {
                "description": "The generated islands",
                "type": "Array"
            },
            "class": "IslandManager"
        },
        {
            "file": "src/world/IslandNode.js",
            "line": 11,
            "description": "The body that is contained in this node.",
            "itemtype": "property",
            "name": "body",
            "type": "Body",
            "class": "IslandNode"
        },
        {
            "file": "src/world/IslandNode.js",
            "line": 17,
            "description": "Neighboring IslandNodes",
            "itemtype": "property",
            "name": "neighbors",
            "type": "Array",
            "class": "IslandNode"
        },
        {
            "file": "src/world/IslandNode.js",
            "line": 23,
            "description": "Equations connected to this node.",
            "itemtype": "property",
            "name": "equations",
            "type": "Array",
            "class": "IslandNode"
        },
        {
            "file": "src/world/IslandNode.js",
            "line": 29,
            "description": "If this node was visiting during the graph traversal.",
            "itemtype": "property",
            "name": "visited",
            "type": "{Boolean}",
            "class": "IslandNode"
        },
        {
            "file": "src/world/IslandNode.js",
            "line": 37,
            "description": "Clean this node from bodies and equations.",
            "itemtype": "method",
            "name": "reset",
            "class": "IslandNode"
        },
        {
            "file": "src/world/World.js",
            "line": 59,
            "description": "All springs in the world. To add a spring to the world, use {{#crossLink \"World/addSpring:method\"}}{{/crossLink}}.",
            "itemtype": "property",
            "name": "springs",
            "type": "{Array}",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 67,
            "description": "All bodies in the world. To add a body to the world, use {{#crossLink \"World/addBody:method\"}}{{/crossLink}}.",
            "itemtype": "property",
            "name": "bodies",
            "type": "Array",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 73,
            "description": "Disabled body collision pairs. See {{#crossLink \"World/disableBodyCollision:method\"}}.",
            "access": "private",
            "tagname": "",
            "itemtype": "property",
            "name": "disabledBodyCollisionPairs",
            "type": "Array",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 80,
            "description": "The solver used to satisfy constraints and contacts. Default is {{#crossLink \"GSSolver\"}}{{/crossLink}}.",
            "itemtype": "property",
            "name": "solver",
            "type": "Solver",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 86,
            "description": "The narrowphase to use to generate contacts.",
            "itemtype": "property",
            "name": "narrowphase",
            "type": "{Narrowphase}",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 94,
            "description": "The island manager of this world.",
            "itemtype": "property",
            "name": "islandManager",
            "type": "IslandManager",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 100,
            "description": "Gravity in the world. This is applied on all bodies in the beginning of each step().",
            "itemtype": "property",
            "name": "gravity",
            "type": "{Array}",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 111,
            "description": "Gravity to use when approximating the friction max force (mu*mass*gravity).",
            "itemtype": "property",
            "name": "frictionGravity",
            "type": "Number",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 117,
            "description": "Set to true if you want .frictionGravity to be automatically set to the length of .gravity.",
            "itemtype": "property",
            "name": "useWorldGravityAsFrictionGravity",
            "type": "Boolean",
            "default": "true",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 124,
            "description": "If the length of .gravity is zero, and .useWorldGravityAsFrictionGravity=true, then switch to using .frictionGravity for friction instead. This fallback is useful for gravityless games.",
            "itemtype": "property",
            "name": "useFrictionGravityOnZeroGravity",
            "type": "Boolean",
            "default": "true",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 131,
            "description": "The broadphase algorithm to use.",
            "itemtype": "property",
            "name": "broadphase",
            "type": "{Broadphase}",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 140,
            "description": "User-added constraints.",
            "itemtype": "property",
            "name": "constraints",
            "type": "{Array}",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 148,
            "description": "Dummy default material in the world, used in .defaultContactMaterial",
            "itemtype": "property",
            "name": "defaultMaterial",
            "type": "Material",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 154,
            "description": "The default contact material to use, if no contact material was set for the colliding materials.",
            "itemtype": "property",
            "name": "defaultContactMaterial",
            "type": "ContactMaterial",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 160,
            "description": "For keeping track of what time step size we used last step",
            "itemtype": "property",
            "name": "lastTimeStep",
            "type": "{Number}",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 167,
            "description": "Enable to automatically apply spring forces each step.",
            "itemtype": "property",
            "name": "applySpringForces",
            "type": "{Boolean}",
            "default": "true",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 175,
            "description": "Enable to automatically apply body damping each step.",
            "itemtype": "property",
            "name": "applyDamping",
            "type": "{Boolean}",
            "default": "true",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 183,
            "description": "Enable to automatically apply gravity each step.",
            "itemtype": "property",
            "name": "applyGravity",
            "type": "{Boolean}",
            "default": "true",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 191,
            "description": "Enable/disable constraint solving in each step.",
            "itemtype": "property",
            "name": "solveConstraints",
            "type": "{Boolean}",
            "default": "true",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 199,
            "description": "The ContactMaterials added to the World.",
            "itemtype": "property",
            "name": "contactMaterials",
            "type": "{Array}",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 206,
            "description": "World time.",
            "itemtype": "property",
            "name": "time",
            "type": "{Number}",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 214,
            "description": "Is true during step().",
            "itemtype": "property",
            "name": "stepping",
            "type": "Boolean",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 220,
            "description": "Bodies that are scheduled to be removed at the end of the step.",
            "itemtype": "property",
            "name": "bodiesToBeRemoved",
            "type": "Array",
            "access": "private",
            "tagname": "",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 227,
            "description": "Whether to enable island splitting. Island splitting can be an advantage for both precision and performance. See {{#crossLink \"IslandManager\"}}{{/crossLink}}.",
            "itemtype": "property",
            "name": "islandSplit",
            "type": "Boolean",
            "default": "true",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 234,
            "description": "Set to true if you want to the world to emit the \"impact\" event. Turning this off could improve performance.",
            "itemtype": "property",
            "name": "emitImpactEvent",
            "type": "{Boolean}",
            "default": "true",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 246,
            "description": "Fired after the step().",
            "itemtype": "event",
            "name": "postStep",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 254,
            "description": "Fired when a body is added to the world.",
            "itemtype": "event",
            "name": "addBody",
            "params": [
                {
                    "name": "body",
                    "description": "",
                    "type": "Body"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 264,
            "description": "Fired when a body is removed from the world.",
            "itemtype": "event",
            "name": "removeBody",
            "params": [
                {
                    "name": "body",
                    "description": "",
                    "type": "Body"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 274,
            "description": "Fired when a spring is added to the world.",
            "itemtype": "event",
            "name": "addSpring",
            "params": [
                {
                    "name": "spring",
                    "description": "",
                    "type": "Spring"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 284,
            "description": "Fired when a first contact is created between two bodies. This event is fired after the step has been done.",
            "itemtype": "event",
            "name": "impact",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 299,
            "description": "Fired after the Broadphase has collected collision pairs in the world.\nInside the event handler, you can modify the pairs array as you like, to\nprevent collisions between objects that you don't want.",
            "itemtype": "event",
            "name": "postBroadphase",
            "params": [
                {
                    "name": "pairs",
                    "description": "An array of collision pairs. If this array is [body1,body2,body3,body4], then the body pairs 1,2 and 3,4 would advance to narrowphase.",
                    "type": "Array"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 311,
            "description": "How to deactivate bodies during simulation. Possible modes are: {{#crossLink \"World/NO_SLEEPING:property\"}}World.NO_SLEEPING{{/crossLink}}, {{#crossLink \"World/BODY_SLEEPING:property\"}}World.BODY_SLEEPING{{/crossLink}} and {{#crossLink \"World/ISLAND_SLEEPING:property\"}}World.ISLAND_SLEEPING{{/crossLink}}.\nIf sleeping is enabled, you might need to {{#crossLink \"Body/wakeUp:method\"}}wake up{{/crossLink}} the bodies if they fall asleep when they shouldn't. If you want to enable sleeping in the world, but want to disable it for a particular body, see {{#crossLink \"Body/allowSleep:property\"}}Body.allowSleep{{/crossLink}}.",
            "itemtype": "property",
            "name": "sleepMode",
            "type": "{number}",
            "default": "World.NO_SLEEPING",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 320,
            "description": "Fired when two shapes starts start to overlap. Fired in the narrowphase, during step.",
            "itemtype": "event",
            "name": "beginContact",
            "params": [
                {
                    "name": "shapeA",
                    "description": "",
                    "type": "Shape"
                },
                {
                    "name": "shapeB",
                    "description": "",
                    "type": "Shape"
                },
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "contactEquations",
                    "description": "",
                    "type": "Array"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 338,
            "description": "Fired when two shapes stop overlapping, after the narrowphase (during step).",
            "itemtype": "event",
            "name": "endContact",
            "params": [
                {
                    "name": "shapeA",
                    "description": "",
                    "type": "Shape"
                },
                {
                    "name": "shapeB",
                    "description": "",
                    "type": "Shape"
                },
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 354,
            "description": "Fired just before equations are added to the solver to be solved. Can be used to control what equations goes into the solver.",
            "itemtype": "event",
            "name": "preSolve",
            "params": [
                {
                    "name": "contactEquations",
                    "description": "An array of contacts to be solved.",
                    "type": "Array"
                },
                {
                    "name": "frictionEquations",
                    "description": "An array of friction equations to be solved.",
                    "type": "Array"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 370,
            "itemtype": "property",
            "name": "overlapKeeper",
            "type": "OverlapKeeper",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 378,
            "description": "Never deactivate bodies.",
            "static": 1,
            "itemtype": "property",
            "name": "NO_SLEEPING",
            "type": "Number",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 385,
            "description": "Deactivate individual bodies if they are sleepy.",
            "static": 1,
            "itemtype": "property",
            "name": "BODY_SLEEPING",
            "type": "Number",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 392,
            "description": "Deactivates bodies that are in contact, if all of them are sleepy. Note that you must enable {{#crossLink \"World/islandSplit:property\"}}.islandSplit{{/crossLink}} for this to work.",
            "static": 1,
            "itemtype": "property",
            "name": "ISLAND_SLEEPING",
            "type": "Number",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 399,
            "description": "Add a constraint to the simulation.",
            "itemtype": "method",
            "name": "addConstraint",
            "params": [
                {
                    "name": "constraint",
                    "description": "",
                    "type": "Constraint"
                }
            ],
            "example": [
                "\n    var constraint = new LockConstraint(bodyA, bodyB);\n    world.addConstraint(constraint);"
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 412,
            "description": "Add a ContactMaterial to the simulation.",
            "itemtype": "method",
            "name": "addContactMaterial",
            "params": [
                {
                    "name": "contactMaterial",
                    "description": "",
                    "type": "ContactMaterial"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 421,
            "description": "Removes a contact material",
            "itemtype": "method",
            "name": "removeContactMaterial",
            "params": [
                {
                    "name": "cm",
                    "description": "",
                    "type": "ContactMaterial"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 434,
            "description": "Get a contact material given two materials",
            "itemtype": "method",
            "name": "getContactMaterial",
            "params": [
                {
                    "name": "materialA",
                    "description": "",
                    "type": "Material"
                },
                {
                    "name": "materialB",
                    "description": "",
                    "type": "Material"
                }
            ],
            "return": {
                "description": "The matching ContactMaterial, or false on fail.",
                "type": "ContactMaterial"
            },
            "todo": [
                "Use faster hash map to lookup from material id's"
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 454,
            "description": "Removes a constraint",
            "itemtype": "method",
            "name": "removeConstraint",
            "params": [
                {
                    "name": "constraint",
                    "description": "",
                    "type": "Constraint"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 479,
            "description": "Step the physics world forward in time.\n\nThere are two modes. The simple mode is fixed timestepping without interpolation. In this case you only use the first argument. The second case uses interpolation. In that you also provide the time since the function was last used, as well as the maximum fixed timesteps to take.",
            "itemtype": "method",
            "name": "step",
            "params": [
                {
                    "name": "dt",
                    "description": "The fixed time step size to use.",
                    "type": "Number"
                },
                {
                    "name": "timeSinceLastCalled",
                    "description": "The time elapsed since the function was last called.",
                    "type": "Number",
                    "optional": true,
                    "optdefault": "0"
                },
                {
                    "name": "maxSubSteps",
                    "description": "Maximum number of fixed steps to take per function call.",
                    "type": "Number",
                    "optional": true,
                    "optdefault": "10"
                }
            ],
            "example": [
                "\n    // Simple fixed timestepping without interpolation\n    var fixedTimeStep = 1 / 60;\n    var world = new World();\n    var body = new Body({ mass: 1 });\n    world.addBody(body);\n\n    function animate(){\n        requestAnimationFrame(animate);\n        world.step(fixedTimeStep);\n        renderBody(body.position, body.angle);\n    }\n\n    // Start animation loop\n    requestAnimationFrame(animate);",
                "\n    // Fixed timestepping with interpolation\n    var maxSubSteps = 10;\n    var lastTimeSeconds;\n\n    function animate(t){\n        requestAnimationFrame(animate);\n        timeSeconds = t / 1000;\n        lastTimeSeconds = lastTimeSeconds || timeSeconds;\n\n        deltaTime = timeSeconds - lastTimeSeconds;\n        world.step(fixedTimeStep, deltaTime, maxSubSteps);\n\n        renderBody(body.interpolatedPosition, body.interpolatedAngle);\n    }\n\n    // Start animation loop\n    requestAnimationFrame(animate);"
            ],
            "see": [
                "http://bulletphysics.org/mediawiki-1.5.8/index.php/Stepping_The_World"
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 560,
            "description": "Make a fixed step.",
            "itemtype": "method",
            "name": "internalStep",
            "params": [
                {
                    "name": "dt",
                    "description": "",
                    "type": "Number"
                }
            ],
            "access": "private",
            "tagname": "",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 832,
            "description": "Runs narrowphase for the shape pair i and j.",
            "itemtype": "method",
            "name": "runNarrowphase",
            "params": [
                {
                    "name": "np",
                    "description": "",
                    "type": "Narrowphase"
                },
                {
                    "name": "bi",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "si",
                    "description": "",
                    "type": "Shape"
                },
                {
                    "name": "xi",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "ai",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "bj",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "sj",
                    "description": "",
                    "type": "Shape"
                },
                {
                    "name": "xj",
                    "description": "",
                    "type": "Array"
                },
                {
                    "name": "aj",
                    "description": "",
                    "type": "Number"
                },
                {
                    "name": "mu",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 955,
            "description": "Add a spring to the simulation",
            "itemtype": "method",
            "name": "addSpring",
            "params": [
                {
                    "name": "spring",
                    "description": "",
                    "type": "Spring"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 969,
            "description": "Remove a spring",
            "itemtype": "method",
            "name": "removeSpring",
            "params": [
                {
                    "name": "spring",
                    "description": "",
                    "type": "Spring"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 982,
            "description": "Add a body to the simulation",
            "itemtype": "method",
            "name": "addBody",
            "params": [
                {
                    "name": "body",
                    "description": "",
                    "type": "Body"
                }
            ],
            "example": [
                "\n    var world = new World(),\n        body = new Body();\n    world.addBody(body);"
            ],
            "todo": [
                "What if this is done during step?"
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 1005,
            "description": "Remove a body from the simulation. If this method is called during step(), the body removal is scheduled to after the step.",
            "itemtype": "method",
            "name": "removeBody",
            "params": [
                {
                    "name": "body",
                    "description": "",
                    "type": "Body"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 1027,
            "description": "Get a body by its id.",
            "itemtype": "method",
            "name": "getBodyById",
            "params": [
                {
                    "name": "id",
                    "description": "",
                    "type": "Number"
                }
            ],
            "return": {
                "description": "The body, or false if it was not found.",
                "type": "Body"
            },
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 1044,
            "description": "Disable collision between two bodies",
            "itemtype": "method",
            "name": "disableBodyCollision",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 1054,
            "description": "Enable collisions between the given two bodies",
            "itemtype": "method",
            "name": "enableBodyCollision",
            "params": [
                {
                    "name": "bodyA",
                    "description": "",
                    "type": "Body"
                },
                {
                    "name": "bodyB",
                    "description": "",
                    "type": "Body"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 1070,
            "description": "Resets the World, removes all bodies, constraints and springs.",
            "itemtype": "method",
            "name": "clear",
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 1115,
            "description": "Test if a world point overlaps bodies",
            "itemtype": "method",
            "name": "hitTest",
            "params": [
                {
                    "name": "worldPoint",
                    "description": "Point to use for intersection tests",
                    "type": "Array"
                },
                {
                    "name": "bodies",
                    "description": "A list of objects to check for intersection",
                    "type": "Array"
                },
                {
                    "name": "precision",
                    "description": "Used for matching against particles and lines. Adds some margin to these infinitesimal objects.",
                    "type": "Number"
                }
            ],
            "return": {
                "description": "Array of bodies that overlap the point",
                "type": "Array"
            },
            "todo": [
                "Should use an api similar to the raycast function",
                "Should probably implement a .containsPoint method for all shapes. Would be more efficient",
                "Should use the broadphase"
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 1168,
            "description": "Set the stiffness for all equations and contact materials.",
            "itemtype": "method",
            "name": "setGlobalStiffness",
            "params": [
                {
                    "name": "stiffness",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 1198,
            "description": "Set the relaxation for all equations and contact materials.",
            "itemtype": "method",
            "name": "setGlobalRelaxation",
            "params": [
                {
                    "name": "relaxation",
                    "description": "",
                    "type": "Number"
                }
            ],
            "class": "World"
        },
        {
            "file": "src/world/World.js",
            "line": 1229,
            "description": "Ray cast against all bodies in the world.",
            "itemtype": "method",
            "name": "raycast",
            "params": [
                {
                    "name": "result",
                    "description": "",
                    "type": "RaycastResult"
                },
                {
                    "name": "ray",
                    "description": "",
                    "type": "Ray"
                }
            ],
            "return": {
                "description": "True if any body was hit.",
                "type": "Boolean"
            },
            "example": [
                "\n    var ray = new Ray({\n        mode: Ray.CLOSEST, // or ANY\n        from: [0, 0],\n        to: [10, 0],\n    });\n    var result = new RaycastResult();\n    world.raycast(result, ray);\n\n    // Get the hit point\n    var hitPoint = vec2.create();\n    result.getHitPoint(hitPoint, ray);\n    console.log('Hit point: ', hitPoint[0], hitPoint[1], ' at distance ' + result.getHitDistance(ray));",
                "\n    var ray = new Ray({\n        mode: Ray.ALL,\n        from: [0, 0],\n        to: [10, 0],\n        callback: function(result){\n\n            // Print some info about the hit\n            console.log('Hit body and shape: ', result.body, result.shape);\n\n            // Get the hit point\n            var hitPoint = vec2.create();\n            result.getHitPoint(hitPoint, ray);\n            console.log('Hit point: ', hitPoint[0], hitPoint[1], ' at distance ' + result.getHitDistance(ray));\n\n            // If you are happy with the hits you got this far, you can stop the traversal here:\n            result.stop();\n        }\n    });\n    var result = new RaycastResult();\n    world.raycast(result, ray);"
            ],
            "class": "World"
        }
    ],
    "warnings": [
        {
            "message": "Missing item type\nGet the relative velocity along the normal vector.",
            "line": " src/equations/ContactEquation.js:120"
        }
    ]
}