diff options
Diffstat (limited to 'public/assets/javascripts/rectangles/engine')
5 files changed, 56 insertions, 28 deletions
diff --git a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js index 0d6c267..0186e9a 100644 --- a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js +++ b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js @@ -82,19 +82,7 @@ var Rooms = new function(){ return [] } - base.uid = (function(){ - var id = 0 - return function(s){ - s = s || "" - var ss - while (1) { - ss = s + (id++) - if (! (ss in base.list)) { - return ss - } - } - } - })() + base.uid = UidGenerator(base.list) base.sorted_by_position = function(){ return sort_rooms_by_position( base.values() ) diff --git a/public/assets/javascripts/rectangles/engine/scenery/_scenery.js b/public/assets/javascripts/rectangles/engine/scenery/_scenery.js index 3fe6b66..143a4d9 100644 --- a/public/assets/javascripts/rectangles/engine/scenery/_scenery.js +++ b/public/assets/javascripts/rectangles/engine/scenery/_scenery.js @@ -3,7 +3,7 @@ var Scenery = new function(){ var base = this; - base.media = [] + base.list = {} base.nextMedia = null base.mouse = new mouse ({ use_offset: false }) @@ -25,7 +25,7 @@ var Scenery = new function(){ break } - base.media.push(scene_media) + base.list[scene_media.id] = scene_media return scene_media } @@ -35,14 +35,27 @@ var Scenery = new function(){ } base.remove = function(id){ - var removed = _.remove(base.media, function(media){ return media.id == id }) - removed.forEach(function(media){ - // cleanup - }) + var media = base.list[id] + delete base.list[id] + media && media.destroy() + } + + base.uid = 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 scenery = base.media.map(function(media){ + var scenery = base.map(function(media){ return media.serialize() }) return scenery diff --git a/public/assets/javascripts/rectangles/engine/scenery/move.js b/public/assets/javascripts/rectangles/engine/scenery/move.js index 8acc1c2..f38a740 100644 --- a/public/assets/javascripts/rectangles/engine/scenery/move.js +++ b/public/assets/javascripts/rectangles/engine/scenery/move.js @@ -22,6 +22,10 @@ Scenery.move = function(base){ function down (e, cursor){ if (e.target != base.mx.el) return; + if (editor.permissions.destroy) { + Scenery.remove(base.id) + return + } dragging = true x = base.mx.x y = base.mx.y @@ -45,7 +49,9 @@ Scenery.move = function(base){ break } - Scenery.resize.move_dots() + if (editor.permissions.resize) { + Scenery.resize.move_dots() + } } function up (e, cursor){ @@ -92,8 +98,10 @@ Scenery.move = function(base){ rotationY: wall_rotation[ new_wall.side ] }) - Scenery.resize.rotate_dots() - Scenery.resize.move_dots() + if (editor.permissions.resize) { + Scenery.resize.rotate_dots() + Scenery.resize.move_dots() + } } return this diff --git a/public/assets/javascripts/rectangles/engine/scenery/resize.js b/public/assets/javascripts/rectangles/engine/scenery/resize.js index ac13326..df058bb 100644 --- a/public/assets/javascripts/rectangles/engine/scenery/resize.js +++ b/public/assets/javascripts/rectangles/engine/scenery/resize.js @@ -106,6 +106,7 @@ Scenery.resize = new function(){ Scenery.resize.hide() }, dot_hide_delay) } + base.hide = function () { obj = null dots.forEach(function(dot){ @@ -187,6 +188,7 @@ Scenery.resize = new function(){ function up (e, cursor){ dragging = false selected_dot = null + if (! editor.permissions.resize) { return } obj.scale = obj.mx.ops.scale = obj.mx.scale obj.set_wall() document.body.classList.remove("dragging") diff --git a/public/assets/javascripts/rectangles/engine/scenery/types/_object.js b/public/assets/javascripts/rectangles/engine/scenery/types/_object.js index 1aa037c..4367efc 100644 --- a/public/assets/javascripts/rectangles/engine/scenery/types/_object.js +++ b/public/assets/javascripts/rectangles/engine/scenery/types/_object.js @@ -5,6 +5,7 @@ Scenery.types.base = Fiber.extend(function(base){ init: function(opt){ _.bindAll(this, 'enter', 'leave') + this.id = Scenery.uid("scenery") this.move = new Scenery.move (this) this.media = opt.media this.dimensions = new vec2(this.media.width, this.media.height) @@ -30,15 +31,30 @@ Scenery.types.base = Fiber.extend(function(base){ mouseleave: this.leave, }) }, + + destroy: function(){ + this.unbind() + scene.remove(this.mx) + this.move = null + this.media = null + this.dimensions = null + this.wall = null + this.bounds = null + this.center = null + }, enter: function(e){ - Scenery.resize.show(this) - Scenery.hovering = true + if (editor.permissions.resize) { + Scenery.resize.show(this) + Scenery.hovering = true + } }, leave: function(e){ - Scenery.resize.defer_hide(this) - Scenery.hovering = false + if (editor.permissions.resize) { + Scenery.resize.defer_hide(this) + Scenery.hovering = false + } }, set_wall: function(wall){ @@ -46,7 +62,7 @@ Scenery.types.base = Fiber.extend(function(base){ this.bounds = this.wall.bounds_for(this.media, this.scale) this.center = this.wall.center() }, - + recenter: function(){ this.mx.move({ x: this.center.a, @@ -59,6 +75,7 @@ Scenery.types.base = Fiber.extend(function(base){ serialize: function(){ var data = { + id: this.id, room_id: this.wall.room_id, wall_id: this.wall.id, side: this.wall.side, |
