summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles/engine
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts/rectangles/engine')
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/_scenery.js14
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/move.js14
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/types/_object.js58
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/types/image.js5
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/types/video.js4
5 files changed, 47 insertions, 48 deletions
diff --git a/public/assets/javascripts/rectangles/engine/scenery/_scenery.js b/public/assets/javascripts/rectangles/engine/scenery/_scenery.js
index 5d36b4f..58592d4 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/_scenery.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/_scenery.js
@@ -29,14 +29,14 @@ var Scenery = new function(){
return scene_media
}
- base.addNextToWall = function(wall, index){
- base.add({
- wall: wall,
- media: base.nextMedia,
- index: index || 0,
- })
+ base.addNextToWall = function(opt){
+ opt.media = base.nextMedia
+ opt.index = opt.index || 0
+ var scene_media = base.add(opt)
+
+ // test if scenery was placed here
base.nextMedia = null
- return media
+ return scene_media
}
base.find = function(id){
diff --git a/public/assets/javascripts/rectangles/engine/scenery/move.js b/public/assets/javascripts/rectangles/engine/scenery/move.js
index f2d37d8..47e155b 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/move.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/move.js
@@ -91,21 +91,21 @@ Scenery.move = function(base){
oldState = null
}
- function switch_wall (e, new_wall, cursor){
+ function switch_wall (e, target, cursor){
if (! dragging) return
- if (new_wall.id == base.wall.id) return
- if (! new_wall.fits(base.media, base.scale)) return
+ if (target.wall.id == base.wall.id) return
+ if (! target.wall.fits(base.media, base.scale)) return
var old_wall_side = base.wall.side
- var wall_group = old_wall_side | new_wall.side
+ var wall_group = old_wall_side | target.wall.side
- base.set_wall(new_wall)
+ base.set_wall(target)
bounds = base.bounds
x = base.center.a
z = base.center.b
- if (old_wall_side !== new_wall.side && wall_group !== FRONT_BACK && wall_group !== LEFT_RIGHT) {
+ if (old_wall_side !== target.wall.side && wall_group !== FRONT_BACK && wall_group !== LEFT_RIGHT) {
switch (old_wall_side) {
case FRONT:
z = bounds.x.a
@@ -127,7 +127,7 @@ Scenery.move = function(base){
base.mx.move({
x: x,
z: z,
- rotationY: wall_rotation[ new_wall.side ]
+ rotationY: wall_rotation[ target.wall.side ]
})
if (editor.permissions.resize) {
diff --git a/public/assets/javascripts/rectangles/engine/scenery/types/_object.js b/public/assets/javascripts/rectangles/engine/scenery/types/_object.js
index 70d1d26..7b716f6 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/types/_object.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/types/_object.js
@@ -8,20 +8,36 @@ Scenery.types.base = Fiber.extend(function(base){
this.id = opt.id || Scenery.uid("scenery")
this.move = new Scenery.move (this)
this.media = opt.media
- this.dimensions = new vec2(this.media.width, this.media.height)
- this.scale = this.media.scale
+ this.naturalDimensions = new vec2(this.media.width, this.media.height)
- this.scaleDimensions = this.dimensions.clone().mul(this.media.scale)
+ this.set_scale( opt.scale || this.media.scale || 1.0 )
this.position = new vec2(0,0)
- if (opt.data && opt.data.position) {
- // position is the coordinate of one of the corners with respect to a
- // wall surface
- // subtract x/z offset of wall
- }
+ },
- if (opt.wall) {
- this.set_wall(opt.wall, index)
+ set_wall: function(opt){
+ this.wall = opt.wall || this.wall
+ this.bounds = this.wall.surface.bounds_at_index_with_dimensions(opt.index || 0, this.dimensions)
+ },
+
+ set_scale: function(scale){
+ this.scale = scale || 1.0
+ if (this.mx) {
+ this.mx.scale = this.mx.ops.scale = this.scale
}
+ this.dimensions = this.naturalDimensions.clone().mul(this.scale)
+ },
+
+ recenter: function () {
+ var center = this.bounds.center()
+ center.a -= this.dimensions.a / 2
+ center.b -= this.dimensions.b / 2
+ console.log(center+"")
+ var mx_position = this.wall.positionToMx( center, this.dimensions )
+ console.log(mx_position)
+ console.log(this.wall.surface.faces.join("\n"))
+ // also supply scale?
+ this.mx.move(mx_position)
+ this.position.assign(center)
},
bind: function(){
@@ -49,6 +65,7 @@ Scenery.types.base = Fiber.extend(function(base){
this.move = null
this.media = null
this.dimensions = null
+ this.naturalDimensions = null
this.wall = null
this.bounds = null
this.center = null
@@ -68,26 +85,6 @@ Scenery.types.base = Fiber.extend(function(base){
}
},
- set_wall: function(wall, index){
- this.wall = wall || this.wall
- // this.bounds = this.wall.bounds_for(this.media, this.scale)
- // this.center = this.wall.center()
- },
-
- set_scale: function(scale){
- this.scale = this.mx.scale = this.mx.ops.scale = scale || 1.0
- },
-
- recenter: function(){
- this.mx.move({
- x: this.center.a,
- y: Rooms.list[this.wall.room].height/2 - 20,
- z: this.center.b,
- scale: this.scale,
- rotationY: wall_rotation[ this.wall.side ],
- })
- },
-
serialize: function(){
var data = {
id: this.id,
@@ -95,6 +92,7 @@ Scenery.types.base = Fiber.extend(function(base){
side: this.wall && this.wall.side,
dimensions: this.dimensions.serialize(),
position: app.position(this.mx),
+ scale: this.scale,
media: this.media,
}
return data
diff --git a/public/assets/javascripts/rectangles/engine/scenery/types/image.js b/public/assets/javascripts/rectangles/engine/scenery/types/image.js
index 576242e..1582e0f 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/types/image.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/types/image.js
@@ -4,17 +4,18 @@ Scenery.types.image = Scenery.types.base.extend(function(base){
var exports = {
init: function(opt){
+ opt.scale = opt.scale || 300 / max(300, opt.media.width)
+
base.init.call(this, opt)
- this.scale = 300 / max(300, this.media.width)
this.build()
this.bind()
- this.set_wall()
if (opt.data) {
this.deserialize(opt.data)
}
else {
+ this.set_wall(opt)
this.recenter()
}
},
diff --git a/public/assets/javascripts/rectangles/engine/scenery/types/video.js b/public/assets/javascripts/rectangles/engine/scenery/types/video.js
index 0bd5c06..e8bc7f7 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/types/video.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/types/video.js
@@ -4,12 +4,12 @@ Scenery.types.video = Scenery.types.base.extend(function(base){
var exports = {
init: function(opt){
+ opt.scale = opt.scale || 300 / max(300, opt.media.width)
+
base.init.call(this, opt)
- this.scale = this.media.scale = 300 / max(300, this.media.width)
this.build()
this.bind()
- this.set_wall()
if (opt.data) {
this.deserialize(opt.data)