diff options
| author | Julie Lala <jules@okfoc.us> | 2014-04-24 09:18:06 -0400 |
|---|---|---|
| committer | Julie Lala <jules@okfoc.us> | 2014-04-24 09:45:26 -0400 |
| commit | a9f550c6981d96d5ff0910601586a7477396fe56 (patch) | |
| tree | cdacde4d4af8e549c0bf899c7fe326e7272baf1e /assets/javascripts/rectangles/models/room.js | |
| parent | 1f434dfedae0f57c0b74978a6c5c144e34287501 (diff) | |
corner collision
Diffstat (limited to 'assets/javascripts/rectangles/models/room.js')
| -rw-r--r-- | assets/javascripts/rectangles/models/room.js | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/assets/javascripts/rectangles/models/room.js b/assets/javascripts/rectangles/models/room.js index c760174..4d83d56 100644 --- a/assets/javascripts/rectangles/models/room.js +++ b/assets/javascripts/rectangles/models/room.js @@ -4,8 +4,10 @@ window.room = (function(){ this.id = opt.id || clipper.rooms.length this.rect = opt.rect this.regions = [] + this.height = opt.height || 200 this.focused = false + this.$walls = $([]) this.$floor = $([]) this.$ceiling = $([]) @@ -20,8 +22,10 @@ window.room = (function(){ copy.id = this.id copy.sides = FRONT | BACK | LEFT | RIGHT this.regions = [ copy ] + this.intersects = [] this.constructed = false + this.$walls = $([]) this.$floor = $([]) this.$ceiling = $([]) @@ -42,21 +46,37 @@ window.room = (function(){ } room.prototype.collides = function(x,y){ - var collision = 0 + 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 < r.y.a && r.x.contains(x)) { - collision |= FRONT + if ((r.sides & FRONT) && y < r.y.a) { + wall_collision |= FRONT + } + if ((r.sides & BACK) && r.y.b < y) { + wall_collision |= BACK } - if ((r.sides & BACK) && r.y.b < y && r.x.contains(x)) { - collision |= BACK + if ((r.sides & LEFT) && x < r.x.a) { + wall_collision |= LEFT + } + if ((r.sides & RIGHT) && r.x.b < x) { + wall_collision |= RIGHT + } + if (! wall_collision) return + + contains_y = r.y.contains(y) + contains_x = r.x.contains(x) + + if (contains_x) { + collision |= wall_collision & FRONT_BACK } - if ((r.sides & LEFT) && x < r.x.a && r.y.contains(y)) { - collision |= LEFT + else if (contains_y) { + collision |= wall_collision & LEFT_RIGHT } - if ((r.sides & RIGHT) && r.x.b < x && r.y.contains(y)) { - collision |= RIGHT + else if (bitcount(wall_collision) > 1) { + collision |= wall_collision } }) return collision |
