summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles/engine
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts/rectangles/engine')
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/_rooms.js14
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/_scenery.js27
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/move.js14
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/resize.js2
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/types/_object.js27
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,