Determines whether a moving axis-aligned bounding box collides with a tilemap, and prevents intersection.
Based off collide-2d-tilemap. The key difference is that this module provides a non-destructive API, and doesn't depend on aabb-2d.
Example usage:
var collideAabbTilemap = require('collide-2d-aabb-tilemap') var tilemap = [ [ 0, 0, 0, 1 ], [ 1, 0, 0, 1 ], [ 1, 0, 0, 1 ], [ 1, 1, 1, 1 ] ] // (0,0) - (16,16) var player = [0, 0, 16, 16] // collideAabbTilemap(field, size of tile in pixels, [width, height]) collide = collideAabbTilemap(my_tilemap, 32, [4, 4]) my_game_event_loop(function(dt) { var vec = get_player_input() * dt collide(player, vec, function(moveAxis, moveDir, tileIdx, tileCoords) { // true => solid return tileIdx > 0 }) })
The algorithm used is taken from this article. Detection and correction is applied on each X and Y axis separately.
var collide = collideAabbTilemap(array, tilesize[, dimensions])Produces a collide(aabb, vec2, oncollide)
function.
array
may be a single-dimension array (or ndarray) of integers OR a function of the form fn(tileX, tileY) -> integer
.
tilesize
are the pixel dimensions of a tile.
dimensions
is a size 2 array of integers, [width, height]
. If it is not provided, the map will be assumed to be square.
Attempt to advance aabb
by moveDelta
against the aforementioned tilemap
. Non-destructive.
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 [x, y]
.
onCollide
is a callback function, taking the following arguments:
moveAxis
: an integer representing the axis of movement. 0
(X) or 1
(Y).moveDir
: either -1 or 1, denoting the direction of the movement.tileIdx
: the tile integer data of the tile a candidate collision has been detected against.tileCoords
: a size 2 array of tile coordinates.If the callback returns a truthy value, the tile will be treated as solid, and no further tiles will be checked along this axis.
MIT
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4