(function(){ var vec2, Rect, Room, sort, UidGenerator, _ if ('window' in this) { vec2 = window.vec2 Rect = window.Rect Room = window.Room sort = window.sort UidGenerator = window.UidGenerator _ = window._ } else { vec2 = require('../../models/vec2') Rect = require('../../models/rect') Room = require('../../models/room') UidGenerator = require('../../util/uid') sort = require('../../util/sort') _ = require('lodash') FRONT = 0x1, BACK = 0x2, LEFT = 0x4, RIGHT = 0x8, FLOOR = 0x10, CEILING = 0x20 TOP = CEILING, BOTTOM = FLOOR function sidesToString(sides){ var s = "" if (sides & FRONT) s += "front " if (sides & BACK) s += "back " if (sides & LEFT) s += "left " if (sides & RIGHT) s += "right " if (sides & TOP) s += "top " if (sides & BOTTOM) s += "bottom " return s } } var Walls = new function(){ 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) { if (base.list.hasOwnProperty(i)) { return base.list[i] } } } base.find = function(id){ return base.lookup[id] } base.assign = function(list){ base.list = list base.lookup = {} list.forEach(function(wall){ 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(){ return this.list.length } base.forEach = function(f){ return base.values().forEach(f) } base.map = function(f){ return base.values().map(f) } base.values = function(){ return _.values(base.lookup) } base.serialize = function(){ var data = [] base.forEach(function(wall){ data.push(wall.serialize()) }) return data } base.deserialize = function(walls_data){ walls_data.forEach(function(wall_data){ if (! wall_data) { return } var wall = base.lookup[ wall_data.id ] if (! wall) { return } wall.deserialize( wall_data ) }) }, base.paint = function(){ var wallColor = rgba_string(Walls.colors.wall, app.defaults.wallOpacity) var outlineColor = rgb_string(Walls.colors.outline) var floorColor = rgb_string(Walls.colors.floor) var ceilingColor = rgb_string(Walls.colors.ceiling) Walls.list.forEach(function(wall){ wall.outline(wallColor, outlineColor) }) 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.list.forEach(function(wall){ wall.outline(rgbaColor, null) }) }, outline: function(rgb){ var rgbColor = rgb_string(rgb) Walls.colors.outline = rgb Walls.list.forEach(function(wall){ wall.outline(null, rgbColor) }) }, floor: function(rgb){ var rgbColor = rgb_string(rgb) Walls.colors.floor = rgb Walls.floors.forEach(function(floor){ if (floor.ceiling) return floor.color(rgbColor) }) }, ceiling: function(rgb){ var rgbColor = rgb_string(rgb) Walls.colors.ceiling = rgb Walls.floors.forEach(function(floor){ if (! floor.ceiling) return floor.color(rgbColor) }) }, } } if ('window' in this) { window.Walls = Walls } else { module.exports = Walls } })()