summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/javascripts/mx/extensions/mx.movements.js2
-rw-r--r--assets/javascripts/rectangles/_env.js22
-rw-r--r--assets/javascripts/rectangles/engine/builder.js15
-rw-r--r--assets/javascripts/rectangles/engine/clipper.js12
-rw-r--r--assets/javascripts/rectangles/engine/mover.js2
-rw-r--r--assets/javascripts/rectangles/engine/rooms.js31
-rw-r--r--assets/javascripts/rectangles/engine/scenery.js4
-rw-r--r--assets/javascripts/rectangles/map/draw.js2
-rw-r--r--assets/javascripts/rectangles/map/ui.js8
-rw-r--r--assets/javascripts/rectangles/models/room.js2
-rw-r--r--assets/javascripts/rectangles/models/wall.js4
-rw-r--r--assets/javascripts/rectangles/util/colors.js2
-rw-r--r--assets/javascripts/rectangles/util/sort.js60
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){