Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hackergrrl/collide-2d-aabb-aabb
:collision: Determines whether a moving axis-aligned bounding box (AABB) collides with other AABBs.
https://github.com/hackergrrl/collide-2d-aabb-aabb
Last synced: 24 days ago
JSON representation
:collision: Determines whether a moving axis-aligned bounding box (AABB) collides with other AABBs.
- Host: GitHub
- URL: https://github.com/hackergrrl/collide-2d-aabb-aabb
- Owner: hackergrrl
- License: mit
- Created: 2015-11-24T07:21:38.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2016-10-01T14:44:57.000Z (about 8 years ago)
- Last Synced: 2024-10-15T09:22:13.881Z (about 1 month ago)
- Language: JavaScript
- Size: 5.86 KB
- Stars: 7
- Watchers: 3
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# collide-2d-aabb-aabb
> Determine whether a moving axis-aligned bounding box (AABB) collides with
> other AABBs.`collide-2d-aabb-aabb` provides methods for testing an AABB against either
1. a single AABB, or
2. a set of AABBsin 2D space.
## Usage: Test vs Single AABB
```javascript
var collideSingle = require('collide-2d-aabb-aabb').singlevar player = [0, 0, 16, 16]
var motion = [5, 5]
var crate = [18, 1, 32, 32]var offset = collideSingle(player, motion, crate)
console.log(offset)
```outputs
```
[2, 5]
```## Usage: Test vs Set of AABBs
```javascript
var collideSet = require('collide-2d-aabb-aabb').setvar player = [0, 0, 16, 16]
var motion = [5, 5]
var crates = [
[18, 1, 32, 32]
[7, 19, 32, 32]
]function getCrate (cb) {
cb(crates[0])
cb(crates[1])
cb(null)
}var offset = collideSet(player, motion, getCrate, onCollide)
console.log(offset)function onCollide (box, axis, dir) {
console.log(box, axis, dir)
}
```outputs
```
[18, 1, 32, 32], 0, 1
[7, 19, 32, 32], 1, 1
[2, 3]
```Detection and correction is applied on each X and Y axis separately, resulting
in 0-2 calls to `onCollide`.## API
```javascript
var single = require('collide-2d-aabb-aabb').single
var set = require('collide-2d-aabb-aabb').set
```### var offset = single(aabb, moveDelta, aabb2)
Attempt to advance `aabb` by `moveDelta` against the impeding `aabb2`.
Non-destructive.If there is no collision, `offset == moveDelta`. Otherwise, it will be shorter
in one or both axes.`aabb` and `aabb2` are assumed to be a size 4 array of the form `[x, y, width,
height]`.`moveDelta` is assumed to be a `gl-matrix`-style `vec2` or array `[x, y]`.
### var offset = set(aabb, moveDelta, getAabb, onCollide)
Attempt to advance `aabb` by `moveDelta` against the set of impeding AABBs
provided by the `getAabb` function. Non-destructive.`getAabb` is assumed to be a function with a single parameter, `cb`, which is
called to give size 4 arrays (of the form `[x, y, width, height]`) to check
collisions against. You **must** call `cb(null)` to indicate `getAabb` is
finished providing values.If there is no collision, `offset == moveDelta`. Otherwise, it will be shorter
in one or both axes.`aabb` is assumed to be a size 4 array of the form `[x, y, width, height]`.
`moveDelta` is assumed to be a `gl-matrix`-style `vec2` or array `[x, y]`.
`onCollide` is a callback function, taking the following arguments:
* `aabb`: the size 4 array that the collision took place against. Will be === to
the array provided by `getAabb`.
* `moveAxis`: an integer representing the axis of movement. `0` (X) or `1` (Y).
* `moveDir`: either -1 or 1, denoting the direction of the movement.## Installation
```
$ npm install collide-2d-aabb-aabb
```## See also
- [collide-2d-aabb-tilemap](https://github.com/noffle/collide-2d-aabb-tilemap)
- [common-readme](https://github.com/noffle/common-readme)## License
MIT