Commit ee795f47 authored by Libor Moravčík's avatar Libor Moravčík
Browse files

Raycast in vclip now properly returns results. LineSegmentCollider fixed by...

Raycast in vclip now properly returns results. LineSegmentCollider fixed by creating dummy identity Frame
parent c57ff721
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -309,6 +309,13 @@ struct LineSegmentCollider final : Collider
	LineSegmentCollider(vec3 a, vec3 b)
	    : Collider(ColliderType::LineSegment, new geometry::LineSegment(a, b))
	{
		// Set dummy Identity Frame
		m_frame = new com::Frame();
	}

	~LineSegmentCollider()
	{
		delete m_frame;
	}

	geometry::LineSegment const *shape() const override
+2 −3
Original line number Diff line number Diff line
@@ -579,7 +579,7 @@ bool VClip::raycast(geometry::Ray const &ray, ConvexHullCollider *collider, RayC
	auto line_half_edge = line->mesh()->half_edge(0).lock().get();

	auto hits = std::set<geometry::RayIntersection>{};

	result = RayCastResult(collider, hits);
	// Update collider's mesh
	(void)collider->mesh();

@@ -591,7 +591,6 @@ bool VClip::raycast(geometry::Ray const &ray, ConvexHullCollider *collider, RayC

	if (detect(collider, line, info, new_cache, cache) == false)
	{
		result = RayCastResult(collider, hits);
		return false;
	}

@@ -635,7 +634,7 @@ bool VClip::raycast(geometry::Ray const &ray, ConvexHullCollider *collider, RayC
		hits.emplace(geometry::ParametrisedPoint{point_2, new_ray.parameter_at(point_2)},
			     normal_2);
	}

	result = {collider, hits};
	delete line;
	return true;
}