diff options
Diffstat (limited to 'assets/javascripts/rectangles/models/room.js')
| -rw-r--r-- | assets/javascripts/rectangles/models/room.js | 213 |
1 files changed, 0 insertions, 213 deletions
diff --git a/assets/javascripts/rectangles/models/room.js b/assets/javascripts/rectangles/models/room.js deleted file mode 100644 index 731411c..0000000 --- a/assets/javascripts/rectangles/models/room.js +++ /dev/null @@ -1,213 +0,0 @@ -window.Room = (function(){ - - var Room = function(opt){ - this.id = opt.id || Rooms.list.length - this.rect = opt.rect - this.regions = [] - this.walls = [] - this.floor = [] - this.ceiling = [] - - this.height = opt.height || 200 - this.focused = false - } - - Room.prototype.toString = function(){ - return this.rect.toString() - } - - Room.prototype.reset = function(){ - var copy = this.rect.clone() - copy.id = this.id - copy.sides = FRONT | BACK | LEFT | RIGHT - this.regions = [ copy ] - - this.intersects = [] - this.constructed = false - - this.walls = [] - - this.mx_walls = [] - this.mx_floor = [] - this.mx_ceiling = [] - } - - Room.prototype.bind = function(){ - var base = this - base.mx_walls.forEach(function(wall){ - $(wall.el).bind({ - mouseover: function(){ - }, - mousemove: function(e){ - var color = choice(window.palettes.colors) - base.mx_walls.forEach(function(wall){ - $(wall.el).css("background-color", color) - }) - }, - mousedown: function(){ - } - }) - }) - } - - Room.prototype.group_mx_walls = function(){ - var base = this - var side_groups = {}, walls = [] - - // group the walls by side - base.mx_walls.forEach(function(wall){ - - // ignore half-walls for now - var side = wall.side || wall.half_side - - if (side_groups[side]) { - side_groups[side].push(wall) - } - else { - side_groups[side] = [wall] - } - }) - - // sort the subgroups, and then combine mx objects under wall objects - pairs(side_groups).forEach(function(pair){ - var side = pair[0], els = pair[1] - - if (side & LEFT_RIGHT) { - els.sort(compare_x) - } - else if (side & FRONT_BACK) { - els.sort(compare_z) - } - - var wall - - els.forEach(function(el){ - if (el.half_side) { - wall = new_wall(el) - walls.push(wall) - wall = null - } - else if (! wall) { - wall = new_wall(el) - walls.push(wall) - } - else if (side & FRONT_BACK && wall.rect.x.b == el.rect.x.a) { - wall.rect.x.b = el.rect.x.b - wall.mx.push(el) - } - else if (side & LEFT_RIGHT && wall.rect.y.b == el.rect.y.a) { - wall.rect.y.b = el.rect.y.b - wall.mx.push(el) - } - else { - wall = new_wall(el) - walls.push(wall) - } - }) - }) - - function new_wall (el) { - return new Wall ({ - room: base.id, - side: el.side | el.half_side, - half_side: el.half_side, - rect: el.rect.clone(), - el: el, - }) - } - - return walls - } - - Room.prototype.clipTo = function(r){ - // for each of this rect's regions split the region if necessary - var regions = this.regions - var splits - for (var i = 0, len = regions.length; i < len; i++) { - if (regions[i] && regions[i].intersects(r)) { - splits = regions[i].split(r) - regions = regions.concat(splits) - regions[i] = null - } - } - this.regions = regions - } - - Room.prototype.collides = function(x,y){ - 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) { - wall_collision |= FRONT - } - if ((r.sides & BACK) && r.y.b < y) { - wall_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 - } - else if (contains_y) { - collision |= wall_collision & LEFT_RIGHT - } - else if (bitcount(wall_collision) > 1) { - collision |= wall_collision - } - }) - 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 - -})() - |
