summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--public/assets/javascripts/rectangles/engine/map/draw.js4
-rw-r--r--public/assets/javascripts/rectangles/engine/shapes/regionlist.js62
-rw-r--r--public/assets/javascripts/rectangles/models/vec2.js3
-rw-r--r--public/assets/javascripts/ui/blueprint/BlueprintEditor.js8
4 files changed, 58 insertions, 19 deletions
diff --git a/public/assets/javascripts/rectangles/engine/map/draw.js b/public/assets/javascripts/rectangles/engine/map/draw.js
index 5824cc8..f47f10c 100644
--- a/public/assets/javascripts/rectangles/engine/map/draw.js
+++ b/public/assets/javascripts/rectangles/engine/map/draw.js
@@ -189,7 +189,7 @@ Map.Draw = function(map, opt){
var sides = map.sides()
var quant = sides.clone().quantize(MAP_GRID_SIZE)
for (var x = quant.x.a - MAP_GRID_SIZE; x <= quant.x.b; x += MAP_GRID_SIZE) {
- if (Math.round(x) % 10 == 0) {
+ if (Math.round(x) % 360 == 0) {
ctx.strokeStyle = "rgba(0,0,0,0.3)"
ctx.lineWidth = 1/map.zoom
}
@@ -200,7 +200,7 @@ Map.Draw = function(map, opt){
line(x, sides.y.a, x, sides.y.b)
}
for (var y = quant.y.a - MAP_GRID_SIZE; y <= quant.y.b; y += MAP_GRID_SIZE) {
- if (Math.round(y) % 10 == 0) {
+ if (Math.round(y) % 360 == 0) {
ctx.strokeStyle = "rgba(0,0,0,0.3)"
ctx.lineWidth = 1/map.zoom
}
diff --git a/public/assets/javascripts/rectangles/engine/shapes/regionlist.js b/public/assets/javascripts/rectangles/engine/shapes/regionlist.js
index f86968f..93a0df7 100644
--- a/public/assets/javascripts/rectangles/engine/shapes/regionlist.js
+++ b/public/assets/javascripts/rectangles/engine/shapes/regionlist.js
@@ -6,52 +6,86 @@ var RegionList = (function(){
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 seen_rooms = {}
var open_segments = []
var closed_segments = []
- var segment, open_segment, x_segment, y_segments, overlapped
+ var segment, open_segment, x_segment, y_segments, overlapped, seen_segments
for (var i = 0; i < segments.length; i++) {
segment = segments[i]
if (! segment.isVertical()) {
continue
}
- console.log(segment+"")
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
closed_segments.push(open_segments[j])
open_segments.splice(j--, 1)
x_segment = new vec2( open_segment.x.a, segment.x.b )
y_segments = open_segment.y.split(segment.y, TOP, BOTTOM)
- console.log(y_segments.map(function(s){ return s+"" }).join("\n"))
+
+ seen_segments = {}
+
y_segments.forEach(function(seg){
- rooms.push(new Rect( x_segment, seg[0] ))
+ seen_segments[ seg[0]+"" ] = true
+ var room = new Rect( x_segment, seg[0] )
+
+ if (seen_rooms[ room+"" ]) return;
+
+ seen_rooms[ room+"" ] = true
+ rooms.push(room)
+ var new_seg = new Rect( segment.x, seg[0] )
+ open_segments.unshift(new_seg)
+ j++
+ })
+ y_segments = segment.y.split(open_segment.y, TOP, BOTTOM)
+ y_segments.forEach(function(seg){
+ if (seen_segments[ seg[0]+"" ]) return;
var new_seg = new Rect( segment.x, seg[0] )
open_segments.unshift(new_seg)
j++
})
}
}
- if (! overlapped) {
+ if (overlapped) {
+ // sort open segments?
+ open_segments = open_segments.sort(function(a,b){
+ if (a.y.a < b.y.a) { return -1 }
+ if (a.y.a == b.y.a) { return 0 }
+ if (a.y.a > b.y.a) { return 1 }
+ })
+
+ if (open_segments.length < 2) { continue }
+
+ for (var k = 1; k < open_segments.length; k++) {
+ if (open_segments[k-1].y.containsVec(open_segments[k].y)) {
+ open_segments.splice(k--, 1)
+ }
+ else if (open_segments[k-1].y.overlaps(open_segments[k].y)) {
+ open_segments[k].y = open_segments[k].y.clone()
+ console.log(open_segments[k-1].y+"", open_segments[k].y+"")
+ open_segments[k].y.a = open_segments[k-1].y.b
+ }
+ }
+ }
+ else {
open_segments.push(segment)
}
}
-// console.log(rooms.map(function(s){ return s.toString() }).join("\n"))
- console.log({ rooms: rooms, open_segments: open_segments, segments: segments, closed_segments: closed_segments })
+ for (var i = 0; i < segments.length; i++) {
+ segment = segments[i]
+ if (! segment.isHorizontal()) {
+ continue
+ }
+ }
+
return { rooms: rooms, open_segments: open_segments, segments: segments, closed_segments: closed_segments }
}
diff --git a/public/assets/javascripts/rectangles/models/vec2.js b/public/assets/javascripts/rectangles/models/vec2.js
index 90a56c6..d37bc12 100644
--- a/public/assets/javascripts/rectangles/models/vec2.js
+++ b/public/assets/javascripts/rectangles/models/vec2.js
@@ -111,6 +111,9 @@
vec2.prototype.containsDisc = function(n,r){
return this.a <= n-r && n+r <= this.b
}
+ vec2.prototype.containsVec = function(v){
+ return this.a <= v.a && v.b <= this.b
+ }
vec2.prototype.clamp = function(n){
return clamp(n, this.a, this.b)
}
diff --git a/public/assets/javascripts/ui/blueprint/BlueprintEditor.js b/public/assets/javascripts/ui/blueprint/BlueprintEditor.js
index cf9dea6..0b27d0c 100644
--- a/public/assets/javascripts/ui/blueprint/BlueprintEditor.js
+++ b/public/assets/javascripts/ui/blueprint/BlueprintEditor.js
@@ -108,7 +108,7 @@ var BlueprintEditor = View.extend(AnimatedView.prototype).extend({
}
shapes.forEach(function(shape){
- shape.draw(map.draw.ctx)
+// shape.draw(map.draw.ctx)
})
map.draw.ctx.strokeStyle = "#f00";
@@ -117,14 +117,16 @@ var BlueprintEditor = View.extend(AnimatedView.prototype).extend({
map.draw.camera(scene.camera)
this.rooms.open_segments.forEach(function(seg,i){
- map.draw.ctx.fillStyle = "#00f"
+ map.draw.ctx.fillStyle = "rgba(0,0,255,0.2)"
map.draw.ctx.fillRect( seg.x.a, seg.y.a, seg.width()+10, seg.height() )
})
this.rooms.closed_segments.forEach(function(seg,i){
- map.draw.ctx.fillStyle = "#0ff"
+ map.draw.ctx.fillStyle = "rgba(0,255,0,0.2)"
map.draw.ctx.fillRect( seg.x.a, seg.y.a, seg.width()+10, seg.height() )
})
+
+ var colors = ["rgba(0,0,0,0.1)"]
this.rooms.rooms.forEach(function(room,i){
map.draw.ctx.fillStyle = colors[i % colors.length]