(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 Rooms = new function(){ var base = this base.list = {} base.walls = {} base.regions = [] base.uid = new UidGenerator(base.list) base.init = function(){ Rooms.builder.init() Rooms.clipper.init() Rooms.mover.init() } base.filter = function(f){ return _.values(base.list).filter(f) } base.add = function(room){ base.list[room.id] = room } base.add_with_rect = function(rect){ var room = new Room({ rect: rect, height: 500 }) base.add(room) return room } base.remove = function(room){ delete base.list[room.id] Rooms.clipper.update() } base.removeAll = function(){ base.list = {} base.regions = [] Rooms.clipper.update() } base.count = function(){ return this.values().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.list) } base.serialize = function(){ var rooms = base.map(function(room){ return room.serialize() }) return rooms } base.deserialize = function(rooms_data){ rooms_data.forEach(function(data){ var rect = new Rect(data.rect.x[0], data.rect.y[0], data.rect.x[1], data.rect.y[1]) var room = new Room({ id: data.id, rect: rect, height: data.height }) base.add(room) }) Rooms.clipper.update() } base.serializeWalls = function(){ return [] } base.deserializeWalls = function(walls_data){ return [] } base.sorted_by_position = function(){ return sort.rooms_by_position( base.values() ) } base.sorted_by_height = function(){ return sort.rooms_by_height( base.values() ) } base.sorted_by_area = function(){ return sort.rooms_by_area( base.values() ) } } if ('window' in this) { window.Rooms = Rooms } else { module.exports = Rooms } })()