summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles/engine/rooms
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts/rectangles/engine/rooms')
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/_rooms.js72
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/_walls.js137
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/builder.js16
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/clipper.js3
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/grouper.js21
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/mover.js219
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/projector.js30
7 files changed, 421 insertions, 77 deletions
diff --git a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js
index 6f96275..9aff33f 100644
--- a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js
+++ b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js
@@ -13,6 +13,7 @@
vec2 = require('../../models/vec2')
Rect = require('../../models/rect')
Room = require('../../models/room')
+ Walls = require('./_walls')
UidGenerator = require('../../util/uid')
sort = require('../../util/sort')
_ = require('lodash')
@@ -36,6 +37,7 @@
base.list = {}
base.regions = []
+ base.shapesMode = false
base.uid = new UidGenerator(base.list)
@@ -64,13 +66,13 @@
base.remove = function(room){
delete base.list[room.id]
- Rooms.clipper.update()
+ Rooms.rebuild()
}
base.removeAll = function(){
base.list = {}
base.regions = []
- Rooms.clipper.update()
+ Rooms.rebuild()
}
base.count = function(){
@@ -80,6 +82,10 @@
base.forEach = function(f){
return base.values().forEach(f)
}
+
+ base.some = function(f){
+ return base.values().some(f)
+ }
base.map = function(f){
return base.values().map(f)
@@ -88,6 +94,17 @@
base.values = function(){
return _.values(base.list)
}
+
+ base.rebuild = function(walls_data){
+ if (base.shapesMode) return
+ walls_data = walls_data || Walls.serialize()
+ Rooms.clipper.update()
+ Rooms.builder.rebuild()
+ Rooms.grouper.build()
+ Walls.paint()
+ Walls.deserialize(walls_data)
+ app.tube("rooms-built")
+ }
base.serialize = function(){
var rooms = base.map(function(room){
@@ -96,7 +113,7 @@
return rooms
}
- base.deserialize = function(rooms_data){
+ base.deserialize = function(rooms_data, walls_data){
rooms_data.forEach(function(data){
if (! data || ! data.rect) return
var rect = new Rect(data.rect.x[0], data.rect.y[0], data.rect.x[1], data.rect.y[1])
@@ -107,7 +124,46 @@
})
base.add(room)
})
- Rooms.clipper.update()
+ Rooms.rebuild(walls_data)
+ }
+
+ base.deserializeFromShapes = function(data, walls_data) {
+ walls_data = walls_data || Walls.serialize()
+ base.shapesMode = true
+ window.viewHeight = data.viewHeight || app.defaults.viewHeight
+ window.wallHeight = data.wallHeight || app.defaults.wallHeight
+ $(".units").val( data.units )
+
+ Rooms.builder.clear()
+
+ shapes.deserialize( data.shapes )
+ // shapes.build()
+ var regions = RegionList.build()
+
+ regions.forEach(function(region){
+ var room = new Room({
+ rect: region,
+ regions: [region],
+ height: wallHeight,
+ })
+
+ room.sides = region.sides
+ region.id = Rooms.uid("room_")
+ Rooms.list[ region.id ] = room
+ var mx_walls = Rooms.builder.build_walls(region)
+ room.mx_floor = Rooms.builder.make_floor(room, region)
+ room.mx_ceiling = Rooms.builder.make_ceiling(room, region)
+
+ mx_walls.forEach(function(mx){ scene.add(mx) })
+ scene.add(room.mx_floor)
+ scene.add(room.mx_ceiling)
+ })
+
+ Rooms.grouper.build()
+
+ Walls.paint()
+ Walls.deserialize(walls_data)
+ app.tube("rooms-built")
}
base.report = function(){
@@ -118,6 +174,14 @@
return data
}
+ base.extent = function(){
+ var extent = new Rect ( new vec2(Infinity, -Infinity), new vec2(Infinity, -Infinity) )
+ base.forEach(function(room){
+ extent.expand(room.rect)
+ })
+ return extent
+ }
+
base.sorted_by_position = function(){
return sort.rooms_by_position( base.values() )
}
diff --git a/public/assets/javascripts/rectangles/engine/rooms/_walls.js b/public/assets/javascripts/rectangles/engine/rooms/_walls.js
index 82ccb87..38dac84 100644
--- a/public/assets/javascripts/rectangles/engine/rooms/_walls.js
+++ b/public/assets/javascripts/rectangles/engine/rooms/_walls.js
@@ -35,8 +35,23 @@
var base = this
base.list = []
+ base.floors = []
base.lookup = {}
base.colors = {}
+
+ base.init = function(){
+ base.colors = base.copyColors( app.defaults.colors )
+ }
+
+ base.copyColors = function(colors){
+ var copy = {
+ wall: colors.wall.slice(),
+ outline: colors.outline.slice(),
+ floor: colors.floor.slice(),
+ ceiling: colors.ceiling.slice(),
+ }
+ return copy
+ }
base.first = function(){
for (var i in base.list) {
@@ -46,6 +61,10 @@
}
}
+ base.find = function(id){
+ return base.lookup[id]
+ }
+
base.assign = function(list){
base.list = list
base.lookup = {}
@@ -53,11 +72,21 @@
base.lookup[wall.id] = wall
})
}
+
+ base.assignFloors = function(floors){
+ base.floors = floors
+ floors.forEach(function(floor){
+ base.lookup[floor.id] = floor
+ })
+ }
base.bind = function(){
base.list.forEach(function(wall){
wall.bind()
})
+ base.floors.forEach(function(floor){
+ floor.bind()
+ })
}
base.count = function(){
@@ -65,16 +94,20 @@
}
base.forEach = function(f){
- return base.list.forEach(f)
+ return base.values().forEach(f)
}
base.map = function(f){
- return base.list.map(f)
+ return base.values().map(f)
}
-
+
+ base.values = function(){
+ return _.values(base.lookup)
+ }
+
base.serialize = function(){
var data = []
- base.list.forEach(function(wall){
+ base.forEach(function(wall){
data.push(wall.serialize())
})
return data
@@ -84,6 +117,9 @@
walls_data.forEach(function(wall_data){
if (! wall_data) { return }
var wall = base.lookup[ wall_data.id ]
+ if (! wall) {
+ return
+ }
wall.deserialize( wall_data )
})
},
@@ -93,21 +129,91 @@
var outlineColor = rgb_string(Walls.colors.outline)
var floorColor = rgb_string(Walls.colors.floor)
var ceilingColor = rgb_string(Walls.colors.ceiling)
- Walls.forEach(function(wall){
+ Walls.list.forEach(function(wall){
wall.outline(wallColor, outlineColor)
})
- Rooms.forEach(function(room){
- room.setFloorColor(floorColor)
- room.setCeilingColor(ceilingColor)
+ Walls.floors.forEach(function(floor){
+ if (floor.ceiling) floor.color(ceilingColor)
+ else floor.color(floorColor)
})
}
+ base.luminance = function(rgb){
+ rgb = rgb || Walls.colors.ceiling
+ var rgb_max = Math.max.apply(0, rgb)
+ var rgb_min = Math.min.apply(255, rgb)
+ return (rgb_max + rgb_min ) / 2
+ }
+
+ base.setBodyColor = function(){
+ $("#header").toggleClass("black", Walls.luminance() < 100)
+ $("body").css("background-color", rgb_string( Walls.colors.wall ))
+ }
+ base.clearBodyColor = function(){
+ $("#header").removeClass("black")
+ $("body").css("background-color", "transparent")
+ }
+
+ base.setWallpaper = {
+ wall: function(background){
+ var img = new Image ()
+ img.onload = function(){
+ Walls.list.forEach(function(wall){
+ wall.wallpaper(background, img)
+ })
+ }.bind(this)
+ img.src = background.src.replace(/url\(\"?\'?/,"").replace(/\"?\'?\)/,"")
+ img.complete && img.onload()
+ },
+ floor: function(background){
+ Walls.floors.forEach(function(floor){
+ if (floor.ceiling) return
+ floor.wallpaper(background)
+ })
+ },
+ ceiling: function(background){
+ Walls.floors.forEach(function(floor){
+ if (! floor.ceiling) return
+ floor.wallpaper(background)
+ })
+ },
+ }
+
+ base.clearWallpaper = {
+ wall: function(){
+ Walls.list.forEach(function(wall){
+ wall.wallpaper("none")
+ })
+ },
+ outline: function(){
+ },
+ floor: function(){
+ Walls.floors.forEach(function(floor){
+ if (floor.ceiling) return
+ floor.wallpaper("none")
+ })
+ },
+ ceiling: function(){
+ Walls.floors.forEach(function(floor){
+ if (! floor.ceiling) return
+ floor.wallpaper("none")
+ })
+ },
+ }
+
base.setColor = {
wall: function(rgb){
var rgbaColor = rgba_string(rgb, app.defaults.wallOpacity)
+ var rgbColor = rgb_string(rgb)
+
+ if (Rooms.mover.room) {
+ $("#header").toggleClass("black", base.luminance() < 100)
+ $("body").css("background-color", rgbColor)
+ }
+
Walls.colors.wall = rgb
- Walls.forEach(function(wall){
+ Walls.list.forEach(function(wall){
wall.outline(rgbaColor, null)
})
},
@@ -115,7 +221,7 @@
outline: function(rgb){
var rgbColor = rgb_string(rgb)
Walls.colors.outline = rgb
- Walls.forEach(function(wall){
+ Walls.list.forEach(function(wall){
wall.outline(null, rgbColor)
})
},
@@ -123,19 +229,20 @@
floor: function(rgb){
var rgbColor = rgb_string(rgb)
Walls.colors.floor = rgb
- Rooms.forEach(function(room){
- room.setFloorColor(rgbColor)
+ Walls.floors.forEach(function(floor){
+ if (floor.ceiling) return
+ floor.color(rgbColor)
})
},
ceiling: function(rgb){
var rgbColor = rgb_string(rgb)
Walls.colors.ceiling = rgb
- Rooms.forEach(function(room){
- room.setCeilingColor(rgbColor)
+ Walls.floors.forEach(function(floor){
+ if (! floor.ceiling) return
+ floor.color(rgbColor)
})
},
-
}
}
diff --git a/public/assets/javascripts/rectangles/engine/rooms/builder.js b/public/assets/javascripts/rectangles/engine/rooms/builder.js
index 6a89158..f78fb91 100644
--- a/public/assets/javascripts/rectangles/engine/rooms/builder.js
+++ b/public/assets/javascripts/rectangles/engine/rooms/builder.js
@@ -14,6 +14,7 @@
PI = Math.PI
HALF_PI = PI/2
TOP = CEILING, BOTTOM = FLOOR
+ $ = { browser: { mozilla: false } }
function sidesToString(sides){
var s = ""
if (sides & FRONT) s += "front "
@@ -32,19 +33,16 @@
var els = []
base.init = function(){
- base.bind()
+ // base.bind()
}
base.bind = function(){
- app.on("clip", base.rebuild.bind(base))
}
base.rebuild = function(){
if (window.scene) {
base.clear()
base.build()
- Rooms.grouper.build()
- app.tube("rooms-built")
}
}
@@ -264,6 +262,9 @@
el.rotationX = PI/2
el.rect = region
el.side = FLOOR
+ if ($.browser.mozilla) {
+ el.el.style.display = "none"
+ }
return el
}
this.make_ceiling = function (room, region) {
@@ -280,10 +281,13 @@
el.rotationX = -PI/2
el.rect = region
el.side = CEILING
+ if ($.browser.mozilla) {
+ el.el.style.display = "none"
+ }
return el
}
this.make_wall = function (klass) {
- // klass += ".backface-hidden"
+ klass += ".backface-hidden"
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
@@ -296,7 +300,7 @@
this.el = this.rect = this.face = null
}
- // possible if walls are opaque
+ // preferable if walls are opaque
// el.el.classList.add("backface-hidden")
return el
diff --git a/public/assets/javascripts/rectangles/engine/rooms/clipper.js b/public/assets/javascripts/rectangles/engine/rooms/clipper.js
index 33e3a84..df83cc8 100644
--- a/public/assets/javascripts/rectangles/engine/rooms/clipper.js
+++ b/public/assets/javascripts/rectangles/engine/rooms/clipper.js
@@ -38,7 +38,6 @@
base.update = function(){
base.solve_rects()
- app.tube("clip")
}
var regions
@@ -49,7 +48,7 @@
Rooms.regions = regions = []
return
}
-
+
base.reset_rects()
base.clip_rects()
var culled = base.cull_rects_iterative()
diff --git a/public/assets/javascripts/rectangles/engine/rooms/grouper.js b/public/assets/javascripts/rectangles/engine/rooms/grouper.js
index 663d29d..890a476 100644
--- a/public/assets/javascripts/rectangles/engine/rooms/grouper.js
+++ b/public/assets/javascripts/rectangles/engine/rooms/grouper.js
@@ -48,13 +48,16 @@
base.build = function (){
var walls = []
+ var floors = []
var collections = base.collect()
base.cull(collections)
base.group(walls, collections, FRONT)
base.group(walls, collections, BACK)
base.group(walls, collections, LEFT)
base.group(walls, collections, RIGHT)
+ base.groupFloors(floors, collections)
Walls.assign( walls )
+ Walls.assignFloors( floors )
Walls.bind()
}
base.collect = function(){
@@ -63,12 +66,16 @@
collections[BACK] = []
collections[LEFT] = []
collections[RIGHT] = []
+ collections[FLOOR] = []
+ collections[CEILING] = []
Rooms.forEach(function(room){
room.mx_walls.forEach(function(mx){
var side = mx.side || mx.half_side
collections[side].push(mx)
})
+ collections[FLOOR] = collections[FLOOR].concat( room.mx_floor )
+ collections[CEILING] = collections[CEILING].concat( room.mx_ceiling )
})
base.cull(collections)
@@ -161,6 +168,20 @@
return walls
}
+ base.groupFloors = function(floors, collections){
+ var floor = new Floor ({
+ id: 'floor',
+ side: FLOOR,
+ mx: collections[FLOOR]
+ })
+ var ceiling = new Floor ({
+ id: 'ceiling',
+ side: CEILING,
+ mx: collections[CEILING]
+ })
+ floors.push(floor)
+ floors.push(ceiling)
+ }
}
diff --git a/public/assets/javascripts/rectangles/engine/rooms/mover.js b/public/assets/javascripts/rectangles/engine/rooms/mover.js
index 7195fcc..ac27aba 100644
--- a/public/assets/javascripts/rectangles/engine/rooms/mover.js
+++ b/public/assets/javascripts/rectangles/engine/rooms/mover.js
@@ -4,6 +4,15 @@ Rooms.mover = new function(){
base.room = null
base.noclip = false
+ var cursor = base.cursor = new Rect (0,0,0,0)
+ var cursor_copy = new Rect (0,0,0,0)
+ var wall_vec = new Rect (0,0,0,0)
+ var intersect = new vec2(0,0)
+
+ var origins = new Rect()
+ origins.x = cursor.x
+ origins.y = wall_vec.x
+
base.init = function(){
base.bind()
base.update(scene.camera)
@@ -11,7 +20,8 @@ Rooms.mover = new function(){
base.bind = function(){
app.on("move", base.update)
- keys.on("backslash", function(){
+ keys.on("backslash", function(e){
+ if ( ! (e.ctrlKey || e.metaKey) ) return
base.noclip = ! base.noclip
base.room = null
app.movements.gravity( ! base.noclip )
@@ -19,15 +29,9 @@ Rooms.mover = new function(){
}
base.update = function(pos){
+ var intersect, collision, distance
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..
@@ -39,17 +43,41 @@ Rooms.mover = new function(){
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) {
- cam.x = (collision & LEFT_RIGHT) ? base.room.rect.x.clampDisc(pos.x, radius) : pos.x
- cam.z = (collision & FRONT_BACK) ? base.room.rect.y.clampDisc(pos.z, radius) : pos.z
- return
+ distance = sqrt(pow(cam.x-pos.x, 2), pow(cam.z-pos.z, 2))
+
+ // check if we've breached one of the walls.. clamp position if so.
+ // there are two algorithms for this now, ridiculously..
+ // - the first one is smoother, best for keyboard use
+ // but if the distance travelled is greater than the min. distance from the wall,
+ // then there is a possibility of ejection from the room. so is bad for phone/mousewheel.
+
+ // - the second one determines fortuitously if we have breached any of the walls
+ // however it can get jumpy if you run into a wall.. thus it is best for devices like phone or mousewheel
+ // the benefit is you will never leave the room.
+ if (base.noclip) {
+ // in no-clip mode we walk through walls.
}
+ else if (distance < radius) {
+ collision = base.room.collidesDisc(cam, pos, radius)
+
+ if (collision) {
+ cam.x = (collision & LEFT_RIGHT) ? base.room.rect.x.clampDisc(pos.x, radius) : pos.x
+ cam.z = (collision & FRONT_BACK) ? base.room.rect.y.clampDisc(pos.z, radius) : pos.z
+ return
+ }
+ }
+ else {
+ intersect = base.intersect(pos)
+ if (intersect) {
+ cam.x = intersect.a
+ cam.z = intersect.b
+ return
+ }
+ }
// in this case, we appear to have left the room..
- $(".face.active").removeClass("active")
+ // $(".face.active").removeClass("active")
+ Walls.clearBodyColor()
base.room = null
}
@@ -65,11 +93,162 @@ Rooms.mover = new function(){
// 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") })
+ if (! base.noclip) {
+ Walls.setBodyColor()
+ }
+ app.tube("change-room", { room: base.room })
}
-
}
+ base.intersect = function(pos){
+ var closest_intersect, closest_wall, new_t, wall_t, t, min_t = 1
+
+ cursor_copy.x.a = cursor.x.a = cam.x
+ cursor_copy.x.b = cursor.x.b = cam.z
+ cursor_copy.y.a = cursor.y.a = pos.x
+ cursor_copy.y.b = cursor.y.b = pos.z
+
+ cursor_copy.extend_ends(scene.camera.radius)
+
+ origins.x = cursor_copy.x
+ origins.y = wall_vec.x
+
+ Walls.list.forEach(function(wall, i){
+ var actually_intersects = false, intersecting_face
+
+ wall.get_points(wall_vec)
+
+ t = perp(origins, wall_vec) / ( perp(cursor_copy, wall_vec) || 0.0000001 )
+
+ if ( min_t < t || t < 0 || 1 < t ) return
+
+ intersect.a = cursor_copy.x.a + ( cursor_copy.y.a - cursor_copy.x.a ) * t
+ intersect.b = cursor_copy.x.b + ( cursor_copy.y.b - cursor_copy.x.b ) * t
+
+ if ( ! is_collinear( intersect, wall_vec ) ) return
+
+ if (wall.side & LEFT_RIGHT) {
+ intersecting_face = wall.surface.face_for_x(intersect.b)
+ }
+ else {
+ intersecting_face = wall.surface.face_for_x(intersect.a)
+ }
+
+ actually_intersects = !! (intersecting_face && intersecting_face.y.a == 0)
+ if (actually_intersects) {
+ closest_intersect = intersect.clone()
+ closest_wall = wall_vec.clone()
+ min_t = t
+ }
+ })
+
+ if (closest_intersect) {
+
+ var aw, len, dd
+ aw = angle(closest_wall)
+ wall_vec.assign(closest_wall)
+ wall_vec.x.a -= scene.camera.radius * sin(aw)
+ wall_vec.x.b += scene.camera.radius * cos(aw)
+ wall_vec.y.a -= scene.camera.radius * sin(aw)
+ wall_vec.y.b += scene.camera.radius * cos(aw)
+
+ origins.x = cursor.x
+ origins.y = wall_vec.x
+
+ new_t = perp(origins, wall_vec) / ( perp(cursor, wall_vec) || 0.0000001 )
+ wall_t = perp(origins, cursor) / ( perp(wall_vec, cursor) || 0.0000001 )
+
+ intersect.a = cursor.x.a + ( cursor.y.a - cursor.x.a ) * new_t
+ intersect.b = cursor.x.b + ( cursor.y.b - cursor.x.b ) * new_t
+
+ // here compare len to the length of the wall in the direction we are travelling
+ dd = dot2(diff(closest_wall), diff(cursor))
+ len = sqrt(dot(wall_vec, wall_vec))
+ if (dd > 0) {
+ len *= 1-abs(wall_t)
+ }
+ else {
+ len *= abs(wall_t)
+ aw += PI
+ }
+
+ len = clamp(len, 0, (1-min_t) * sqrt(dot(cursor, cursor)))
+
+ intersect.a += len * cos(aw)
+ intersect.b += len * sin(aw)
+
+ wall_vec.normalize()
+ intersect.a = clamp(intersect.a, wall_vec.x.a, wall_vec.y.a)
+ intersect.b = clamp(intersect.b, wall_vec.x.b, wall_vec.y.b)
+
+ return intersect
+ }
+ else {
+ return cursor.y
+ }
+ }
+ function diff (v) {
+ return new vec2(v.y.a - v.x.a, v.y.b - v.x.b)
+ }
+ function angle (va) {
+ return atan2(va.y.b - va.x.b, va.y.a - va.x.a)
+ }
+ function angle2 (pa, pb) {
+ return atan2(pb.b - pa.b, pb.a - pa.a)
+ }
+ function normal (va) {
+ return atan2(va.x.a - va.y.a, va.y.b - va.x.b)
+ }
+ function dot (va, vb) {
+ return (va.y.a - va.x.a) * (vb.y.a - vb.x.a) + (va.y.b - va.x.b) * (vb.y.b - vb.x.b)
+ }
+ function dot2 (pa, pb) {
+ return pa.a * pb.a + pa.b * pb.b
+ }
+ function perp (va, vb) {
+ return (va.y.a - va.x.a) * (vb.y.b - vb.x.b) - (va.y.b - va.x.b) * (vb.y.a - vb.x.a)
+ }
+ function is_collinear (p, vec) {
+ var on_x, on_y
+ var pa = round(p.a), pb = round(p.b)
+
+ if (vec.x.a < vec.y.a) {
+ on_x = vec.x.a <= pa && pa <= vec.y.a
+ }
+ else {
+ on_x = vec.x.a >= pa && pa >= vec.y.a
+ }
+
+ if (vec.x.b < vec.y.b) {
+ on_y = vec.x.b <= pb && pb <= vec.y.b
+ }
+ else {
+ on_y = vec.x.b >= pb && pb >= vec.y.b
+ }
+
+ return !! (on_x && on_y)
+ }
+ cursor_copy.extend_ends = function(n){
+ var a = angle(this)
+ this.x.a -= n*cos(a)
+ this.x.b -= n*sin(a)
+ this.y.a += n*cos(a)
+ this.y.b += n*sin(a)
+ return this
+ }
+ wall_vec.normalize = function(){
+ var carry
+ if (this.x.a > this.y.a) {
+// console.log("SWAP X")
+ carry = this.x.a
+ this.x.a = this.y.a
+ this.y.a = carry
+ }
+ if (this.x.b > this.y.b) {
+// console.log("SWAP Y")
+ carry = this.x.b
+ this.x.b = this.y.b
+ this.y.b = carry
+ }
+ }
}
diff --git a/public/assets/javascripts/rectangles/engine/rooms/projector.js b/public/assets/javascripts/rectangles/engine/rooms/projector.js
deleted file mode 100644
index 2eac314..0000000
--- a/public/assets/javascripts/rectangles/engine/rooms/projector.js
+++ /dev/null
@@ -1,30 +0,0 @@
-
-rooms.projector = new function(){
-
- projector = new THREE.Projector();
- vector = new THREE.Vector3( mouse.x, mouse.y, 0.5 );
- projector.unprojectVector( vector, camera );
-
- raycaster = new THREE.Raycaster( camera.position, vector.sub( camera.position ).normalize() );
- intersects = raycaster.intersectObjects( scene.children, true );
-
-}
-
-
-
-THREE.Projector = function () {
-
- _viewProjectionMatrix = new THREE.Matrix4(),
-
- this.unprojectVector = function ( vector, camera ) {
- camera.projectionMatrixInverse.getInverse( camera.projectionMatrix );
-
- _viewProjectionMatrix.multiplyMatrices(
- camera.matrixWorld,
- camera.projectionMatrixInverse
- );
-
- return vector.applyProjection( _viewProjectionMatrix );
- };
-
-}