diff options
| author | Jules Laplace <jules@okfoc.us> | 2014-05-05 12:57:38 -0400 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2014-05-05 12:57:38 -0400 |
| commit | 79b0e1b0a127260978c69165466953ae86f6d6b2 (patch) | |
| tree | f7f272a17efffb71c80aa10d25332a5b9cd9eff4 | |
| parent | 623916fe0961c6a2baeb3038224c22575050186d (diff) | |
further refactoring
| -rw-r--r-- | assets/javascripts/rectangles/engine/builder.js | 4 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/engine/clipper.js | 42 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/engine/mover.js | 2 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/engine/rooms.js | 12 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/engine/scenery.js | 2 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/models/wall.js | 2 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/util/sort.js | 8 | ||||
| -rw-r--r-- | rectangles.html | 1 |
8 files changed, 47 insertions, 26 deletions
diff --git a/assets/javascripts/rectangles/engine/builder.js b/assets/javascripts/rectangles/engine/builder.js index 9894333..91bdeb4 100644 --- a/assets/javascripts/rectangles/engine/builder.js +++ b/assets/javascripts/rectangles/engine/builder.js @@ -27,7 +27,7 @@ var Builder = new function(){ }) }) - Rooms.sort_by_height().forEach(function(room){ + Rooms.sorted_by_height().forEach(function(room){ build_floors(room).forEach(function(el){ els.push(el) scene.add(el) @@ -176,7 +176,7 @@ var Builder = new function(){ var width = region.x.length() var depth = region.y.length() var height = hi.height - lo.height - + if (! (region.half_sides & LEFT) && region.x.a == hi.rect.x.a) { el = make_wall('.left') el.rotationY = HALF_PI diff --git a/assets/javascripts/rectangles/engine/clipper.js b/assets/javascripts/rectangles/engine/clipper.js index 01a4921..d814fec 100644 --- a/assets/javascripts/rectangles/engine/clipper.js +++ b/assets/javascripts/rectangles/engine/clipper.js @@ -2,11 +2,6 @@ var Clipper = new function(){ var base = this - var rooms = base.rooms = [] - var regions = base.regions = [] - - var modified = true - base.init = function(){ base.bind() base.update() @@ -17,20 +12,34 @@ var Clipper = new function(){ } base.update = function(){ - Clipper.solve_rects() + base.solve_rects() app.tube("clip") } + var rooms, regions + + // Given a set of overlapping rooms, clip any intersections, then cull any duplicate polygons base.solve_rects = function(){ - if (base.rooms.length == 0) return; - - for (var i = 0; i < base.rooms.length; i++) { - base.rooms[i].reset() + if (Rooms.list.length == 0) return + + base.reset_rects() + base.clip_rects() + base.cull_rects() + + Rooms.regions = sort_rects_by_position(regions) + } + + // Reset the clipping/culling states of each of the rooms + base.reset_rects = function(){ + for (var i = 0; i < Rooms.list.length; i++) { + Rooms.list[i].reset() } + } - var rooms = sort_rooms_by_position( base.rooms ) - - var regions = [] + // Compare each room to the rooms it overlaps, and subdivide + base.clip_rects = function(){ + var rooms = Rooms.sorted_by_position() + regions = [] var left, right for (var i = 0; i < rooms.length; i++) { @@ -52,7 +61,10 @@ var Clipper = new function(){ rooms[i].regions = rooms[i].regions.filter(function(r){ return !!r }) regions = regions.concat(rooms[i].regions) } - + } + + // Find overlapping regions (of the same size) and dedupe + base.cull_rects = function(){ regions = sort_rects_by_area( regions ) var ty = new Tree (regions[0].y.a, [regions[0]]) @@ -85,8 +97,6 @@ var Clipper = new function(){ ttx.data = new Tree (regions[i].y.a, [regions[i]]) } } - - base.regions = sort_rects_by_position(regions) } return base diff --git a/assets/javascripts/rectangles/engine/mover.js b/assets/javascripts/rectangles/engine/mover.js index 3cf214f..413715a 100644 --- a/assets/javascripts/rectangles/engine/mover.js +++ b/assets/javascripts/rectangles/engine/mover.js @@ -1,4 +1,4 @@ -var mover = new function(){ +var Mover = new function(){ var base = this base.room = null diff --git a/assets/javascripts/rectangles/engine/rooms.js b/assets/javascripts/rectangles/engine/rooms.js index 642193e..93ba7b8 100644 --- a/assets/javascripts/rectangles/engine/rooms.js +++ b/assets/javascripts/rectangles/engine/rooms.js @@ -17,7 +17,7 @@ var Rooms = new function(){ base.add_with_rect = function(rect){ var room = new Room({ - id: base.rooms.length, + id: base.list.length, rect: rect, height: quantize(randrange(300,800), 50), }) @@ -28,4 +28,14 @@ var Rooms = new function(){ return base.list.forEach(f) } + base.sorted_by_position = function(){ + return sort_rooms_by_position( base.list ) + } + base.sorted_by_height = function(){ + return sort_rooms_by_height( base.list ) + } + base.sorted_by_area = function(){ + return sort_rooms_by_area( base.list ) + } + } diff --git a/assets/javascripts/rectangles/engine/scenery.js b/assets/javascripts/rectangles/engine/scenery.js index 3a43755..1301949 100644 --- a/assets/javascripts/rectangles/engine/scenery.js +++ b/assets/javascripts/rectangles/engine/scenery.js @@ -4,7 +4,7 @@ wall_rotation[BACK] = 0 wall_rotation[LEFT] = HALF_PI wall_rotation[RIGHT] = -HALF_PI -var scenery = new function(){ +var Scenery = new function(){ var base = this; diff --git a/assets/javascripts/rectangles/models/wall.js b/assets/javascripts/rectangles/models/wall.js index 88eb75d..ae23125 100644 --- a/assets/javascripts/rectangles/models/wall.js +++ b/assets/javascripts/rectangles/models/wall.js @@ -37,7 +37,7 @@ window.Wall = (function(){ mouseover: function(){ }, mouseenter: function(e){ - scenery.mouse.mouseenter(e, base) + Scenery.mouse.mouseenter(e, base) }, mousemove: function(e){ }, diff --git a/assets/javascripts/rectangles/util/sort.js b/assets/javascripts/rectangles/util/sort.js index ec0f5e9..0985b75 100644 --- a/assets/javascripts/rectangles/util/sort.js +++ b/assets/javascripts/rectangles/util/sort.js @@ -53,7 +53,7 @@ function sort_rooms_by_id(list){ } function sort_rooms_by_height(list){ return list.map(room_height_tuple) - .sort(compare_car) + .sort(compare_car_reversed) .map(cdr) } function sort_rooms_by_position(list){ @@ -62,8 +62,8 @@ function sort_rooms_by_position(list){ .map(cdr) } function sort_rooms_by_area(list){ - return list.map(room_area_tuple)) - .sort(compare_rect_area) + return list.map(room_area_tuple) + .sort(compare_car) .map(cdr) } @@ -74,7 +74,7 @@ function sort_rects_by_position(list){ } function sort_rects_by_area(list){ return list.map(rect_area_tuple) - .sort(compare_rect_area) + .sort(compare_car) .map(cdr) } diff --git a/rectangles.html b/rectangles.html index 1a4901e..a274fe2 100644 --- a/rectangles.html +++ b/rectangles.html @@ -87,6 +87,7 @@ body > div { <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/rooms.js"></script> <script type="text/javascript" src="assets/javascripts/rectangles/engine/builder.js"></script> <script type="text/javascript" src="assets/javascripts/rectangles/engine/clipper.js"></script> <script type="text/javascript" src="assets/javascripts/rectangles/engine/mover.js"></script> |
