var RegionList = (function(){ var RegionList = {} var regions = RegionList.regions RegionList.build = function(){ var segments = RegionList.getSortedSegments() // var xx = t % (segments[0].x.a - segments[segments.length-1].x.b) // loop over them from left to right // console.log(segments.map(function(s){ return s.toString() }).join("\n")) var rooms = [] var open_segments = [] var segment, open_segment, x_segment, y_segments, overlapped for (var i = 0; i < segments.length; i++) { segment = segments[i] if (! segment.isVertical()) { continue } overlapped = false for (var j = 0; j < open_segments.length; j++) { open_segment = open_segments[j] if (segment.y.overlaps(open_segment.y)) { // if we have overlap, it means we have made a full room console.log(segment.y+"", "overlaps", open_segment.y+"") overlapped = true open_segments.splice(j--, 1) x_segment = new vec2( open_segment.x.a, segment.x.b ) y_segments = segment.y.split(open_segment.y, TOP, BOTTOM) console.log(y_segments.map(function(s){ return s+"" }).join("\n")) y_segments.forEach(function(seg){ rooms.push(new Rect( x_segment, seg[0] )) var new_seg = new Rect( segment.x, seg[0] ) open_segments.shift(new_seg) j++ }) } } if (! overlapped) { open_segments.push(segment) } } // console.log(rooms.map(function(s){ return s.toString() }).join("\n")) return { rooms: rooms, open_segments: open_segments, segments: segments } } RegionList.getSortedSegments = function(){ // get a list of all segments from these polylines var segments = shapes.getAllSegments() // re-orient them so they're either facing up or right and make them into rects segments = segments.map(function(segment){ // vertical if (segment[0].a == segment[1].a) { if (segment[0].b > segment[1].b) { segment.push(segment.shift()) } } // horizontal else if (segment[0].b == segment[1].b) { if (segment[0].a > segment[1].a) { segment.push(segment.shift()) } } return new Rect( segment[0].a, segment[0].b, segment[1].a, segment[1].b ) }) return sort.rects_by_position(segments) } return RegionList })()