summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles/engine/rooms/_rooms.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts/rectangles/engine/rooms/_rooms.js')
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/_rooms.js72
1 files changed, 68 insertions, 4 deletions
diff --git a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js
index 6f96275..9aff33f 100644
--- a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js
+++ b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js
@@ -13,6 +13,7 @@
vec2 = require('../../models/vec2')
Rect = require('../../models/rect')
Room = require('../../models/room')
+ Walls = require('./_walls')
UidGenerator = require('../../util/uid')
sort = require('../../util/sort')
_ = require('lodash')
@@ -36,6 +37,7 @@
base.list = {}
base.regions = []
+ base.shapesMode = false
base.uid = new UidGenerator(base.list)
@@ -64,13 +66,13 @@
base.remove = function(room){
delete base.list[room.id]
- Rooms.clipper.update()
+ Rooms.rebuild()
}
base.removeAll = function(){
base.list = {}
base.regions = []
- Rooms.clipper.update()
+ Rooms.rebuild()
}
base.count = function(){
@@ -80,6 +82,10 @@
base.forEach = function(f){
return base.values().forEach(f)
}
+
+ base.some = function(f){
+ return base.values().some(f)
+ }
base.map = function(f){
return base.values().map(f)
@@ -88,6 +94,17 @@
base.values = function(){
return _.values(base.list)
}
+
+ base.rebuild = function(walls_data){
+ if (base.shapesMode) return
+ walls_data = walls_data || Walls.serialize()
+ Rooms.clipper.update()
+ Rooms.builder.rebuild()
+ Rooms.grouper.build()
+ Walls.paint()
+ Walls.deserialize(walls_data)
+ app.tube("rooms-built")
+ }
base.serialize = function(){
var rooms = base.map(function(room){
@@ -96,7 +113,7 @@
return rooms
}
- base.deserialize = function(rooms_data){
+ base.deserialize = function(rooms_data, walls_data){
rooms_data.forEach(function(data){
if (! data || ! data.rect) return
var rect = new Rect(data.rect.x[0], data.rect.y[0], data.rect.x[1], data.rect.y[1])
@@ -107,7 +124,46 @@
})
base.add(room)
})
- Rooms.clipper.update()
+ Rooms.rebuild(walls_data)
+ }
+
+ base.deserializeFromShapes = function(data, walls_data) {
+ walls_data = walls_data || Walls.serialize()
+ base.shapesMode = true
+ window.viewHeight = data.viewHeight || app.defaults.viewHeight
+ window.wallHeight = data.wallHeight || app.defaults.wallHeight
+ $(".units").val( data.units )
+
+ Rooms.builder.clear()
+
+ shapes.deserialize( data.shapes )
+ // shapes.build()
+ var regions = RegionList.build()
+
+ regions.forEach(function(region){
+ var room = new Room({
+ rect: region,
+ regions: [region],
+ height: wallHeight,
+ })
+
+ room.sides = region.sides
+ region.id = Rooms.uid("room_")
+ Rooms.list[ region.id ] = room
+ var mx_walls = Rooms.builder.build_walls(region)
+ room.mx_floor = Rooms.builder.make_floor(room, region)
+ room.mx_ceiling = Rooms.builder.make_ceiling(room, region)
+
+ mx_walls.forEach(function(mx){ scene.add(mx) })
+ scene.add(room.mx_floor)
+ scene.add(room.mx_ceiling)
+ })
+
+ Rooms.grouper.build()
+
+ Walls.paint()
+ Walls.deserialize(walls_data)
+ app.tube("rooms-built")
}
base.report = function(){
@@ -118,6 +174,14 @@
return data
}
+ base.extent = function(){
+ var extent = new Rect ( new vec2(Infinity, -Infinity), new vec2(Infinity, -Infinity) )
+ base.forEach(function(room){
+ extent.expand(room.rect)
+ })
+ return extent
+ }
+
base.sorted_by_position = function(){
return sort.rooms_by_position( base.values() )
}