summaryrefslogtreecommitdiff
path: root/assets/javascripts/rectangles/models/room.js
diff options
context:
space:
mode:
authorJulie Lala <jules@okfoc.us>2014-04-27 02:12:28 -0400
committerJulie Lala <jules@okfoc.us>2014-04-27 02:12:28 -0400
commit02dd0344889f45701021e86efef8d04b56175047 (patch)
tree65d9eef3cd0461e427e090128d372c7d002e64e5 /assets/javascripts/rectangles/models/room.js
parentfb7405f016f9f26b0fc81fb8a26dacd2b2350fa0 (diff)
group coincident walls
Diffstat (limited to 'assets/javascripts/rectangles/models/room.js')
-rw-r--r--assets/javascripts/rectangles/models/room.js61
1 files changed, 51 insertions, 10 deletions
diff --git a/assets/javascripts/rectangles/models/room.js b/assets/javascripts/rectangles/models/room.js
index 34eed6a..f7c52d4 100644
--- a/assets/javascripts/rectangles/models/room.js
+++ b/assets/javascripts/rectangles/models/room.js
@@ -53,23 +53,64 @@ window.Room = (function(){
Room.prototype.group_walls = function(){
var base = this
- var array_groups = {}, rect_groups = []
+ var side_groups = {}, walls = []
+
+ base.walls.forEach(function(wall){
- sort_wall_els_by_x_then_z(base.walls)
+ // ignore half-walls for now
+ if (! wall.side) return;
- base.walls.forEach(function(wall){
- var w = array_groups[ wall.side ]
- if (w) {
- w.forEach(function(ww){
-
- })
+ if (side_groups[ wall.side ]) {
+ side_groups[ wall.side ].push(wall)
+ }
+ else {
+ side_groups[ wall.side ] = [wall]
+ }
+ })
+
+ pairs(side_groups).forEach(function(pair){
+ var side = pair[0], els = pair[1]
+
+ console.log(sidesToString(side))
+ if (side & LEFT_RIGHT) {
+ els.sort(compare_x)
+ console.log(els.map(function(r){ return r.rect+"" }).join("\n"))
}
else {
- array_groups[ wall.side ] = [[wall]]
+ console.log(els.map(function(r){ return r.rect+"" }).join("\n"))
}
+
+ var wall = new_wall(els.shift())
+ walls.push(wall)
+
+ els.forEach(function(el){
+ console.log(wall.rect.x.b, el.rect.x.a, el.rect.sides & LEFT_RIGHT)
+ 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)
+ }
+ })
+ console.log(walls.length)
})
- return groups
+ function new_wall (el) {
+ return new Wall ({
+ room: base.id,
+ side: el.side,
+ rect: el.rect.clone(),
+ el: el,
+ })
+ }
+
+ return walls
}
Room.prototype.clipTo = function(r){