summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts/rectangles')
-rw-r--r--public/assets/javascripts/rectangles/engine/shapes/regionlist.js54
-rw-r--r--public/assets/javascripts/rectangles/models/rect.js6
-rw-r--r--public/assets/javascripts/rectangles/models/vec2.js3
3 files changed, 28 insertions, 35 deletions
diff --git a/public/assets/javascripts/rectangles/engine/shapes/regionlist.js b/public/assets/javascripts/rectangles/engine/shapes/regionlist.js
index 94b902a..42519cf 100644
--- a/public/assets/javascripts/rectangles/engine/shapes/regionlist.js
+++ b/public/assets/javascripts/rectangles/engine/shapes/regionlist.js
@@ -12,7 +12,7 @@ var RegionList = (function(){
var rooms = []
var open_segments = []
- var segment, open_segment, vertical, other_side
+ var segment, open_segment, y_segments
for (var i = 0; i < segments.length; i++) {
segment = segments[i]
@@ -21,12 +21,20 @@ var RegionList = (function(){
}
for (var j = 0; j < open_segments.length; j++) {
open_segment = open_segments[j]
- if (overlaps(segment, open_segment)) {
+ if (segment.y.overlaps(open_segment.y)) {
// if we have overlap, it means we have made a full room
- other_side = clone_segment(open_segment)
- other_side[0].a = segment[0].a
- other_side[1].a = segment[1].a
- rooms.push([open_segment, other_side])
+
+ y_segments = open_segment.y.split(segment.y)
+
+ if (y_segments.length == 1) {
+ open_segment.x.b = segment.x.b
+ rooms.push(open_segment)
+ }
+
+// other_side = clone_segment(open_segment)
+// other_side[0].a = segment[0].a
+// other_side[1].a = segment[1].a
+// rooms.push([open_segment, other_side])
open_segments.splice(j, 1)
j--
}
@@ -43,8 +51,8 @@ var RegionList = (function(){
// get a list of all segments from these polylines
var segments = shapes.getAllSegments()
- // re-orientate them so they're either facing up or right
- segments.forEach(function(segment){
+ // 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) {
@@ -57,36 +65,12 @@ var RegionList = (function(){
segment.push(segment.shift())
}
}
+ return new Rect( segment[0].a, segment[0].b, segment[1].a, segment[1].b )
})
- // sort them from top to bottom, left to right
- segments = segments.sort(function(a,b){
- if (a[0].a < b[0].a) {
- return -1
- }
- else if (a[0].a == b[0].a) {
- if (a[0].b < b[0].b) {
- return -1
- }
- else if (a[0].b == b[0].b) {
- return 0
- }
- else {
- return 1
- }
- }
- else {
- return 1
- }
- })
-
- return segments
+ return sort.rects_by_position(segments)
}
-
- function isVertical (segment) { return segment[0].a == segment[1].a }
- function isHorizontal (segment) { return segment[0].b == segment[1].b }
- function overlaps (a,b) { return (a[0].b > b[0].b || a[1].b < b[1].b) }
- function clone_segment(a){ return [a[0].clone(), a[1].clone()] }
+
return RegionList
})() \ No newline at end of file
diff --git a/public/assets/javascripts/rectangles/models/rect.js b/public/assets/javascripts/rectangles/models/rect.js
index 92c8c9e..a4756ed 100644
--- a/public/assets/javascripts/rectangles/models/rect.js
+++ b/public/assets/javascripts/rectangles/models/rect.js
@@ -62,6 +62,12 @@
Rect.prototype.maxDimension = function(){
return abs(this.width) > abs(this.height) ? this.width : this.height
}
+ Rect.prototype.isVertical = function(){
+ return this.x.isPoint()
+ }
+ Rect.prototype.isHorizontal = function(){
+ return this.y.isPoint()
+ }
Rect.prototype.mul = function(n){
this.x.mul(n)
diff --git a/public/assets/javascripts/rectangles/models/vec2.js b/public/assets/javascripts/rectangles/models/vec2.js
index 290e45e..90a56c6 100644
--- a/public/assets/javascripts/rectangles/models/vec2.js
+++ b/public/assets/javascripts/rectangles/models/vec2.js
@@ -43,6 +43,9 @@
vec2.prototype.eq = function(v){
return this.a == v.a && this.b == v.b
}
+ vec2.prototype.isPoint = function(){
+ return this.a == this.b
+ }
vec2.prototype.add = function(n){
this.a += n
this.b += n