2
0
Эх сурвалжийг харах

[terrain] Fix editor raycast when start point is close to the terrain

Clement Espeute 1 жил өмнө
parent
commit
b99a70be46

+ 10 - 3
hrt/prefab/terrain/Terrain.hx

@@ -123,23 +123,30 @@ class Terrain extends Object3D {
 		}
 
 		var dist = b.rayIntersection(ray, false);
-		if( dist < 0 )
-			return -1;
+		if( dist < 0 ) {
+			// Check if we start IN the collision
+			if (!b.contains(ray.getPoint(0)))
+				return -1;
+			dist = 0;
+		}
 		var pt = ray.getPoint(dist);
 		var m = this.vertexPerMeter;
-		var prevH = pt.z;
+		var prevH = terrain.getLocalHeight(pt.x, pt.y);
 		while( true ) {
 			pt.x += ray.lx * m;
 			pt.y += ray.ly * m;
 			pt.z += ray.lz * m;
+
 			if( !b.contains(pt) )
 				break;
 			var h = terrain.getLocalHeight(pt.x, pt.y);
+
 			if( pt.z < h ) {
 				var k = 1 - (prevH - (pt.z - ray.lz * m)) / (ray.lz * m - (h - prevH));
 				pt.x -= k * ray.lx * m;
 				pt.y -= k * ray.ly * m;
 				pt.z -= k * ray.lz * m;
+
 				return pt.sub(ray.getPos()).length();
 			}
 			prevH = h;