summaryrefslogtreecommitdiff
path: root/public
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2014-11-10 12:28:54 -0500
committerJules Laplace <jules@okfoc.us>2014-11-10 12:29:07 -0500
commit3022e063a4b501cd581f1cb70c2dc709e4a3294c (patch)
treed65ac99d15dcacd4152d214024bfa6bd575512c8 /public
parent6021436f1146394fa28cba07f93fec02f04edc19 (diff)
making random placement api more general
Diffstat (limited to 'public')
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/randomize.js51
1 files changed, 34 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..1c8ec4f 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/randomize.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/randomize.js
@@ -1,13 +1,17 @@
/*
// 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 )
+ var walls = []
+ Scenery.randomize.add( media_objs, walls )
*/
-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 +26,50 @@ 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){
+ (wall_list || 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]
- })
+ if (! wall_list) {
+ Scenery.forEach(function(scenery){
+ 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.
+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)
// 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
- }
+ media_list.all(function(media){
+ // bail if we're out of walls
+ if (wall_ids.length == 0) { return false }
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
}
@@ -72,6 +89,6 @@ Scenery.randomize = function (media_data) {
// artwork won't fit anywhere??
}
- return false
+ return true
})
} \ No newline at end of file