summaryrefslogtreecommitdiff
path: root/assets
diff options
context:
space:
mode:
authorJulie Lala <jules@okfoc.us>2014-05-09 10:32:39 -0400
committerJulie Lala <jules@okfoc.us>2014-05-09 10:33:16 -0400
commitd31259291d807c851de4396921e0c26b6dd8dce2 (patch)
tree71b2551d90027b6b6319a1c1c4817af6c16d165e /assets
parent47623b31b6bbd23337920cc51f0ceb623d682139 (diff)
resizing using dotsgh-pages
Diffstat (limited to 'assets')
-rw-r--r--assets/javascripts/rectangles/_env.js6
-rw-r--r--assets/javascripts/rectangles/engine/scenery/image/_image.js7
-rw-r--r--assets/javascripts/rectangles/engine/scenery/image/move.js2
-rw-r--r--assets/javascripts/rectangles/engine/scenery/image/resize.js72
-rw-r--r--assets/javascripts/rectangles/models/vec3.js5
-rw-r--r--assets/javascripts/rectangles/models/wall.js2
-rw-r--r--assets/javascripts/rectangles/util/constants.js11
7 files changed, 80 insertions, 25 deletions
diff --git a/assets/javascripts/rectangles/_env.js b/assets/javascripts/rectangles/_env.js
index e8ce9c1..972b1fe 100644
--- a/assets/javascripts/rectangles/_env.js
+++ b/assets/javascripts/rectangles/_env.js
@@ -3,11 +3,13 @@ var environment = new function(){}
environment.init = function(){
if (window.scene) {
scene.camera.move({
- "x": 1000,
+ "x": 0,
"y": 0,
- "z": 250,
+ "z": 0,
"rotationX": 0, // PI/2,
"rotationY": PI/2, // PI
+// "rotationX": 0,
+// "rotationY": PI
})
scene.camera.radius = 20
diff --git a/assets/javascripts/rectangles/engine/scenery/image/_image.js b/assets/javascripts/rectangles/engine/scenery/image/_image.js
index 767077b..dadb2d2 100644
--- a/assets/javascripts/rectangles/engine/scenery/image/_image.js
+++ b/assets/javascripts/rectangles/engine/scenery/image/_image.js
@@ -4,7 +4,8 @@ Scenery.image = function (wall, img) {
base.wall = wall
base.img = img
- base.center = wall.center_for(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
@@ -34,13 +35,13 @@ Scenery.image = function (wall, img) {
// base.resize.bind()
$(base.mx_img.el).bind({
mouseenter: function(e){
- console.log('entered an image')
+// 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')
+// console.log('left an image')
Scenery.resize.defer_hide(base)
Scenery.image.hovering = false
}
diff --git a/assets/javascripts/rectangles/engine/scenery/image/move.js b/assets/javascripts/rectangles/engine/scenery/image/move.js
index 0f6b0d9..e79ede9 100644
--- a/assets/javascripts/rectangles/engine/scenery/image/move.js
+++ b/assets/javascripts/rectangles/engine/scenery/image/move.js
@@ -60,7 +60,7 @@ Scenery.image.move = function(base){
if (! new_wall.fits(base.img)) return
base.bounds = bounds = new_wall.bounds_for(base.img)
- base.center = new_wall.center_for(base.img)
+ base.center = new_wall.center()
x = base.center.a
z = base.center.b
diff --git a/assets/javascripts/rectangles/engine/scenery/image/resize.js b/assets/javascripts/rectangles/engine/scenery/image/resize.js
index 52d61bd..a0a98c5 100644
--- a/assets/javascripts/rectangles/engine/scenery/image/resize.js
+++ b/assets/javascripts/rectangles/engine/scenery/image/resize.js
@@ -5,8 +5,9 @@ Scenery.resize = new function(){
var obj
var x, y, z, bounds
var dragging = false
-
- var dots = [], dot
+ var dimensions, position
+
+ var dots = [], dot, selected_dot
base.init = function(){
base.build()
@@ -28,8 +29,7 @@ Scenery.resize = new function(){
// generate a dot element
base.build_dot = function(side) {
var dot = new MX.Object3D('.dot')
- dot.width = 10
- dot.height = 10
+ dot.width = dot.height = dot_side
dot.side = side
$(dot.el).on({
mouseenter: function(){ base.hovering = true },
@@ -54,9 +54,9 @@ Scenery.resize = new function(){
// move all the dots to the object's current position
base.move_dots = function(){
- x = obj.mx_img.x + sin(rotationY) * 3
+ x = obj.mx_img.x + sin(rotationY) * dot_distance_from_picture
y = obj.mx_img.y
- z = obj.mx_img.z - cos(rotationY) * 3
+ z = obj.mx_img.z - cos(rotationY) * dot_distance_from_picture
dots.forEach(function(dot){
base.move_dot(dot)
@@ -70,18 +70,18 @@ Scenery.resize = new function(){
dot.z = z
if (dot.side & TOP) {
- dot.y += obj.img.height / 2
+ dot.y += obj.mx_img.height * obj.mx_img.scale / 2
}
if (dot.side & BOTTOM) {
- dot.y -= obj.img.height / 2
+ dot.y -= obj.mx_img.height * obj.mx_img.scale / 2
}
if (dot.side & LEFT) {
- dot.x -= cos(rotationY) * obj.img.width / 2
- dot.z -= sin(rotationY) * obj.img.width / 2
+ 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.img.width / 2
- dot.z += sin(rotationY) * obj.img.width / 2
+ 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
}
}
@@ -118,16 +118,15 @@ Scenery.resize = new function(){
Scenery.mouse.bind_el(dot.el)
$(dot.el).bind({
mouseenter: function(e){
- console.log('entered a dot')
Scenery.resize.hovering = true
},
mouseleave: function(e){
- console.log('left a dot')
Scenery.resize.hovering = false
base.defer_hide()
}
})
})
+ Scenery.mouse.on("down", down)
Scenery.mouse.on("drag", drag)
Scenery.mouse.on("up", up)
}
@@ -136,23 +135,66 @@ Scenery.resize = new 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
- bounds = obj.wall.bounds_for(img)
+
+ 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")
}
diff --git a/assets/javascripts/rectangles/models/vec3.js b/assets/javascripts/rectangles/models/vec3.js
new file mode 100644
index 0000000..4e9f3cb
--- /dev/null
+++ b/assets/javascripts/rectangles/models/vec3.js
@@ -0,0 +1,5 @@
+function vec3(a,b,c){
+ this.a = a
+ this.b = b
+ this.c = c
+}
diff --git a/assets/javascripts/rectangles/models/wall.js b/assets/javascripts/rectangles/models/wall.js
index 854b238..4270551 100644
--- a/assets/javascripts/rectangles/models/wall.js
+++ b/assets/javascripts/rectangles/models/wall.js
@@ -61,7 +61,7 @@ window.Wall = (function(){
return true
}
- Wall.prototype.center_for = function(img, offset){
+ Wall.prototype.center = function(offset){
offset = offset || 0
diff --git a/assets/javascripts/rectangles/util/constants.js b/assets/javascripts/rectangles/util/constants.js
index 8ba6208..58cb1a5 100644
--- a/assets/javascripts/rectangles/util/constants.js
+++ b/assets/javascripts/rectangles/util/constants.js
@@ -5,7 +5,8 @@ var TOP = CEILING, BOTTOM = FLOOR,
TOP_LEFT = TOP | LEFT,
TOP_RIGHT = TOP | RIGHT,
BOTTOM_LEFT = BOTTOM | LEFT,
- BOTTOM_RIGHT = BOTTOM | RIGHT
+ BOTTOM_RIGHT = BOTTOM | RIGHT,
+ TOP_BOTTOM = TOP | BOTTOM
var height_min = 200,
height_max = 2000,
@@ -14,9 +15,11 @@ var height_min = 200,
resize_margin = 8,
cursor_amp = 1.5
-var painting_distance_from_wall = 8
+var painting_distance_from_wall = 8,
+ dot_distance_from_picture = 3
-var dot_hide_delay = 50 // ms
+var dot_hide_delay = 50, // ms
+ dot_side = 20
var wall_rotation = {}
wall_rotation[FRONT] = PI
@@ -32,6 +35,8 @@ function sidesToString(sides){
if (sides & BACK) s += "back "
if (sides & LEFT) s += "left "
if (sides & RIGHT) s += "right "
+ if (sides & TOP) s += "top "
+ if (sides & BOTTOM) s += "bottom "
return s
}