summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles/engine/scenery/randomize.js
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2014-11-13 11:47:49 -0500
committerJules Laplace <jules@okfoc.us>2014-11-13 11:47:49 -0500
commit7456aa11d781c6758de7b46ec74c07cd02ce30e4 (patch)
tree21051ac08e67da494a739d200aab0cfd67edd7a0 /public/assets/javascripts/rectangles/engine/scenery/randomize.js
parent55b613565f05366e7ab0e77ee6a13931c6e86f4e (diff)
parent3ab0c6c24b95552feb111b647205cc92c3ca170c (diff)
merge
Diffstat (limited to 'public/assets/javascripts/rectangles/engine/scenery/randomize.js')
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/randomize.js60
1 files changed, 43 insertions, 17 deletions
diff --git a/public/assets/javascripts/rectangles/engine/scenery/randomize.js b/public/assets/javascripts/rectangles/engine/scenery/randomize.js
index 82b6bf9..1c2eb56 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/randomize.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/randomize.js
@@ -1,13 +1,16 @@
/*
// get the list of media we want to place
- var media_data = $(".mediaContainer").toArray().map(function(el){
+ var media_objs = $(".mediaContainer").toArray().map(function(el){
return $(el).data("media")
})
- Scenery.randomize( media_data )
+ Scenery.randomize.add( media_objs )
*/
-Scenery.randomize = function (media_data) {
- var media_list = media_data.map(function(media){
+Scenery.randomize = {};
+
+// Given a list of media objects, generate their ideal dimensions
+Scenery.randomize.get_dimensions = function (media_objs){
+ var media_list = media_objs.map(function(media){
var width, height
if (media.width > media.height) {
width = Math.min(DEFAULT_PICTURE_WIDTH, media.width)
@@ -22,37 +25,59 @@ Scenery.randomize = function (media_data) {
media: media,
}
})
+ return media_list
+}
+// Build the lookup of empty walls.
+// Takes a list of walls to use, or undefined to use all empty walls.
+// Returns a lookup of walls to use, keyed by wall ID.
+Scenery.randomize.get_empty_walls = function(wall_list){
// get a list of all walls
- var walls = {}
- Walls.forEach(function(wall){
+ var walls = {};
+
+ (wall_list || Walls.list).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]
- })
+ if (! wall_list) {
+ Scenery.forEach(function(scenery){
+ if (scenery.was_randomly_placed) {
+ // remove it and reuse this wall?
+ Scenery.remove( scenery.id )
+ }
+ else {
+ delete walls[scenery.wall.id]
+ }
+ })
+ }
+
+ return walls
+}
+// Randomly place a set of media objects on empty walls.
+// Only one object per wall will be added.
+// Optionally takes a list of walls to use.
+Scenery.randomize.add = function (media_objs, wall_list) {
+ var media_list = Scenery.randomize.get_dimensions(media_objs)
+ var walls = Scenery.randomize.get_empty_walls(wall_list)
+
var wall_ids = _.keys(walls)
- if (! wall_ids.length) {
- return
- }
+ if (! wall_ids.length) { return }
// randomize walls
shuffle(wall_ids)
+ shuffle(media_list)
// 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
- }
+ // bail if we're out of walls
+ 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
}
@@ -62,11 +87,12 @@ Scenery.randomize = function (media_data) {
var wall = walls[wall_ids[fits]]
wall_ids.splice(fits, 1)
- Scenery.add({
+ var scenery = Scenery.add({
media: media.media,
wall: wall,
index: 0,
})
+ scenery.was_randomly_placed = true
}
else {
// artwork won't fit anywhere??