summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles/engine/rooms/_walls.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts/rectangles/engine/rooms/_walls.js')
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/_walls.js137
1 files changed, 122 insertions, 15 deletions
diff --git a/public/assets/javascripts/rectangles/engine/rooms/_walls.js b/public/assets/javascripts/rectangles/engine/rooms/_walls.js
index 82ccb87..38dac84 100644
--- a/public/assets/javascripts/rectangles/engine/rooms/_walls.js
+++ b/public/assets/javascripts/rectangles/engine/rooms/_walls.js
@@ -35,8 +35,23 @@
var base = this
base.list = []
+ base.floors = []
base.lookup = {}
base.colors = {}
+
+ base.init = function(){
+ base.colors = base.copyColors( app.defaults.colors )
+ }
+
+ base.copyColors = function(colors){
+ var copy = {
+ wall: colors.wall.slice(),
+ outline: colors.outline.slice(),
+ floor: colors.floor.slice(),
+ ceiling: colors.ceiling.slice(),
+ }
+ return copy
+ }
base.first = function(){
for (var i in base.list) {
@@ -46,6 +61,10 @@
}
}
+ base.find = function(id){
+ return base.lookup[id]
+ }
+
base.assign = function(list){
base.list = list
base.lookup = {}
@@ -53,11 +72,21 @@
base.lookup[wall.id] = wall
})
}
+
+ base.assignFloors = function(floors){
+ base.floors = floors
+ floors.forEach(function(floor){
+ base.lookup[floor.id] = floor
+ })
+ }
base.bind = function(){
base.list.forEach(function(wall){
wall.bind()
})
+ base.floors.forEach(function(floor){
+ floor.bind()
+ })
}
base.count = function(){
@@ -65,16 +94,20 @@
}
base.forEach = function(f){
- return base.list.forEach(f)
+ return base.values().forEach(f)
}
base.map = function(f){
- return base.list.map(f)
+ return base.values().map(f)
}
-
+
+ base.values = function(){
+ return _.values(base.lookup)
+ }
+
base.serialize = function(){
var data = []
- base.list.forEach(function(wall){
+ base.forEach(function(wall){
data.push(wall.serialize())
})
return data
@@ -84,6 +117,9 @@
walls_data.forEach(function(wall_data){
if (! wall_data) { return }
var wall = base.lookup[ wall_data.id ]
+ if (! wall) {
+ return
+ }
wall.deserialize( wall_data )
})
},
@@ -93,21 +129,91 @@
var outlineColor = rgb_string(Walls.colors.outline)
var floorColor = rgb_string(Walls.colors.floor)
var ceilingColor = rgb_string(Walls.colors.ceiling)
- Walls.forEach(function(wall){
+ Walls.list.forEach(function(wall){
wall.outline(wallColor, outlineColor)
})
- Rooms.forEach(function(room){
- room.setFloorColor(floorColor)
- room.setCeilingColor(ceilingColor)
+ Walls.floors.forEach(function(floor){
+ if (floor.ceiling) floor.color(ceilingColor)
+ else floor.color(floorColor)
})
}
+ base.luminance = function(rgb){
+ rgb = rgb || Walls.colors.ceiling
+ var rgb_max = Math.max.apply(0, rgb)
+ var rgb_min = Math.min.apply(255, rgb)
+ return (rgb_max + rgb_min ) / 2
+ }
+
+ base.setBodyColor = function(){
+ $("#header").toggleClass("black", Walls.luminance() < 100)
+ $("body").css("background-color", rgb_string( Walls.colors.wall ))
+ }
+ base.clearBodyColor = function(){
+ $("#header").removeClass("black")
+ $("body").css("background-color", "transparent")
+ }
+
+ base.setWallpaper = {
+ wall: function(background){
+ var img = new Image ()
+ img.onload = function(){
+ Walls.list.forEach(function(wall){
+ wall.wallpaper(background, img)
+ })
+ }.bind(this)
+ img.src = background.src.replace(/url\(\"?\'?/,"").replace(/\"?\'?\)/,"")
+ img.complete && img.onload()
+ },
+ floor: function(background){
+ Walls.floors.forEach(function(floor){
+ if (floor.ceiling) return
+ floor.wallpaper(background)
+ })
+ },
+ ceiling: function(background){
+ Walls.floors.forEach(function(floor){
+ if (! floor.ceiling) return
+ floor.wallpaper(background)
+ })
+ },
+ }
+
+ base.clearWallpaper = {
+ wall: function(){
+ Walls.list.forEach(function(wall){
+ wall.wallpaper("none")
+ })
+ },
+ outline: function(){
+ },
+ floor: function(){
+ Walls.floors.forEach(function(floor){
+ if (floor.ceiling) return
+ floor.wallpaper("none")
+ })
+ },
+ ceiling: function(){
+ Walls.floors.forEach(function(floor){
+ if (! floor.ceiling) return
+ floor.wallpaper("none")
+ })
+ },
+ }
+
base.setColor = {
wall: function(rgb){
var rgbaColor = rgba_string(rgb, app.defaults.wallOpacity)
+ var rgbColor = rgb_string(rgb)
+
+ if (Rooms.mover.room) {
+ $("#header").toggleClass("black", base.luminance() < 100)
+ $("body").css("background-color", rgbColor)
+ }
+
Walls.colors.wall = rgb
- Walls.forEach(function(wall){
+ Walls.list.forEach(function(wall){
wall.outline(rgbaColor, null)
})
},
@@ -115,7 +221,7 @@
outline: function(rgb){
var rgbColor = rgb_string(rgb)
Walls.colors.outline = rgb
- Walls.forEach(function(wall){
+ Walls.list.forEach(function(wall){
wall.outline(null, rgbColor)
})
},
@@ -123,19 +229,20 @@
floor: function(rgb){
var rgbColor = rgb_string(rgb)
Walls.colors.floor = rgb
- Rooms.forEach(function(room){
- room.setFloorColor(rgbColor)
+ Walls.floors.forEach(function(floor){
+ if (floor.ceiling) return
+ floor.color(rgbColor)
})
},
ceiling: function(rgb){
var rgbColor = rgb_string(rgb)
Walls.colors.ceiling = rgb
- Rooms.forEach(function(room){
- room.setCeilingColor(rgbColor)
+ Walls.floors.forEach(function(floor){
+ if (! floor.ceiling) return
+ floor.color(rgbColor)
})
},
-
}
}