summaryrefslogtreecommitdiff
path: root/assets/javascripts/rectangles/models/room.js
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2014-04-24 18:52:55 -0400
committerJules Laplace <jules@okfoc.us>2014-04-24 18:52:55 -0400
commit6a39854726c511f3df0b4aff619ecac1943c993c (patch)
tree2b9ca54a08523eb6559f2d36a5e240e98a8d09bc /assets/javascripts/rectangles/models/room.js
parent0e4bc72fe453797743d63f57db47ef3e0468fc65 (diff)
trying to add a slight margin to the walls
Diffstat (limited to 'assets/javascripts/rectangles/models/room.js')
-rw-r--r--assets/javascripts/rectangles/models/room.js37
1 files changed, 37 insertions, 0 deletions
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
})()