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/map/ui_editor.js8
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/_rooms.js1
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/builder.js4
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/clipper.js7
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/_scenery.js1
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/move.js4
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/types/_object.js3
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/types/image.js1
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/types/video.js64
9 files changed, 86 insertions, 7 deletions
diff --git a/public/assets/javascripts/rectangles/engine/map/ui_editor.js b/public/assets/javascripts/rectangles/engine/map/ui_editor.js
index ea7a356..577ea32 100644
--- a/public/assets/javascripts/rectangles/engine/map/ui_editor.js
+++ b/public/assets/javascripts/rectangles/engine/map/ui_editor.js
@@ -53,16 +53,21 @@ Map.UI.Editor = function(map){
if (intersects.length && base.permissions.destroy) {
base.mouse.down = false
Rooms.remove(intersects[0])
+ app.tube("builder-destroy-room", intersects[0])
return
}
else if (intersects.length && (base.permissions.move || base.permissions.resize)) {
base.dragging = intersects[0]
base.resizing = base.permissions.resize && base.dragging.rect.nearEdge(cursor.x.a, cursor.y.a, resize_margin / map.zoom)
base.dragging.rect.translation.sides = base.resizing
+ app.tube("builder-pick-room", intersects[0])
}
else if (base.permissions.create) {
base.creating = true
}
+ else if (intersects.length) {
+ app.tube("builder-pick-room", intersects[0])
+ }
if (e.shiftKey && base.dragging) {
base.dragging.rect.quantize(10/map.zoom)
@@ -109,7 +114,8 @@ Map.UI.Editor = function(map){
if (cursor.height() > side_min && cursor.width() > side_min) {
cursor.x.abs().quantize(1)
cursor.y.abs().quantize(1)
- Rooms.add_with_rect( cursor )
+ var room = Rooms.add_with_rect( cursor )
+ app.tube("builder-pick-room", room)
}
}
diff --git a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js
index 48931e9..e0033e3 100644
--- a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js
+++ b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js
@@ -26,6 +26,7 @@ var Rooms = new function(){
height: 500
})
base.add(room)
+ return room
}
base.remove = function(room){
diff --git a/public/assets/javascripts/rectangles/engine/rooms/builder.js b/public/assets/javascripts/rectangles/engine/rooms/builder.js
index e6625ec..49e55dc 100644
--- a/public/assets/javascripts/rectangles/engine/rooms/builder.js
+++ b/public/assets/javascripts/rectangles/engine/rooms/builder.js
@@ -20,8 +20,8 @@ Rooms.builder = new function(){
}
}
function build (){
- Rooms.regions.forEach(function(room){
- build_walls(room).forEach(function(el){
+ Rooms.regions.forEach(function(region){
+ build_walls(region).forEach(function(el){
els.push(el)
scene.add(el)
})
diff --git a/public/assets/javascripts/rectangles/engine/rooms/clipper.js b/public/assets/javascripts/rectangles/engine/rooms/clipper.js
index eb467cd..e2bb894 100644
--- a/public/assets/javascripts/rectangles/engine/rooms/clipper.js
+++ b/public/assets/javascripts/rectangles/engine/rooms/clipper.js
@@ -20,12 +20,15 @@ Rooms.clipper = new function(){
// Given a set of overlapping rooms, clip any intersections, then cull any duplicate polygons
base.solve_rects = function(){
- if (Rooms.count() == 0) return
+ if (Rooms.count() == 0) {
+ Rooms.regions = regions = []
+ return
+ }
base.reset_rects()
base.clip_rects()
base.cull_rects()
-
+
Rooms.regions = sort_rects_by_position(regions)
}
diff --git a/public/assets/javascripts/rectangles/engine/scenery/_scenery.js b/public/assets/javascripts/rectangles/engine/scenery/_scenery.js
index 74801e9..1493fc6 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/_scenery.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/_scenery.js
@@ -19,6 +19,7 @@ var Scenery = new function(){
scene_media = new Scenery.types.image ({ media: media, wall: wall, id: id })
break
+ case 'video':
case 'youtube':
case 'vimeo':
scene_media = new Scenery.types.video ({ media: media, wall: wall, id: id })
diff --git a/public/assets/javascripts/rectangles/engine/scenery/move.js b/public/assets/javascripts/rectangles/engine/scenery/move.js
index bad0a55..94a4e52 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/move.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/move.js
@@ -26,6 +26,10 @@ Scenery.move = function(base){
Scenery.remove(base.id)
return
}
+
+ // load the modal
+ app.controller.pick(base)
+
if (! (editor.permissions.move || editor.permissions.resize) ) {
e.clickAccepted = false
return
diff --git a/public/assets/javascripts/rectangles/engine/scenery/types/_object.js b/public/assets/javascripts/rectangles/engine/scenery/types/_object.js
index 05c760b..65f3a94 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/types/_object.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/types/_object.js
@@ -35,6 +35,9 @@ Scenery.types.base = Fiber.extend(function(base){
destroy: function(){
this.unbind()
scene.remove(this.mx)
+ this.mx.media = null
+ this.mx.ops = null
+ this.mx = null
this.move = null
this.media = null
this.dimensions = null
diff --git a/public/assets/javascripts/rectangles/engine/scenery/types/image.js b/public/assets/javascripts/rectangles/engine/scenery/types/image.js
index b668e6a..99c1810 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/types/image.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/types/image.js
@@ -17,6 +17,7 @@ Scenery.types.image = Scenery.types.base.extend(function(base){
this.mx = new MX.Image({
src: this.media.url,
scale: this.scale,
+ media: this.media,
y: this.scale * this.media.height/2,
backface: false,
})
diff --git a/public/assets/javascripts/rectangles/engine/scenery/types/video.js b/public/assets/javascripts/rectangles/engine/scenery/types/video.js
index b34e55c..d3e2e76 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/types/video.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/types/video.js
@@ -14,13 +14,73 @@ Scenery.types.video = Scenery.types.base.extend(function(base){
},
build: function(){
- this.mx = new MX.Image({
- src: this.media.url,
+ switch (this.media.type) {
+ case 'video':
+ this.mxType = MX.Video
+ break
+ case 'vimeo':
+ this.mxType = MX.Vimeo
+ break
+ case 'youtube':
+ this.mxType = MX.Youtube
+ break
+ }
+ if (app.muted) {
+ this.media.mute = true
+ }
+ this.mx = new this.mxType({
+ media: this.media,
+ scale: this.scale,
y: this.scale * this.media.height/2,
backface: false,
})
scene.add( this.mx )
},
+
+ play: function(){
+ this.mx.play()
+ },
+
+ pause: function(){
+ this.mx.pause()
+ },
+
+ toggle: function(shouldPause){
+ if (typeof shouldPause !== "boolean") {
+ shouldPause = ! this.mx.paused
+ }
+ shouldPause ? this.mx.pause() : this.mx.play()
+ return shouldPause
+ },
+
+ toggleMuted: function(shouldMute){
+ if (typeof shouldMute !== "boolean") {
+ shouldMute = ! this.mx.muted
+ }
+ shouldMute ? this.mx.mute() : this.mx.unmute()
+ return shouldMute
+ },
+
+ paused: function(){
+ return this.mx.paused
+ },
+
+ muted: function(){
+ return this.mx.muted
+ },
+
+ seek: function(n){
+ this.mx.seek(n)
+ },
+
+ mute: function(muted){
+ if (muted) {
+ this.mx.mute()
+ }
+ else {
+ this.mx.unmute()
+ }
+ },
serialize: function(){
var data = base.serialize.call(this)