diff options
| author | Jules Laplace <jules@okfoc.us> | 2014-04-24 18:52:55 -0400 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2014-04-24 18:52:55 -0400 |
| commit | 6a39854726c511f3df0b4aff619ecac1943c993c (patch) | |
| tree | 2b9ca54a08523eb6559f2d36a5e240e98a8d09bc /assets/javascripts/rectangles/models | |
| parent | 0e4bc72fe453797743d63f57db47ef3e0468fc65 (diff) | |
trying to add a slight margin to the walls
Diffstat (limited to 'assets/javascripts/rectangles/models')
| -rw-r--r-- | assets/javascripts/rectangles/models/rect.js | 2 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/models/room.js | 37 |
2 files changed, 38 insertions, 1 deletions
diff --git a/assets/javascripts/rectangles/models/rect.js b/assets/javascripts/rectangles/models/rect.js index 51162c0..0664693 100644 --- a/assets/javascripts/rectangles/models/rect.js +++ b/assets/javascripts/rectangles/models/rect.js @@ -59,7 +59,7 @@ window.rect = (function(){ return this.x.contains(x) && this.y.contains(y) } rect.prototype.containsDisc = function(x,y,r){ - return this.x.contains(x,r) && this.y.contains(y,r) + return this.x.containsDisc(x,r) && this.y.containsDisc(y,r) } rect.prototype.intersects = function(r){ return this.x.intersects(r.x) && this.y.intersects(r.y) diff --git a/assets/javascripts/rectangles/models/room.js b/assets/javascripts/rectangles/models/room.js index f0ebc76..b66d868 100644 --- a/assets/javascripts/rectangles/models/room.js +++ b/assets/javascripts/rectangles/models/room.js @@ -94,6 +94,43 @@ window.room = (function(){ return collision } + room.prototype.collidesDisc = function(x,y,radius){ + var collision = 0, wall_collision, contains_x, contains_y + this.regions.forEach(function(r){ + if (! r.sides) return + + wall_collision = 0 + + if ((r.sides & FRONT) && y-radius < r.y.a) { + wall_collision |= FRONT + } + if ((r.sides & BACK) && r.y.b < y+radius) { + wall_collision |= BACK + } + if ((r.sides & LEFT) && x-radius < r.x.a) { + wall_collision |= LEFT + } + if ((r.sides & RIGHT) && r.x.b < x+radius) { + wall_collision |= RIGHT + } + if (! wall_collision) return + + contains_x = r.x.contains(x, radius) + contains_y = r.y.contains(y, radius) + + if (contains_x) { + collision |= wall_collision & FRONT_BACK + } + else if (contains_y) { + collision |= wall_collision & LEFT_RIGHT + } + else if (bitcount(wall_collision) > 1) { + collision |= wall_collision + } + }) + return collision + } + return room })() |
