summaryrefslogtreecommitdiff
path: root/assets/javascripts/rectangles/engine
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2014-06-03 16:24:10 -0400
committerJules Laplace <jules@okfoc.us>2014-06-03 16:24:28 -0400
commit607f69c67a5b4dc72d2754192e3cdf67d0ad11d0 (patch)
tree6556e7922c5bedb274bb1650e5dd100643a7895d /assets/javascripts/rectangles/engine
parentd31259291d807c851de4396921e0c26b6dd8dce2 (diff)
partitioning client and serveR
Diffstat (limited to 'assets/javascripts/rectangles/engine')
-rw-r--r--assets/javascripts/rectangles/engine/map/_map.js40
-rw-r--r--assets/javascripts/rectangles/engine/map/draw.js162
-rw-r--r--assets/javascripts/rectangles/engine/map/ui.js131
-rw-r--r--assets/javascripts/rectangles/engine/rooms/_rooms.js41
-rw-r--r--assets/javascripts/rectangles/engine/rooms/builder.js294
-rw-r--r--assets/javascripts/rectangles/engine/rooms/clipper.js104
-rw-r--r--assets/javascripts/rectangles/engine/rooms/mover.js82
-rw-r--r--assets/javascripts/rectangles/engine/scenery/_scenery.js45
-rw-r--r--assets/javascripts/rectangles/engine/scenery/image/_image.js52
-rw-r--r--assets/javascripts/rectangles/engine/scenery/image/move.js103
-rw-r--r--assets/javascripts/rectangles/engine/scenery/image/resize.js201
11 files changed, 0 insertions, 1255 deletions
diff --git a/assets/javascripts/rectangles/engine/map/_map.js b/assets/javascripts/rectangles/engine/map/_map.js
deleted file mode 100644
index 53084bb..0000000
--- a/assets/javascripts/rectangles/engine/map/_map.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-*/
-
-window.ctx = window.w = window.h = null;
-
-var map = new function(){
- var base = this
- base.el = document.querySelector("#map")
- base.dimensions = new vec2(500,500)
- base.bounds = new vec2(500,500)
- base.center = new vec2(0,0)
-
- base.sides = function(){
- var sides = base.bounds.clone().div(2).div(base.zoom)
- return new Rect( base.center.a - sides.a, -base.center.b - sides.b,
- base.center.a + sides.a, -base.center.b + sides.b )
- }
-
- base.zoom = 1/8
- base.zoom_exponent = -3
- base.set_zoom = function (n) {
- base.zoom_exponent = n
- base.zoom = pow(2, base.zoom_exponent)
- }
-
- var canvas = document.createElement("canvas")
- var ctx = window.ctx = canvas.getContext("2d")
- var w = window.w = canvas.width = 500
- var h = window.h = canvas.height = 500
- document.querySelector("#map").appendChild(canvas)
-
- base.update = function(){
- base.draw.animate()
- }
-
- base.toggle = function(){
- $(base.el).toggle()
- }
-
-}
diff --git a/assets/javascripts/rectangles/engine/map/draw.js b/assets/javascripts/rectangles/engine/map/draw.js
deleted file mode 100644
index b2fc05f..0000000
--- a/assets/javascripts/rectangles/engine/map/draw.js
+++ /dev/null
@@ -1,162 +0,0 @@
-
-map.draw = new function(){
-
- var base = this
-
- base.animate = function(){
- ctx.save()
- map.draw.clear_canvas()
- map.draw.ruler()
-
- ctx.translate( map.bounds.a * 1/2, map.bounds.b * 1/2)
- ctx.scale( map.zoom, map.zoom )
- ctx.translate( map.center.a, map.center.b)
- ctx.scale( -1, 1 )
-
- map.draw.regions(Rooms.regions)
- map.draw.mouse(map.ui.mouse.cursor)
- map.draw.coords()
- scene && map.draw.camera(scene.camera)
-
- ctx.restore()
- }
-
- base.clear_canvas = function(){
- ctx.fillStyle = "rgba(255,255,255,0.99)"
- ctx.clearRect(0,0,w,h)
- ctx.fillRect(0,0,w,h)
- }
-
- base.ruler = function (){
- ctx.strokeStyle = "rgba(80,80,80,0.5)"
- ctx.lineWidth = 1
- var len = 5
- for (var i = 0.5; i < w; i += 10) {
- line(i, 0, i, len)
- line(0, i, len, i)
- }
- }
-
- base.regions = function(regions){
- for (var i = 0; i < regions.length; i++) {
- if (regions[i].dupe) continue
- ctx.fillStyle = colors[i % colors.length]
- fill_region(regions[i])
- stroke_sides(regions[i])
- }
- }
-
- base.mouse = function(mouse){
- var radius = 3 / map.zoom
-
- ctx.fillStyle = "rgba(255,0,0,0.4)";
- ctx.beginPath();
- ctx.arc(mouse.x.b, mouse.y.b, radius, 0, 2*Math.PI, false);
- ctx.fill();
-
- if (mouse.width() != 0 && mouse.height() != 0) {
- if (map.ui.dragging) {
- stroke_rect(mouse)
- }
- else {
- ctx.fillStyle = "rgba(255,255,0,0.5)"
- fill_region( mouse.clone().translate() )
- }
- }
- }
-
- base.camera = function(cam){
- ctx.lineWidth = 0.5
-
- ctx.save()
-
- ctx.translate(cam.x, cam.z)
- ctx.rotate(cam.rotationY)
-
- var radius = 3 / map.zoom
-
- ctx.fillStyle = '#888';
-
- ctx.beginPath();
- ctx.moveTo(0,0)
- ctx.lineTo(-radius,-radius/2)
- ctx.lineTo(0,radius*3)
- ctx.lineTo(radius,-radius/2)
- ctx.moveTo(0,0)
- ctx.fill()
-
- ctx.restore()
- }
-
- base.coords = function(){
- ctx.fillStyle = "#888";
- dot_at(0,0)
- ctx.fillStyle = "#bbb";
- dot_at(100,0)
- dot_at(0,100)
- ctx.fillStyle = "#ddd";
- dot_at(200,0)
- dot_at(0,200)
- ctx.fillStyle = "#eee";
- dot_at(300,0)
- dot_at(0,300)
-
- ctx.strokeStyle = "rgba(0,0,0,0.1)"
- ctx.lineWidth = 1/map.zoom
-
- var sides = map.sides()
- var quant = sides.clone().quantize(200)
- for (var x = quant.x.a - 200; x <= quant.x.b; x += 200) {
- line(x, sides.y.a, x, sides.y.b)
- }
- for (var y = quant.y.a - 200; y <= quant.y.b; y += 200) {
- line(sides.x.a, y, sides.x.b, y)
- }
- }
-
- //
-
- function line (x,y,a,b,translation){
- if (translation) {
- x += translation.a
- a += translation.a
- y += translation.b
- b += translation.b
- }
- ctx.beginPath()
- ctx.moveTo(x,y)
- ctx.lineTo(a,b)
- ctx.stroke()
- }
-
- function fill_region(r){
- ctx.fillRect(r.x.a + r.translation.a,
- r.y.a + r.translation.b,
- r.x.length(),
- r.y.length())
- }
-
- function stroke_sides (r){
- if (r.sides & FRONT) line(r.x.a, r.y.a, r.x.b, r.y.a)
- if (r.sides & BACK) line(r.x.a, r.y.b, r.x.b, r.y.b)
- if (r.sides & LEFT) line(r.x.a, r.y.a, r.x.a, r.y.b)
- if (r.sides & RIGHT) line(r.x.b, r.y.a, r.x.b, r.y.b)
- }
-
- function stroke_rect (r){
- line(r.x.a, r.y.a, r.x.b, r.y.b, r.translation)
- }
-
- function dot_at (x,z){
- ctx.save()
- ctx.translate(x,z)
-
- var radius = 2 / map.zoom
-
- ctx.beginPath();
- ctx.arc(0, 0, radius, 0, 2*Math.PI, false);
- ctx.fill();
-
- ctx.restore()
- }
-} \ No newline at end of file
diff --git a/assets/javascripts/rectangles/engine/map/ui.js b/assets/javascripts/rectangles/engine/map/ui.js
deleted file mode 100644
index 6e9a5ab..0000000
--- a/assets/javascripts/rectangles/engine/map/ui.js
+++ /dev/null
@@ -1,131 +0,0 @@
-
-map.ui = new function(){
-
- var base = this
-
- base.creating = base.dragging = base.resizing = false
-
- base.mouse = new mouse({
- el: map.el,
- down: down,
- move: move,
- drag: drag,
- up: up,
- rightclick: rightclick,
- })
-
- base.wheel = new wheel({
- el: map.el,
- update: mousewheel,
- })
-
- //
-
- function down (e, cursor){
- cursor.x.div(w).add(0.5).mul(map.bounds.a / map.zoom).add(map.center.a)
- cursor.y.div(h).sub(0.5).mul(map.bounds.b / map.zoom).sub(map.center.b)
-
- if (e.ctrlKey || e.which === 3) {
- cursor.quantize(1)
- map.center.a = cursor.x.a
- map.center.b = -cursor.y.a
- console.log(map.center+"")
- cursor.x.b = cursor.x.a
- cursor.y.b = cursor.y.a
- base.mouse.down = false
- e.preventDefault()
- e.stopPropagation()
- return
- }
-
- var intersects = Rooms.filter(function(r){
- return r.focused = r.rect.contains(cursor.x.a, cursor.y.a)
- })
-
- if (intersects.length) {
- base.dragging = intersects[0]
- base.resizing = base.dragging.rect.nearEdge(cursor.x.a, cursor.y.a, resize_margin / map.zoom)
- base.dragging.rect.translation.sides = base.resizing
- }
- else {
- base.creating = true
- }
-
- if (e.shiftKey && base.dragging) {
- base.dragging.rect.quantize(10)
- }
- }
-
- function move (e, cursor) {
- cursor.x.div(w).add(0.5).mul(map.bounds.a / map.zoom).add(map.center.a)
- cursor.y.div(h).sub(0.5).mul(map.bounds.b / map.zoom).sub(map.center.b)
- }
-
- function drag (e, cursor) {
- cursor.x.b = ((cursor.x.b/w)+0.5) * map.bounds.a / map.zoom + map.center.a
- cursor.y.b = ((cursor.y.b/h)-0.5) * map.bounds.b / map.zoom - map.center.b
-
- if (base.resizing) {
- var x_length = base.dragging.rect.x.length(),
- y_length = base.dragging.rect.y.length()
-
- if (base.resizing & LEFT) {
- base.dragging.rect.translation.a = clamp( cursor.x.magnitude(), x_length - side_max, x_length - side_min )
- }
- if (base.resizing & RIGHT) {
- base.dragging.rect.translation.a = clamp( cursor.x.magnitude(), side_min - x_length, side_max - x_length )
- }
- if (base.resizing & FRONT) {
- base.dragging.rect.translation.b = clamp( cursor.y.magnitude(), y_length - side_max, y_length - side_min )
- }
- if (base.resizing & BACK) {
- base.dragging.rect.translation.b = clamp( cursor.y.magnitude(), side_min - y_length, side_max - y_length )
- }
- }
- else if (base.dragging) {
- base.dragging.rect.translation.a = cursor.x.magnitude()
- base.dragging.rect.translation.b = cursor.y.magnitude()
- }
- }
-
- function up (e, cursor, new_cursor) {
- new_cursor.x.div(w).add(0.5).mul(map.bounds.a / map.zoom).add(map.center.a)
- new_cursor.y.div(h).sub(0.5).mul(map.bounds.b / map.zoom).sub(map.center.b)
-
- if (base.creating) {
- if (cursor.height() > side_min && cursor.width() > side_min) {
- cursor.x.abs().quantize(1)
- cursor.y.abs().quantize(1)
- Rooms.add_with_rect( cursor )
- }
- }
-
- if (base.resizing) {
- base.dragging.rect.resize()
- }
- else if (base.dragging) {
- base.dragging.rect.translate()
- }
-
- base.creating = base.dragging = base.resizing = false
- }
-
- function mousewheel (e, val, delta){
- var cursor = base.mouse.cursor
-
- 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 )
- Rooms.clipper.update()
- }
- else {
- map.set_zoom(map.zoom_exponent - delta/20)
- }
- }
-
- function rightclick (e){
- }
-}
diff --git a/assets/javascripts/rectangles/engine/rooms/_rooms.js b/assets/javascripts/rectangles/engine/rooms/_rooms.js
deleted file mode 100644
index 411a093..0000000
--- a/assets/javascripts/rectangles/engine/rooms/_rooms.js
+++ /dev/null
@@ -1,41 +0,0 @@
-var Rooms = new function(){
-
- var base = this
-
- base.list = []
- base.regions = []
-
- base.init = function(){
- Rooms.builder.init()
- Rooms.clipper.init()
- Rooms.mover.init()
- }
-
- base.filter = function(f){
- return base.list.filter(f)
- }
-
- base.add_with_rect = function(rect){
- var room = new Room({
- id: base.list.length,
- rect: rect,
- height: quantize(randrange(300,800), 50),
- })
- base.list.push(room)
- }
-
- base.forEach = function(f){
- 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/rooms/builder.js b/assets/javascripts/rectangles/engine/rooms/builder.js
deleted file mode 100644
index 8586a7b..0000000
--- a/assets/javascripts/rectangles/engine/rooms/builder.js
+++ /dev/null
@@ -1,294 +0,0 @@
-
-Rooms.builder = new function(){
- var base = this
-
- var els = []
-
- base.init = function(){
- base.bind()
- }
-
- base.bind = function(){
- app.on("clip", rebuild)
- }
-
- function rebuild(){
- if (window.scene) {
- clear()
- build()
- bind()
- }
- }
- function build (){
- Rooms.regions.forEach(function(room){
- build_walls(room).forEach(function(el){
- els.push(el)
- scene.add(el)
- })
- })
-
- Rooms.sorted_by_height().forEach(function(room){
- build_floors(room).forEach(function(el){
- els.push(el)
- scene.add(el)
- })
- })
- }
-
- function bind (){
- Rooms.forEach(function(room){
- room.walls = room.group_mx_walls()
- room.walls.forEach(function(wall){
- wall.bind()
- wall.randomize_colors()
- })
- })
- }
-
- function clear (){
- els.forEach(function(el){
- scene.remove(el)
- el.destroy && el.destroy()
- })
- els = []
- }
-
- function build_walls (region){
- var room = Rooms.list[ region.id ]
-
- var list = [], el = null
-
- var width = region.x.length()
- var depth = region.y.length()
- var height = room.height
-
- if (region.sides & FRONT) {
- el = make_wall('.front')
- el.width = width
- el.height = height
- el.rotationY = PI
- el.x = region.x.a + width/2
- el.y = height/2
- el.z = region.y.a
- el.rect = region
- el.side = FRONT
- room.mx_walls.push(el)
- list.push(el)
- }
- if (region.sides & BACK) {
- var el = make_wall('.back')
- el.width = width
- el.height = height
- el.rotationY = 0
- el.x = region.x.b - width/2
- el.y = height/2
- el.z = region.y.b
- el.rect = region
- el.side = BACK
- room.mx_walls.push(el)
- list.push(el)
- }
- if (region.sides & LEFT) {
- el = make_wall('.left')
- el.rotationY = HALF_PI
- el.height = height
- el.width = depth
- el.x = region.x.a
- el.y = height/2
- el.z = region.y.a + depth/2
- el.rect = region
- el.side = LEFT
- room.mx_walls.push(el)
- list.push(el)
- }
- if (region.sides & RIGHT) {
- el = make_wall('.right')
- el.rotationY = -HALF_PI
- el.height = height
- el.width = depth
- el.x = region.x.b
- el.y = height/2
- el.z = region.y.b - depth/2
- el.rect = region
- el.side = RIGHT
- room.mx_walls.push(el)
- list.push(el)
- }
-
- return list
- }
-
- function build_floors(room){
- var list = [], el = null
-
- var constructed = room.intersects.filter(function(room){ return room.constructed })
- sort_rooms_by_height(constructed)
-
- if (constructed.length > 0) {
- // render the regions that don't intersect with anything we've already rendered
- // if the height is different, calculate the overlapping sides and render half-walls
- room.regions.forEach(function(region){
- var intersected = false
- for (var i = 0; i < constructed.length; i++) {
- if (constructed[i].rect.contains(region)) {
- intersected = true
- // r.sides = 0xf
- // half_sides
- }
- else if (constructed[i].rect.intersects(region)) {
- intersected = true
- if (room.height < constructed[i].height) {
- var ceiling_walls = make_ceiling_walls( room, constructed[i], region )
- list = list.concat(ceiling_walls)
- }
- }
- }
- if (! intersected) {
- el = make_floor(room, region)
- list.push( el )
- room.mx_floor.push(el)
-
- el = make_ceiling(room, region)
- list.push( el )
- room.mx_ceiling.push(el)
- }
- })
-
- }
- else {
- // render floor and ceiling for the entire rectangle
- el = make_floor(room, room.rect)
- list.push( el )
- room.mx_floor.push(el)
-
- el = make_ceiling(room, room.rect)
- list.push( el )
- room.mx_ceiling.push(el)
- }
-
- room.constructed = true
- return list
- }
-
- function make_ceiling_walls( lo, hi, region ){
- var list = []
-
- 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
- el.height = height
- el.width = depth
- 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.mx_walls.push(el)
- region.half_sides |= LEFT
- el.half_side = LEFT
- }
-
- if (! (region.half_sides & RIGHT) && region.x.b == hi.rect.x.b) {
- el = make_wall('.right')
- el.rotationY = -HALF_PI
- el.height = height
- el.width = depth
- 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.mx_walls.push(el)
- region.half_sides |= RIGHT
- el.half_side = RIGHT
- }
-
- if (! (region.half_sides & FRONT) && region.y.a == hi.rect.y.a) {
- el = make_wall('.front')
- el.width = width
- el.height = height
- el.rotationY = PI
- 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.mx_walls.push(el)
- region.half_sides |= FRONT
- el.half_side = FRONT
- }
-
- if (! (region.half_sides & BACK) && region.y.b == hi.rect.y.b) {
- el = make_wall('.back')
- el.width = width
- el.height = height
- el.rotationY = 0
- 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.mx_walls.push(el)
- region.half_sides |= BACK
- el.half_side = BACK
- }
- return list
- }
-
- function make_floor(room, region){
- var width = region.x.length()
- var depth = region.y.length()
-
- var el = make_wall('.floor')
- el.height = depth
- el.width = width
- el.x = region.x.a + width/2
- el.y = 0
- el.z = region.y.a + depth/2
- el.rotationX = PI/2
- el.rect = region
- el.side = FLOOR
- return el
- }
- function make_ceiling(room, region){
- var width = region.x.length()
- var depth = region.y.length()
- var height = room.height
-
- var el = make_wall('.ceiling')
- el.height = depth
- el.width = width
- el.x = region.x.a + width/2
- el.y = height
- el.z = region.y.a + depth/2
- el.rotationX = -PI/2
- el.rect = region
- el.side = CEILING
- return el
- }
-
- function make_wall(klass){
- var el = new MX.Object3D(".face" + (klass || ""))
- el.width = el.height = el.scaleX = el.scaleY = el.scaleZ = 1
- el.z = el.y = el.x = 0
- el.side = 0
- el.type = "Face"
- el.el.style.opacity = 1.0
- el.side = 0
- el.rect = null
- el.destroy = function(){
- this.el = this.rect = null
- }
-
- // possible if walls are opaque
- // el.el.classList.add("backface-hidden")
-
- return el
- }
-
-}
-
diff --git a/assets/javascripts/rectangles/engine/rooms/clipper.js b/assets/javascripts/rectangles/engine/rooms/clipper.js
deleted file mode 100644
index 8989ba8..0000000
--- a/assets/javascripts/rectangles/engine/rooms/clipper.js
+++ /dev/null
@@ -1,104 +0,0 @@
-
-Rooms.clipper = new function(){
- var base = this
-
- base.init = function(){
- base.bind()
- base.update()
- }
-
- base.bind = function(){
- map.ui.mouse.tube.on("up", function(){ base.update() })
- }
-
- base.update = function(){
- 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 (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()
- }
- }
-
- // 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++) {
- left = rooms[i]
- for (var j = i+1; j < rooms.length; j++) {
- right = rooms[j]
- if (left.rect.intersects(right.rect)) {
- left.clipTo(right.rect)
- right.clipTo(left.rect)
- left.intersects.push(right)
- right.intersects.push(left)
- }
- if (left.rect.x.b < right.rect.x.a) {
- break
- }
- }
- }
- for (var i = 0; i < rooms.length; i++) {
- 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]])
- var tx = new Tree (regions[0].x.a, ty)
- var ttx, tty
-
- for (var i = 1; i < regions.length; i++) {
- ttx = tx.add (regions[i].x.a, null)
- if (ttx.data) {
- tty = ttx.data.add (regions[i].y.a, null)
- // duplicate polygon?
- if (tty.data) {
- tty.data.forEach(function(yy, ii){
- if (yy.intersects(regions[i])) {
- if (yy.area() > regions[i].area()) {
- regions[i].dupe = true
- }
- else {
- yy.dupe = true
- tty.data[ii] = regions[i]
- }
- }
- })
- }
- else {
- tty.data = [regions[i]]
- }
- }
- else {
- ttx.data = new Tree (regions[i].y.a, [regions[i]])
- }
- }
- }
-
- return base
-}
-
diff --git a/assets/javascripts/rectangles/engine/rooms/mover.js b/assets/javascripts/rectangles/engine/rooms/mover.js
deleted file mode 100644
index e67d9bc..0000000
--- a/assets/javascripts/rectangles/engine/rooms/mover.js
+++ /dev/null
@@ -1,82 +0,0 @@
-Rooms.mover = new function(){
-
- var base = this
- base.room = null
- base.noclip = false
-
- base.init = function(){
- base.bind()
- base.update(scene.camera)
- }
-
- base.bind = function(){
- app.on("move", base.update)
- keys.on("backslash", function(){
- base.noclip = ! base.noclip
- base.room = null
- app.movements.gravity( ! base.noclip )
- })
- }
-
- base.update = function(pos){
- var radius = scene.camera.radius
-
- if (base.noclip) {
- cam.x = pos.x
- cam.y = pos.y
- cam.z = pos.z
- return
- }
-
- cam.y = pos.y
-
- // if we were in a room already..
- if (base.room) {
- // check if we're still in the room
- if (base.room.rect.containsDisc(pos.x, pos.z, radius)) {
- cam.x = pos.x
- cam.z = pos.z
- return
- }
-
- // check if we've breached one of the walls.. clamp position if so
- var collision = base.room.collidesDisc(pos.x, pos.z, radius)
-
- if (collision) {
- if (! (collision & LEFT_RIGHT)) {
- cam.x = base.room.rect.x.clampDisc(pos.x, radius)
- }
- else {
- // cam.x = base.room.rect.x.clampDisc(pos.x, radius)
- }
- if (! (collision & FRONT_BACK)) {
- cam.z = base.room.rect.y.clampDisc(pos.z, radius)
- }
- return
- }
-
- // in this case, we appear to have left the room..
- $(".face.active").removeClass("active")
- base.room = null
- }
-
- // collision test failed, so update position
- cam.x = pos.x
- cam.z = pos.z
-
- // determine what room we are in now
- var intersects = Rooms.filter(function(r){
- return r.rect.contains(pos.x, pos.z)
- })
-
- // did we actually enter a room?
- if (intersects.length) {
- base.room = intersects[0]
- base.room.mx_floor.forEach(function(w){ $(w.el).addClass("active") })
- base.room.mx_ceiling.forEach(function(w){ $(w.el).addClass("active") })
- base.room.mx_walls.forEach(function(w){ $(w.el).addClass("active") })
- }
-
- }
-
-}
diff --git a/assets/javascripts/rectangles/engine/scenery/_scenery.js b/assets/javascripts/rectangles/engine/scenery/_scenery.js
deleted file mode 100644
index 867bb6f..0000000
--- a/assets/javascripts/rectangles/engine/scenery/_scenery.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
-var Scenery = new function(){
-
- var base = this;
-
- base.images = []
-
- base.mouse = new mouse ({ use_offset: false })
-
- base.init = function(){
- base.resize.init()
-
- var urls = [
- "http://okfocus.s3.amazonaws.com/office/ducks/duck1.jpg",
- "http://okfocus.s3.amazonaws.com/office/ducks/duck2.jpg",
- "http://okfocus.s3.amazonaws.com/office/ducks/duck3.jpg",
- "http://okfocus.s3.amazonaws.com/office/ducks/duck4.jpg",
- "http://okfocus.s3.amazonaws.com/office/ducks/duck5.jpg",
- ]
- var loader = new Loader(function(){
- base.load(loader.images)
- })
- loader.preloadImages(urls)
- }
-
- base.load = function(images){
- images.forEach(function(img){
- img.width = 300
- img.height = ~~(300 * img.naturalHeight/img.naturalWidth)
- })
-
- Rooms.forEach(function(room){
- room.walls.forEach(function(wall){
- var img = choice(images)
- if (wall.fits(img)) {
- var scene_img = new Scenery.image (wall, img)
- base.images.push(scene_img)
- scene_img.init()
- }
- })
- })
- }
-
- return base
-}
diff --git a/assets/javascripts/rectangles/engine/scenery/image/_image.js b/assets/javascripts/rectangles/engine/scenery/image/_image.js
deleted file mode 100644
index dadb2d2..0000000
--- a/assets/javascripts/rectangles/engine/scenery/image/_image.js
+++ /dev/null
@@ -1,52 +0,0 @@
-Scenery.image = function (wall, img) {
-
- var base = this
-
- base.wall = wall
- base.img = img
- base.dimensions = new vec2(img.width, img.height)
- base.center = wall.center()
- base.bounds = wall.bounds_for(img)
-
- // should be proportional to distance from wall
- var cursor_amp = 1.5
-
- base.init = function(){
- base.build()
- base.bind()
- }
-
- base.build = function(){
- base.mx_img = new MX.Image({
- src: img.src,
- x: base.center.a,
- y: Rooms.list[wall.room].height/2 - img.height/2 - 20,
- z: base.center.b,
- scale: 300/img.naturalWidth,
- rotationY: wall_rotation[ wall.side ],
- backface: false,
- })
- scene.add( base.mx_img )
- base.move = new Scenery.image.move (base)
- }
-
- base.bind = function(){
- base.move.bind()
-// base.resize.bind()
- $(base.mx_img.el).bind({
- mouseenter: function(e){
-// console.log('entered an image')
- // show the resize points for this image
- Scenery.resize.show(base)
- Scenery.image.hovering = true
- },
- mouseleave: function(e){
-// console.log('left an image')
- Scenery.resize.defer_hide(base)
- Scenery.image.hovering = false
- }
- })
- }
-
- return base
-}
diff --git a/assets/javascripts/rectangles/engine/scenery/image/move.js b/assets/javascripts/rectangles/engine/scenery/image/move.js
deleted file mode 100644
index e79ede9..0000000
--- a/assets/javascripts/rectangles/engine/scenery/image/move.js
+++ /dev/null
@@ -1,103 +0,0 @@
-
-
-Scenery.image.move = function(base){
-
- var x, y, z, bounds
- var dragging = false
-
- this.bind = function(){
- Scenery.mouse.bind_el(base.mx_img.el)
- Scenery.mouse.on("down", down)
- Scenery.mouse.on("enter", switch_wall)
- Scenery.mouse.on("drag", drag)
- Scenery.mouse.on("up", up)
- }
-
- this.unbind = function(){
- Scenery.mouse.bind_el(base.mx_img.el)
- Scenery.mouse.off("down", down)
- Scenery.mouse.off("enter", switch_wall)
- Scenery.mouse.off("drag", drag)
- Scenery.mouse.off("up", up)
- }
-
- function down (e, cursor){
- if (e.target != base.mx_img.el) return;
- dragging = true
- x = base.mx_img.x
- y = base.mx_img.y
- z = base.mx_img.z
- bounds = base.bounds
- document.body.classList.add("dragging")
- }
-
- function drag (e, cursor){
- if (! dragging) return
-
- base.mx_img.y = bounds.y.clamp( y - cursor.y.magnitude()*cursor_amp )
- switch (base.wall.side) {
- case FRONT:
- case BACK:
- base.mx_img.x = bounds.x.clamp( x + cos(wall_rotation[base.wall.side]) * cursor.x.magnitude()*cursor_amp )
- break
- case LEFT:
- case RIGHT:
- base.mx_img.z = bounds.x.clamp( z + sin(wall_rotation[base.wall.side]) * cursor.x.magnitude()*cursor_amp )
- break
- }
-
- Scenery.resize.move_dots()
- }
-
- function up (e, cursor){
- dragging = false
- document.body.classList.remove("dragging")
- }
-
- function switch_wall (e, new_wall, cursor){
- if (! dragging) return
- if (new_wall.uid == base.wall.uid) return
- if (! new_wall.fits(base.img)) return
-
- base.bounds = bounds = new_wall.bounds_for(base.img)
- base.center = new_wall.center()
-
- x = base.center.a
- z = base.center.b
-
- var wall_group = base.wall.side | new_wall.side
-
- if (base.wall.side !== new_wall.side && wall_group !== FRONT_BACK && wall_group !== LEFT_RIGHT) {
- switch (base.wall.side) {
- case FRONT:
- z = bounds.x.a
- break
- case BACK:
- z = bounds.x.b
- break
- case LEFT:
- x = bounds.x.a
- break
- case RIGHT:
- x = bounds.x.b
- break
- }
- }
-
- cursor.x.a = cursor.x.b
-
- base.mx_img.move({
- x: x,
- z: z,
- rotationY: wall_rotation[ new_wall.side ]
- })
-
- base.wall = new_wall
-
- Scenery.resize.rotate_dots()
- Scenery.resize.move_dots()
- }
-
- return this
-
-} \ No newline at end of file
diff --git a/assets/javascripts/rectangles/engine/scenery/image/resize.js b/assets/javascripts/rectangles/engine/scenery/image/resize.js
deleted file mode 100644
index a0a98c5..0000000
--- a/assets/javascripts/rectangles/engine/scenery/image/resize.js
+++ /dev/null
@@ -1,201 +0,0 @@
-Scenery.resize = new function(){
-
- var base = this
-
- var obj
- var x, y, z, bounds
- var dragging = false
- var dimensions, position
-
- var dots = [], dot, selected_dot
-
- base.init = function(){
- base.build()
- base.bind()
- }
-
- // create 9 dots at the corners of the div
- base.build = function(){
- [ TOP,
- TOP_RIGHT,
- RIGHT,
- BOTTOM_RIGHT,
- BOTTOM,
- BOTTOM_LEFT,
- LEFT,
- TOP_LEFT ].forEach(base.build_dot)
- }
-
- // generate a dot element
- base.build_dot = function(side) {
- var dot = new MX.Object3D('.dot')
- dot.width = dot.height = dot_side
- dot.side = side
- $(dot.el).on({
- mouseenter: function(){ base.hovering = true },
- mouseleave: function(){ base.hovering = false },
- })
- dots.push(dot)
- }
-
- base.add_dots = function(){
- dots.forEach(function(dot){
- scene.add(dot)
- })
- }
-
- // rotate the dots as appropriate
- base.rotate_dots = function(){
- rotationY = wall_rotation[obj.wall.side]
- dots.forEach(function(dot){
- dot.rotationY = rotationY
- })
- }
-
- // move all the dots to the object's current position
- base.move_dots = function(){
- x = obj.mx_img.x + sin(rotationY) * dot_distance_from_picture
- y = obj.mx_img.y
- z = obj.mx_img.z - cos(rotationY) * dot_distance_from_picture
-
- dots.forEach(function(dot){
- base.move_dot(dot)
- })
- }
-
- // move a dot .. to the initial position of the image
- base.move_dot = function(dot){
- dot.x = x
- dot.y = y
- dot.z = z
-
- if (dot.side & TOP) {
- dot.y += obj.mx_img.height * obj.mx_img.scale / 2
- }
- if (dot.side & BOTTOM) {
- dot.y -= obj.mx_img.height * obj.mx_img.scale / 2
- }
- if (dot.side & LEFT) {
- dot.x -= cos(rotationY) * (obj.mx_img.width * obj.mx_img.scale) / 2
- dot.z -= sin(rotationY) * (obj.mx_img.width * obj.mx_img.scale) / 2
- }
- if (dot.side & RIGHT) {
- dot.x += cos(rotationY) * (obj.mx_img.width * obj.mx_img.scale) / 2
- dot.z += sin(rotationY) * (obj.mx_img.width * obj.mx_img.scale) / 2
- }
- }
-
- // pick a new object to focus on and show the dots
- base.show = function(new_object) {
- if (obj === new_object) return
-
- obj = new_object
-
- base.add_dots()
- base.rotate_dots()
- base.move_dots()
- }
-
- // dismiss the dots on blur
- var dotsHideTimeout;
- base.defer_hide = function(){
- clearTimeout(dotsHideTimeout)
-
- dotsHideTimeout = setTimeout(function(){
- if (Scenery.image.hovering || Scenery.resize.hovering || Scenery.mouse.down) return
- Scenery.resize.hide()
- }, dot_hide_delay)
- }
- base.hide = function () {
- obj = null
- dots.forEach(function(dot){
- scene.remove(dot)
- })
- }
-
- base.bind = function(){
- dots.forEach(function(dot){
- Scenery.mouse.bind_el(dot.el)
- $(dot.el).bind({
- mouseenter: function(e){
- Scenery.resize.hovering = true
- },
- mouseleave: function(e){
- Scenery.resize.hovering = false
- base.defer_hide()
- }
- })
- })
- Scenery.mouse.on("down", down)
- Scenery.mouse.on("drag", drag)
- Scenery.mouse.on("up", up)
- }
-
- this.unbind = function(){
- dots.forEach(function(dot){
- Scenery.mouse.unbind_el(dot.el)
- })
- Scenery.mouse.off("down", down)
- Scenery.mouse.off("drag", drag)
- Scenery.mouse.off("up", up)
- }
-
- function down (e, cursor){
- var selection = dots.filter(function(dot){return e.target == dot.el})
- if (! selection.length) return
-
- selected_dot = selection[0]
- dragging = true
-
- dimensions = new vec2(obj.mx_img.width, obj.mx_img.height)
- position = new vec3(obj.mx_img.x, obj.mx_img.y, obj.mx_img.z)
-
- console.log("down on", sidesToString(selected_dot.side))
-
- document.body.classList.add("dragging")
- }
-
- function drag (e, cursor){
- if (! dragging) return
- // cursor.x.magnitude()*cursor_amp
-
- var x_sign = selected_dot.side & LEFT ? -1 : selected_dot.side & RIGHT ? 1 : 0
- var y_sign = selected_dot.side & TOP ? -1 : selected_dot.side & BOTTOM ? 1 : 0
-
- var translation = new vec2( x_sign * cursor.x.magnitude() * cursor_amp, y_sign * cursor.y.magnitude() * cursor_amp )
-
- if (selected_dot.side & LEFT_RIGHT) {
- obj.mx_img.width = dimensions.a + translation.a
- obj.mx_img.x = position.a + x_sign * cos(rotationY) * translation.a/2 * obj.mx_img.scale
- obj.mx_img.z = position.c + x_sign * sin(rotationY) * translation.a/2 * obj.mx_img.scale
- }
- if (selected_dot.side & TOP_BOTTOM) {
- obj.mx_img.height = dimensions.b + translation.b
- obj.mx_img.y = position.b - y_sign * translation.b/2 * obj.mx_img.scale
- }
-
-// bounds = obj.wall.bounds_for(dimensions)
-
-// base.mx_img.y = bounds.y.clamp( y - cursor.y.magnitude()*cursor_amp )
-// switch (base.wall.side) {
-// case FRONT:
-// case BACK:
-// base.mx_img.x = bounds.x.clamp( x + cos(wall_rotation[base.wall.side]) * cursor.x.magnitude()*cursor_amp )
-// break
-// case LEFT:
-// case RIGHT:
-// base.mx_img.z = bounds.x.clamp( z + sin(wall_rotation[base.wall.side]) * cursor.x.magnitude()*cursor_amp )
-// break
-// }
-
- base.move_dots()
-
- }
-
- function up (e, cursor){
- dragging = false
- selected_dot = null
- document.body.classList.remove("dragging")
- }
-
-}