diff options
| -rw-r--r-- | public/assets/test/intersect3.html | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/public/assets/test/intersect3.html b/public/assets/test/intersect3.html index 4fec891..e897e8a 100644 --- a/public/assets/test/intersect3.html +++ b/public/assets/test/intersect3.html @@ -35,7 +35,7 @@ var scene = new MX.Scene() var w = canvas.width = window.innerWidth var h = canvas.height = window.innerHeight -var cursor = new Rect( 150, 250, 150, 250 ) +var cursor = new Rect( new vec2(564, 203), new vec2(734, 372) ) var wall_vec = new Rect ( 0, 0, 0, 0 ) var points = [ cursor.x, cursor.y ] @@ -70,7 +70,6 @@ Rooms.grouper.build() var r = 4 var intersect = new vec2 () -var intersects = [] var dragging = false, dragging_a, dragging_b var delta = new vec2( 0, 0 ) @@ -116,7 +115,7 @@ function draw () { drawLine(cursor.x, cursor.y, "#f00") hud.innerHTML = "" - intersects.length = 0 + var closest_face, closest_intersect, t, min_t = 1 Walls.list.forEach(function(wall, i){ if (wall.side & LEFT_RIGHT) { @@ -134,7 +133,7 @@ function draw () { drawLine(wall_vec.x, wall_vec.y, "#888", true) drawLine(origins.x, origins.y, "rgba(0,0,0,0.1)") - var t = perp(origins, wall_vec) / ( perp(cursor, wall_vec) || 0.0000001 ) + t = perp(origins, wall_vec) / ( perp(cursor, wall_vec) || 0.0000001 ) intersect.a = cursor.x.a + ( cursor.y.a - cursor.x.a ) * t intersect.b = cursor.x.b + ( cursor.y.b - cursor.x.b ) * t @@ -168,19 +167,30 @@ function draw () { } drawPoint(intersect) - if (intersecting_face) { - hud.innerHTML += intersecting_face.y.a + "<br>" + if (actually_intersects && intersecting_face && t < min_t) { + min_t = t + hud.innerHTML += t + "<br>" var clone = intersect.clone() clone.t = t - intersects.push( clone ) + closest_face = intersecting_face + closest_intersect = clone } }) - if (intersects.length) { - // get the intersect with smallest T value - // get the angle of the cam/pos vector + if (closest_face) { + var a = angle(cursor) + closest_intersect.a -= scene.camera.radius * cos(a) + closest_intersect.b -= scene.camera.radius * sin(a) + + ctx.fillStyle = "#00f" + drawPoint(closest_intersect) + drawLine(cursor.x, closest_intersect, "#00f") + // closest_face.vec + + // get the closest intersect, i.e. the one with smallest t value + // get the angle of the cursor // move the desired position to pos - 20px - // display this point + } } function drawLine (pa, pb, color, headless) { @@ -197,6 +207,12 @@ function drawPoint (p) { var y = p.b - r ctx.fillRect(x, y, r*2, r*2) } +function angle (va) { + return atan2(va.y.b - va.x.b, va.y.a - va.x.a) +} +function dot (va, vb) { + return (va.y.a - va.x.a) * (vb.y.a - vb.x.a) + (va.y.b - va.x.b) * (vb.y.b - vb.x.b) +} function perp (va, vb) { return (va.y.a - va.x.a) * (vb.y.b - vb.x.b) - (va.y.b - va.x.b) * (vb.y.a - vb.x.a) } |
