var Rooms = new function(){ var base = this base.list = {} base.walls = {} base.regions = [] 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) } 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.uid = UidGenerator(base.list) 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() ) } }