summaryrefslogtreecommitdiff
path: root/assets/javascripts/rectangles/clipper.js
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2014-04-16 15:08:44 -0400
committerJules Laplace <jules@okfoc.us>2014-04-16 15:08:44 -0400
commit3412cc42a9fa5e42d47073a2fa05a39712ad40f7 (patch)
tree016356ab239e51b1948ee2e2252bc847e13b17ba /assets/javascripts/rectangles/clipper.js
parente50348e6d5af52d0fcc51d0ca30e21594aee6cbf (diff)
layer of indirection for rooms
Diffstat (limited to 'assets/javascripts/rectangles/clipper.js')
-rw-r--r--assets/javascripts/rectangles/clipper.js104
1 files changed, 53 insertions, 51 deletions
diff --git a/assets/javascripts/rectangles/clipper.js b/assets/javascripts/rectangles/clipper.js
index 6e5b93c..c606c8e 100644
--- a/assets/javascripts/rectangles/clipper.js
+++ b/assets/javascripts/rectangles/clipper.js
@@ -9,12 +9,18 @@ var clipper = new function(){
var regions = []
document.querySelector("#map").appendChild(canvas)
+ var rooms = base.rooms = []
+
+ base.creating = false
+ base.dragging = false
+
+ var modified = true
+ base.mouse = new rect(0,0,0,0)
+
base.init = function (){
- bind()
- animate()
+ base.bind()
}
- function animate(){
- requestAnimationFrame(animate)
+ base.animate = function(){
clear_canvas()
if (modified) {
@@ -23,29 +29,27 @@ var clipper = new function(){
}
draw_ruler()
draw_regions(base.regions)
- draw_mouse(mouse)
- z = false
+ draw_mouse(base.mouse)
+ modified = z = false
}
-
- var rects = base.rects = []
-
- this.creating = false
- this.dragging = false
-
- var modified = true
- var mouse = new rect(0,0,0,0)
-
- function bind(){
+ base.add_room = function(r){
+ rooms.push( new room({
+ id: rooms.length,
+ rect: r,
+ }) )
+ }
+ base.bind = function(){
canvas.addEventListener("mousedown", function(e){
e.stopPropagation()
var x = e.pageX, y = e.pageY
- mouse = new rect (x,y)
+ base.mouse = new rect (x,y)
if (e.shiftKey) {
- mouse.quantize(10)
+ base.mouse.quantize(10)
}
- var intersects = rects.filter(function(r){ return r.focused = r.contains(x,y) })
- // console.log(intersects)
+ var intersects = rooms.filter(function(r){
+ return r.focused = r.rect.contains(x,y)
+ })
if (intersects.length){
clipper.dragging = intersects[0]
@@ -54,7 +58,7 @@ var clipper = new function(){
clipper.creating = true
}
if (e.shiftKey && clipper.dragging) {
- clipper.dragging.quantize(10)
+ clipper.dragging.rect.quantize(10)
}
})
canvas.addEventListener("mousemove", function(e){
@@ -69,66 +73,67 @@ var clipper = new function(){
y = e.pageY
}
- mouse.x.b = x
- mouse.y.b = y
+ base.mouse.x.b = x
+ base.mouse.y.b = y
if (clipper.dragging) {
- clipper.dragging.translation.a = mouse.x.magnitude()
- clipper.dragging.translation.b = mouse.y.magnitude()
+ clipper.dragging.rect.translation.a = base.mouse.x.magnitude()
+ clipper.dragging.rect.translation.b = base.mouse.y.magnitude()
}
else if (clipper.creating) {
- mouse.x.b = x
- mouse.y.b = y
+ base.mouse.x.b = x
+ base.mouse.y.b = y
}
else {
- mouse.x.a = mouse.x.b
- mouse.y.a = mouse.y.b
+ base.mouse.x.a = base.mouse.x.b
+ base.mouse.y.a = base.mouse.y.b
}
})
document.addEventListener("mouseup", function(e){
e.stopPropagation()
if (clipper.creating) {
- if (mouse.height() != 0 && mouse.width() != 0) {
- rects.push(mouse.translate())
+ if (base.mouse.height() != 0 && base.mouse.width() != 0) {
+ base.add_room( base.mouse.translate() )
}
}
if (clipper.dragging) {
- clipper.dragging.translate()
+ clipper.dragging.rect.translate()
}
- mouse = new rect(e.pageX, e.pageY)
+ base.mouse = new rect(e.pageX, e.pageY)
clipper.creating = clipper.dragging = false
modified = true
})
}
function solve_rects(){
- var rects = sort_rects_by_position(base.rects)
+ var rooms = sort_rooms_by_position( base.rooms )
- for (var i = 0; i < rects.length; i++) {
- rects[i].id = i
- rects[i].reset()
+ for (var i = 0; i < rooms.length; i++) {
+ rooms[i].id = i
+ rooms[i].reset()
}
var regions = []
var left, right
- for (var i = 0; i < rects.length; i++) {
- left = rects[i]
- for (var j = i+1; j < rects.length; j++) {
- right = rects[j]
- if (left.intersects(right)) {
- left.clipTo(right)
- right.clipTo(left)
+ for (var i = 0; i < rooms.length; i++) {
+ left = rooms[i]
+ for (var j = i+1; j < rooms.length; j++) {
+ right = rooms[j]
+ if (left.rect.intersects(right.rect)) {
+ left.clipTo(right.rect)
+ right.clipTo(left.rect)
}
- if (left.x.b < right.x.a) {
+ if (left.rect.x.b < right.rect.x.a) {
break
}
}
}
- for (var i = 0; i < rects.length; i++) {
- regions = regions.concat(rects[i].regions)
+ for (var i = 0; i < rooms.length; i++) {
+ rooms[i].regions = rooms[i].regions.filter(function(r){ return !!r })
+ regions = regions.concat(rooms[i].regions)
}
- regions = sort_rects_by_area( regions.filter(function(r){ return !!r }) )
+ regions = sort_rects_by_area( regions )
var ty = new tree (regions[0].y.a, [regions[0]])
var tx = new tree (regions[0].x.a, ty)
@@ -162,9 +167,6 @@ var clipper = new function(){
}
base.regions = sort_rects_by_position(regions)
-
- modified = false
- // document.getElementById("intersects").innerHTML = sort_rects_by_position(regions).join("<br>")
}
// generate floor and ceiling for some regions