From 6a39854726c511f3df0b4aff619ecac1943c993c Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Thu, 24 Apr 2014 18:52:55 -0400 Subject: trying to add a slight margin to the walls --- assets/javascripts/rectangles/models/room.js | 37 ++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'assets/javascripts/rectangles/models/room.js') 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 })() -- cgit v1.2.3-70-g09d2