diff options
| author | Julie Lala <jules@okfoc.us> | 2014-04-27 02:12:28 -0400 |
|---|---|---|
| committer | Julie Lala <jules@okfoc.us> | 2014-04-27 02:12:28 -0400 |
| commit | 02dd0344889f45701021e86efef8d04b56175047 (patch) | |
| tree | 65d9eef3cd0461e427e090128d372c7d002e64e5 | |
| parent | fb7405f016f9f26b0fc81fb8a26dacd2b2350fa0 (diff) | |
group coincident walls
| -rw-r--r-- | assets/javascripts/rectangles/engine/builder.js | 18 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/models/room.js | 61 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/models/wall.js | 20 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/util/sort.js | 20 | ||||
| -rw-r--r-- | rectangles-stone.html | 1 | ||||
| -rw-r--r-- | rectangles.html | 3 |
6 files changed, 92 insertions, 31 deletions
diff --git a/assets/javascripts/rectangles/engine/builder.js b/assets/javascripts/rectangles/engine/builder.js index d5caeee..748e8c5 100644 --- a/assets/javascripts/rectangles/engine/builder.js +++ b/assets/javascripts/rectangles/engine/builder.js @@ -42,13 +42,15 @@ var builder = new function(){ function bind (){ clipper.rooms.forEach(function(room){ - room.bind() + var walls = room.group_walls() + walls.forEach(function(wall){ wall.bind() }) }) } function clear (){ els.forEach(function(el){ scene.remove(el) + el.destroy && el.destroy() }) els = [] } @@ -70,6 +72,7 @@ var builder = new function(){ el.x = region.x.a + width/2 el.y = height/2 el.z = region.y.a + el.rect = region el.side = FRONT room.walls.push(el) list.push(el) @@ -82,6 +85,7 @@ var builder = new function(){ el.x = region.x.b - width/2 el.y = height/2 el.z = region.y.b + el.rect = region el.side = BACK room.walls.push(el) list.push(el) @@ -94,6 +98,7 @@ var builder = new function(){ el.x = region.x.a el.y = height/2 el.z = region.y.a + depth/2 + el.rect = region el.side = LEFT room.walls.push(el) list.push(el) @@ -106,6 +111,7 @@ var builder = new function(){ el.x = region.x.b el.y = height/2 el.z = region.y.b - depth/2 + el.rect = region el.side = RIGHT room.walls.push(el) list.push(el) @@ -180,6 +186,7 @@ var builder = new function(){ el.x = region.x.a el.y = lo.height + height/2 el.z = region.y.a + depth/2 + el.rect = region list.push(el) hi.walls.push(el) region.half_sides |= LEFT @@ -193,6 +200,7 @@ var builder = new function(){ el.x = region.x.b el.y = lo.height + height/2 el.z = region.y.b - depth/2 + el.rect = region list.push(el) hi.walls.push(el) region.half_sides |= RIGHT @@ -206,6 +214,7 @@ var builder = new function(){ el.x = region.x.a + width/2 el.y = lo.height + height/2 el.z = region.y.a + el.rect = region list.push(el) hi.walls.push(el) region.half_sides |= FRONT @@ -219,6 +228,7 @@ var builder = new function(){ el.x = region.x.b - width/2 el.y = lo.height + height/2 el.z = region.y.b + el.rect = region list.push(el) hi.walls.push(el) region.half_sides |= BACK @@ -237,6 +247,7 @@ var builder = new function(){ el.y = 0 el.z = region.y.a + depth/2 el.rotationX = PI/2 + el.rect = region el.side = FLOOR return el } @@ -252,6 +263,7 @@ var builder = new function(){ el.y = height el.z = region.y.a + depth/2 el.rotationX = -PI/2 + el.rect = region el.side = CEILING return el } @@ -264,6 +276,10 @@ var builder = new function(){ el.type = "Face" el.el.style.opacity = 1.0 el.side = 0 + el.rect = null + el.destroy = function(){ + this.el = this.rect = null + } return el } 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){ diff --git a/assets/javascripts/rectangles/models/wall.js b/assets/javascripts/rectangles/models/wall.js index b9705a2..50ae0e8 100644 --- a/assets/javascripts/rectangles/models/wall.js +++ b/assets/javascripts/rectangles/models/wall.js @@ -3,9 +3,14 @@ window.Wall = (function(){ var Wall = function(opt){ this.id = opt.id this.room = opt.room - this.rect = opt.rect + this.rect = opt.rect || new Rect (0,0,0,0) + this.rect.sides = opt.side + this.side = opt.side this.mx = [] this.els = [] + if (opt.el) { + this.mx.push(opt.el) + } } Wall.prototype.toString = function(){ @@ -14,15 +19,24 @@ window.Wall = (function(){ Wall.prototype.reset = function(){ } + Wall.prototype.destroy = function(){ + this.mx.forEach(function(mx){ + mx.destroy && mx.destroy() + }) + this.room = this.rect = this.mx = this.els = null + } Wall.prototype.bind = function(){ - this.$walls.bind({ + var base = this + base.$walls = $( this.mx.map(function(mx){ return mx.el }) ) + base.$walls.bind({ mouseover: function(){ }, mousemove: function(e){ }, mousedown: function(){ - $(this).css("background-color", choice(window.palettes.colors)) + base.$walls.css("background-color", choice(window.palettes.colors)) + console.log("zz") } }) } diff --git a/assets/javascripts/rectangles/util/sort.js b/assets/javascripts/rectangles/util/sort.js index 008e20a..17231ea 100644 --- a/assets/javascripts/rectangles/util/sort.js +++ b/assets/javascripts/rectangles/util/sort.js @@ -58,21 +58,9 @@ function sort_rects_by_area(list){ .map(function(r){ return r[1] }) } - -function sort_wall_els_by_x_then_z(list){ - return list.sort(function(a,b){ - return sort_wall_els_by_x(a,b) || sort_wall_els_by_z(a,b) - }) -} - -function sort_wall_els_by_z(list){ - return list.sort(function(a,b){ - return a.z < b.z ? -1 : a.z == b.z ? 0 : 1 - }) +function compare_z(a,b){ + return a.rect.y.a < b.rect.y.a ? -1 : a.rect.y.a == b.rect.y.a ? 0 : 1 } -function sort_wall_els_by_x(a){ - return list.sort(function(a,b){ - return a.x < b.x ? -1 : a.x == b.x ? 0 : 1 - }) +function compare_x(a,b){ + return a.rect.x.a > b.rect.x.a ? -1 : a.rect.x.a == b.rect.x.a ? 0 : 1 } - diff --git a/rectangles-stone.html b/rectangles-stone.html index 05983ae..16fd49f 100644 --- a/rectangles-stone.html +++ b/rectangles-stone.html @@ -63,6 +63,7 @@ body > div { <script type="text/javascript" src="assets/javascripts/rectangles/util/keys.js"></script> <script type="text/javascript" src="assets/javascripts/rectangles/models/tree.js"></script> <script type="text/javascript" src="assets/javascripts/rectangles/models/room.js"></script> +<script type="text/javascript" src="assets/javascripts/rectangles/models/wall.js"></script> <script type="text/javascript" src="assets/javascripts/rectangles/models/rect.js"></script> <script type="text/javascript" src="assets/javascripts/rectangles/models/vec2.js"></script> <script type="text/javascript" src="assets/javascripts/rectangles/engine/builder.js"></script> diff --git a/rectangles.html b/rectangles.html index ab36bf2..6d651f2 100644 --- a/rectangles.html +++ b/rectangles.html @@ -80,8 +80,9 @@ body > div { <script type="text/javascript" src="assets/javascripts/rectangles/util/wheel.js"></script> <script type="text/javascript" src="assets/javascripts/rectangles/util/mouse.js"></script> <script type="text/javascript" src="assets/javascripts/rectangles/util/keys.js"></script> -<script type="text/javascript" src="assets/javascripts/rectangles/models/tree.js"></script> <script type="text/javascript" src="assets/javascripts/rectangles/models/room.js"></script> +<script type="text/javascript" src="assets/javascripts/rectangles/models/wall.js"></script> +<script type="text/javascript" src="assets/javascripts/rectangles/models/tree.js"></script> <script type="text/javascript" src="assets/javascripts/rectangles/models/rect.js"></script> <script type="text/javascript" src="assets/javascripts/rectangles/models/vec2.js"></script> <script type="text/javascript" src="assets/javascripts/rectangles/engine/builder.js"></script> |
