diff options
| author | Jules Laplace <jules@okfoc.us> | 2014-05-02 13:25:44 -0400 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2014-05-02 13:25:44 -0400 |
| commit | 623916fe0961c6a2baeb3038224c22575050186d (patch) | |
| tree | 0937c16eedc744fd33ae4c42fd588e206a29d44a | |
| parent | b9f007562712688612269fad9c71df2d4981acaa (diff) | |
starting refactor
| -rw-r--r-- | assets/javascripts/mx/extensions/mx.movements.js | 2 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/_env.js | 22 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/engine/builder.js | 15 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/engine/clipper.js | 12 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/engine/mover.js | 2 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/engine/rooms.js | 31 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/engine/scenery.js | 4 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/map/draw.js | 2 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/map/ui.js | 8 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/models/room.js | 2 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/models/wall.js | 4 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/util/colors.js | 2 | ||||
| -rw-r--r-- | assets/javascripts/rectangles/util/sort.js | 60 |
13 files changed, 98 insertions, 68 deletions
diff --git a/assets/javascripts/mx/extensions/mx.movements.js b/assets/javascripts/mx/extensions/mx.movements.js index d9d132d..f2f9581 100644 --- a/assets/javascripts/mx/extensions/mx.movements.js +++ b/assets/javascripts/mx/extensions/mx.movements.js @@ -260,7 +260,7 @@ MX.Movements = function (cam, viewHeight) { vz = vz || 1 } - var ceiling = (mover.room ? mover.room.height : 5000) + var ceiling = (Mover.room ? Mover.room.height : 5000) if (pos.y >= ceiling) { vy = 0 diff --git a/assets/javascripts/rectangles/_env.js b/assets/javascripts/rectangles/_env.js index 3f9d811..18d4f05 100644 --- a/assets/javascripts/rectangles/_env.js +++ b/assets/javascripts/rectangles/_env.js @@ -18,15 +18,15 @@ environment.init = function(){ // map.center.a = 0 // map.center.b = 0 - clipper.rooms.push( new Room ({ + Rooms.list.push( new Room ({ rect: new Rect(-500,-500, 500,500), height: 500, })) - clipper.rooms.push( new Room ({ + Rooms.list.push( new Room ({ rect: new Rect(600,0, 1100,500), height: 500, })) - clipper.rooms.push( new Room ({ + Rooms.list.push( new Room ({ rect: new Rect(450,150, 650,350), height: 300, })) @@ -35,21 +35,13 @@ environment.init = function(){ // $("#map").hide() - builder.init() - clipper.init() - mover.init() - scenery.init() - window.scene && scene.update() + Rooms.init() + Scenery.init() + + scene.update() environment.update() } environment.update = function(t){ - if (window.scene && scene.camera) { -// map.center.a = scene.camera.x -// map.center.b = -scene.camera.z - } - else { - requestAnimationFrame(environment.update) - } map.update() z = false } diff --git a/assets/javascripts/rectangles/engine/builder.js b/assets/javascripts/rectangles/engine/builder.js index dcd89dc..9894333 100644 --- a/assets/javascripts/rectangles/engine/builder.js +++ b/assets/javascripts/rectangles/engine/builder.js @@ -1,5 +1,5 @@ -var builder = new function(){ +var Builder = new function(){ var base = this var els = [] @@ -20,28 +20,23 @@ var builder = new function(){ } } function build (){ - clipper.rooms = sort_rooms_by_id(clipper.rooms) - - clipper.regions.forEach(function(room){ + Rooms.regions.forEach(function(room){ build_walls(room).forEach(function(el){ els.push(el) scene.add(el) }) }) - clipper.rooms = sort_rooms_by_height(clipper.rooms) - clipper.rooms.forEach(function(room){ + Rooms.sort_by_height().forEach(function(room){ build_floors(room).forEach(function(el){ els.push(el) scene.add(el) }) }) - - clipper.rooms = sort_rooms_by_id(clipper.rooms) } function bind (){ - clipper.rooms.forEach(function(room){ + Rooms.forEach(function(room){ room.walls = room.group_mx_walls() room.walls.forEach(function(wall){ wall.bind() @@ -59,7 +54,7 @@ var builder = new function(){ } function build_walls (region){ - var room = clipper.rooms[ region.id ] + var room = Rooms.list[ region.id ] var list = [], el = null diff --git a/assets/javascripts/rectangles/engine/clipper.js b/assets/javascripts/rectangles/engine/clipper.js index 68fad15..01a4921 100644 --- a/assets/javascripts/rectangles/engine/clipper.js +++ b/assets/javascripts/rectangles/engine/clipper.js @@ -1,5 +1,5 @@ -var clipper = new function(){ +var Clipper = new function(){ var base = this var rooms = base.rooms = [] @@ -17,18 +17,10 @@ var clipper = new function(){ } base.update = function(){ - clipper.solve_rects() + Clipper.solve_rects() app.tube("clip") } - base.add_room = function(rect){ - rooms.push( new Room({ - id: base.rooms.length, - rect: rect, - height: quantize(randrange(300,800), 50), - }) ) - } - base.solve_rects = function(){ if (base.rooms.length == 0) return; diff --git a/assets/javascripts/rectangles/engine/mover.js b/assets/javascripts/rectangles/engine/mover.js index 12edeff..3cf214f 100644 --- a/assets/javascripts/rectangles/engine/mover.js +++ b/assets/javascripts/rectangles/engine/mover.js @@ -65,7 +65,7 @@ var mover = new function(){ cam.z = pos.z // determine what room we are in now - var intersects = clipper.rooms.filter(function(r){ + var intersects = Rooms.filter(function(r){ return r.rect.contains(pos.x, pos.z) }) diff --git a/assets/javascripts/rectangles/engine/rooms.js b/assets/javascripts/rectangles/engine/rooms.js new file mode 100644 index 0000000..642193e --- /dev/null +++ b/assets/javascripts/rectangles/engine/rooms.js @@ -0,0 +1,31 @@ +var Rooms = new function(){ + + var base = this + + base.list = [] + base.regions = [] + + base.init = function(){ + Builder.init() + Clipper.init() + Mover.init() + } + + base.filter = function(f){ + return base.list.filter(f) + } + + base.add_with_rect = function(rect){ + var room = new Room({ + id: base.rooms.length, + rect: rect, + height: quantize(randrange(300,800), 50), + }) + base.list.push(room) + } + + base.forEach = function(f){ + return base.list.forEach(f) + } + +} diff --git a/assets/javascripts/rectangles/engine/scenery.js b/assets/javascripts/rectangles/engine/scenery.js index faeaf6b..3a43755 100644 --- a/assets/javascripts/rectangles/engine/scenery.js +++ b/assets/javascripts/rectangles/engine/scenery.js @@ -30,7 +30,7 @@ var scenery = new function(){ img.height = ~~(300 * img.naturalHeight/img.naturalWidth) }) - clipper.rooms.forEach(function(room){ + Rooms.forEach(function(room){ room.walls.forEach(function(wall){ new_image(wall, choice(images)) }) @@ -45,7 +45,7 @@ var scenery = new function(){ var mx_img = new MX.Image({ src: img.src, x: 0, - y: clipper.rooms[wall.room].height/2 - img.height/2 - 20, + y: Rooms.list[wall.room].height/2 - img.height/2 - 20, z: 0, scale: 300/img.naturalWidth, rotationY: 0, diff --git a/assets/javascripts/rectangles/map/draw.js b/assets/javascripts/rectangles/map/draw.js index 8e63003..b2fc05f 100644 --- a/assets/javascripts/rectangles/map/draw.js +++ b/assets/javascripts/rectangles/map/draw.js @@ -13,7 +13,7 @@ map.draw = new function(){ ctx.translate( map.center.a, map.center.b) ctx.scale( -1, 1 ) - map.draw.regions(clipper.regions) + map.draw.regions(Rooms.regions) map.draw.mouse(map.ui.mouse.cursor) map.draw.coords() scene && map.draw.camera(scene.camera) diff --git a/assets/javascripts/rectangles/map/ui.js b/assets/javascripts/rectangles/map/ui.js index d442c99..c6ba4b3 100644 --- a/assets/javascripts/rectangles/map/ui.js +++ b/assets/javascripts/rectangles/map/ui.js @@ -45,7 +45,7 @@ map.ui = new function(){ return } - var intersects = clipper.rooms.filter(function(r){ + var intersects = Rooms.filter(function(r){ return r.focused = r.rect.contains(cursor.x.a, cursor.y.a) }) @@ -103,7 +103,7 @@ map.ui = new function(){ if (cursor.height() > side_min && cursor.width() > side_min) { cursor.x.abs().quantize(1) cursor.y.abs().quantize(1) - clipper.add_room( cursor ) + Rooms.add_with_rect( cursor ) } } @@ -120,13 +120,13 @@ map.ui = new function(){ function mousewheel (e, val, delta){ var cursor = base.mouse.cursor - var intersects = clipper.rooms.filter(function(r){ + var intersects = Rooms.filter(function(r){ return r.focused = r.rect.contains(cursor.x.a, cursor.y.a) }) if (intersects.length) { intersects[0].height = clamp( ~~(intersects[0].height - delta), height_min, height_max ) - clipper.update() + Clipper.update() } else { map.set_zoom(map.zoom_exponent - delta/20) diff --git a/assets/javascripts/rectangles/models/room.js b/assets/javascripts/rectangles/models/room.js index 3636284..4c5643a 100644 --- a/assets/javascripts/rectangles/models/room.js +++ b/assets/javascripts/rectangles/models/room.js @@ -4,7 +4,7 @@ var FRONT = 0x1, BACK = 0x2, LEFT = 0x4, RIGHT = 0x8, FLOOR = 0x10, CEILING = 0x window.Room = (function(){ var Room = function(opt){ - this.id = opt.id || clipper.rooms.length + this.id = opt.id || Rooms.list.length this.rect = opt.rect this.regions = [] this.walls = [] diff --git a/assets/javascripts/rectangles/models/wall.js b/assets/javascripts/rectangles/models/wall.js index 8a74782..88eb75d 100644 --- a/assets/javascripts/rectangles/models/wall.js +++ b/assets/javascripts/rectangles/models/wall.js @@ -51,7 +51,7 @@ window.Wall = (function(){ Wall.prototype.bounds_for = function(img) { var coord = this.side & FRONT_BACK ? this.rect.x : this.rect.y return new Rect( new vec2( coord.a + img.width/2, coord.b - img.width/2 ), - new vec2( img.height/2, clipper.rooms[this.room].height - img.height/2 ) ) + new vec2( img.height/2, Rooms.list[this.room].height - img.height/2 ) ) } Wall.prototype.fits = function(img){ if (this.side & FRONT_BACK && this.rect.x.length() < img.width) { @@ -104,7 +104,7 @@ window.Wall = (function(){ Wall.prototype.siblings = function(){ var base = this var match = base.side | base.half_side - var walls = clipper.rooms[this.room].walls.filter(function(w){ + var walls = Rooms.list[this.room].walls.filter(function(w){ return (w.side | w.half_side) & match }) return walls; diff --git a/assets/javascripts/rectangles/util/colors.js b/assets/javascripts/rectangles/util/colors.js index bb3662e..e8e60d0 100644 --- a/assets/javascripts/rectangles/util/colors.js +++ b/assets/javascripts/rectangles/util/colors.js @@ -44,7 +44,7 @@ var select = document.querySelector("#palette") select.addEventListener("change", function(){ colors = color_palettes[select.value] - clipper.rooms.forEach(function(room){ + Rooms.list.forEach(function(room){ room.walls.forEach(function(wall){ wall.randomize_colors() }) diff --git a/assets/javascripts/rectangles/util/sort.js b/assets/javascripts/rectangles/util/sort.js index 17231ea..ec0f5e9 100644 --- a/assets/javascripts/rectangles/util/sort.js +++ b/assets/javascripts/rectangles/util/sort.js @@ -1,22 +1,22 @@ function compare_rect_position(a,b){ - if (a.x.a < b.x.a) { + if (a[0].x.a < b[0].x.a) { return -1 } - if (a.x.a > b.x.a) { + if (a[0].x.a > b[0].x.a) { return 1 } - if (a.y.a < b.y.a) { + if (a[0].y.a < b[0].y.a) { return -1 } - if (a.y.a > b.y.a) { + if (a[0].y.a > b[0].y.a) { return 1 } return 0 } -function compare_rect_area (a,b){ +function compare_car_reversed (a,b){ if (a[0] < b[0]) { return 1 } @@ -25,37 +25,57 @@ function compare_rect_area (a,b){ } return 0 } +function compare_car (a,b){ + if (a[0] < b[0]) { + return -1 + } + if (a[0] > b[0]) { + return 1 + } + return 0 +} + +function room_id_tuple (r){ return [r.id, r] } +function room_height_tuple (r){ return [r.height, r] } +function room_area_tuple (r){ return [r.rect.area(), r] } +function rect_area_tuple (r){ return [r.area(), r] } + +function room_rect_tuple (r){ return [r.rect, r] } +function identity_tuple (r){ return [r, r] } +function car (r){ return r[0] } +function cdr (r){ return r[1] } function sort_rooms_by_id(list){ - return list.sort(function(a,b){ - return a.id < b.id ? -1 : a.id == b.id ? 0 : 1 - }) + return list.map(room_id_tuple) + .sort(compare_car) + .map(cdr) } function sort_rooms_by_height(list){ - return list.sort(function(b,a){ - return a.height < b.height ? -1 : a.height == b.height ? 0 : 1 - }) + return list.map(room_height_tuple) + .sort(compare_car) + .map(cdr) } function sort_rooms_by_position(list){ - return list.sort(function(a,b){ - return compare_rect_position(a.rect, b.rect) - }) + return list.map(room_rect_tuple) + .sort(compare_rect_position) + .map(cdr) } function sort_rooms_by_area(list){ - return list.map(function(r){ return [r.rect.area(), r] }) + return list.map(room_area_tuple)) .sort(compare_rect_area) - .map(function(r){ return r[1] }) + .map(cdr) } - function sort_rects_by_position(list){ - return list.sort(compare_rect_position) + return list.map(identity_tuple) + .sort(compare_rect_position) + .map(cdr) } function sort_rects_by_area(list){ - return list.map(function(r){ return [r.area(), r] }) + return list.map(rect_area_tuple) .sort(compare_rect_area) - .map(function(r){ return r[1] }) + .map(cdr) } function compare_z(a,b){ |
