var Sculpture = new function(){ var base = this; base.list = {} base.nextMedia = null base.mouse = new mouse ({ use_offset: false, mousedownUsesCapture: true }) base.init = function(){ } base.add = function(opt){ var scene_media switch (opt.media.type) { case 'image': scene_media = new Sculpture.types.image (opt) break } base.list[scene_media.id] = scene_media return scene_media } base.addNextToWall = function(opt){ opt.newMedia = true opt.media = base.nextMedia opt.index = opt.index || 0 var scene_media = base.add(opt) // test if scenery was placed here if (! scene_media) { return null } else { base.nextMedia = null return scene_media } } base.find = function(id){ return base.list[id] || null } base.remove = function(id){ var scene_media = base.list[id] delete base.list[id] scene_media && scene_media.destroy() } base.removeAll = function(){ base.forEach(function(scene_media){ base.remove(scene_media.id) }) } base.uid = new UidGenerator(base.list) base.forEach = function(f){ return base.values().forEach(f) } base.map = function(f){ return base.values().map(f) } base.values = function(){ return _.values(base.list) } base.serialize = function(){ var sculptures = base.map(function(sculpture){ return sculpture.serialize() }) return sculptures } base.deserialize = function(sculpture_data){ var added = [] sculpture_data.forEach(function(data){ var scene_media = base.add({ id: data.id, data: data, media: data.media, }) added.push(scene_media) }) return added } return base } Sculpture.types = {}