summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--public/assets/test/intersect3.html38
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)
}