summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles/engine/scenery
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts/rectangles/engine/scenery')
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/move.js2
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/randomize.js77
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/resize.js12
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/types/_object.js16
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/types/video.js6
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/undo.js3
6 files changed, 100 insertions, 16 deletions
diff --git a/public/assets/javascripts/rectangles/engine/scenery/move.js b/public/assets/javascripts/rectangles/engine/scenery/move.js
index 93bccb0..55d6ef1 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/move.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/move.js
@@ -142,7 +142,7 @@ Scenery.move = function(base){
if (editor.permissions.resize) {
Scenery.resize.rotate_dots()
-// Scenery.resize.move_dots()
+ Scenery.resize.move_dots()
}
cursor.x.a = cursor.x.b
diff --git a/public/assets/javascripts/rectangles/engine/scenery/randomize.js b/public/assets/javascripts/rectangles/engine/scenery/randomize.js
new file mode 100644
index 0000000..4f1144a
--- /dev/null
+++ b/public/assets/javascripts/rectangles/engine/scenery/randomize.js
@@ -0,0 +1,77 @@
+/*
+ // get the list of media we want to place
+ var media_data = $(".mediaContainer").toArray().map(function(el){
+ return $(el).data("media")
+ })
+ Scenery.randomize( media_data )
+*/
+
+Scenery.randomize = function (media_data) {
+ var media_list = media_data.map(function(media){
+ var width, height
+ if (media.width > media.height) {
+ width = Math.min(300, media.width)
+ height = media.height/media.width * width
+ }
+ else {
+ height = Math.min(300, media.height)
+ width = media.width/media.height * height
+ }
+ return {
+ dimensions: new vec2( width, height ),
+ media: media,
+ }
+ })
+
+ // get a list of all walls
+ var walls = {}
+ Walls.forEach(function(wall){
+ walls[wall.id] = wall
+ })
+
+ // remove the walls that already have stuff on them
+ Scenery.forEach(function(scenery){
+ delete walls[scenery.wall.id]
+ })
+
+ var wall_ids = _.keys(walls)
+ if (! wall_ids.length) {
+ return
+ }
+
+ // randomize walls
+ shuffle(wall_ids)
+
+ // assign each of the media to the walls, until we run out of either
+ media_list.some(function(media){
+ if (wall_ids.length == 0) {
+ return true
+ }
+
+ var i, fits = -1
+
+ for (i = 0; i < wall_ids.length; i++) {
+ if (walls[wall_ids[i]].surface.fits(media.dimensions)) {
+ // walls[wall_ids[i]]
+ fits = i
+ break
+ }
+ }
+
+ if (fits != -1) {
+ var wall = walls[wall_ids[fits]]
+ wall_ids.splice(fits, 1)
+
+ Scenery.add({
+ media: media.media,
+ wall: wall,
+ index: 0,
+ })
+ }
+ else {
+ // artwork won't fit anywhere??
+ }
+
+ return false
+ })
+} \ No newline at end of file
diff --git a/public/assets/javascripts/rectangles/engine/scenery/resize.js b/public/assets/javascripts/rectangles/engine/scenery/resize.js
index e26c0a7..2ba84a1 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/resize.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/resize.js
@@ -31,7 +31,8 @@ Scenery.resize = new function(){
// generate a dot element
base.build_dot = function(side) {
var dot = new MX.Object3D('.dot')
- dot.width = dot.height = dot_side
+ dot.width = dot.height = dot_side * 2
+ dot.scale = 0.5
dot.side = side
$(dot.el).on({
mouseenter: function(){ base.hovering = true },
@@ -121,11 +122,11 @@ Scenery.resize = new function(){
Scenery.mouse.bind_el(dot.el)
$(dot.el).bind({
mouseenter: function(e){
- Scenery.resize.hovering = true
+// Scenery.resize.hovering = true
},
mouseleave: function(e){
- Scenery.resize.hovering = false
- base.defer_hide()
+// Scenery.resize.hovering = false
+// base.defer_hide()
}
})
})
@@ -146,7 +147,7 @@ Scenery.resize = new function(){
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
@@ -195,6 +196,7 @@ Scenery.resize = new function(){
}
function up (e, cursor){
+ if (! dragging) return
dragging = false
selected_dot = null
if (! editor.permissions.resize) { return }
diff --git a/public/assets/javascripts/rectangles/engine/scenery/types/_object.js b/public/assets/javascripts/rectangles/engine/scenery/types/_object.js
index 2dbae48..5eed53e 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/types/_object.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/types/_object.js
@@ -70,17 +70,17 @@ Scenery.types.base = Fiber.extend(function(base){
},
enter: function(e){
- if (editor.permissions.resize) {
- Scenery.resize.show(this)
- Scenery.hovering = true
- }
+// if (editor.permissions.resize) {
+// Scenery.resize.show(this)
+// Scenery.hovering = true
+// }
},
leave: function(e){
- if (editor.permissions.resize) {
- Scenery.resize.defer_hide(this)
- Scenery.hovering = false
- }
+// if (editor.permissions.resize) {
+// Scenery.resize.defer_hide(this)
+// Scenery.hovering = false
+// }
},
serialize: function(){
diff --git a/public/assets/javascripts/rectangles/engine/scenery/types/video.js b/public/assets/javascripts/rectangles/engine/scenery/types/video.js
index ef25d8d..76f32ac 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/types/video.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/types/video.js
@@ -4,8 +4,8 @@ Scenery.types.video = Scenery.types.base.extend(function(base){
var exports = {
init: function(opt){
- opt.scale = opt.scale || 300 / max(300, opt.media.width)
-
+ opt.scale = opt.scale || (opt.data && opt.data.scale) || 300 / max(300, opt.media.width)
+
base.init.call(this, opt)
this.build()
@@ -106,6 +106,8 @@ Scenery.types.video = Scenery.types.base.extend(function(base){
deserialize: function(data){
this.mx.move(data.position)
+ this.mx.ops.width = data.dimensions.a
+ this.mx.ops.height = data.dimensions.b
},
}
diff --git a/public/assets/javascripts/rectangles/engine/scenery/undo.js b/public/assets/javascripts/rectangles/engine/scenery/undo.js
index e5624a0..57a0886 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/undo.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/undo.js
@@ -10,6 +10,7 @@
},
redo: function(state){
Scenery.deserialize([ state ])
+ Scenery.resize.show( scenery )
// TODO: watch individual scenery object here
Minotaur.watch( app.router.editorView.settings )
@@ -19,6 +20,7 @@
type: "update-scenery",
undo: function(state){
var scenery = Scenery.find(state.id)
+
scenery.deserialize(state)
scenery.set_wall(Walls.find( state.wall_id ))
@@ -48,6 +50,7 @@
type: "destroy-scenery",
undo: function(state){
Scenery.deserialize([ state ])
+ Scenery.resize.show( scenery )
// TODO: watch individual scenery object here
Minotaur.watch( app.router.editorView.settings )