Parcourir la source

provide sync version of Raycast::cast

mikymod il y a 12 ans
Parent
commit
1f3afd3758
2 fichiers modifiés avec 18 ajouts et 0 suppressions
  1. 15 0
      engine/physics/Raycast.cpp
  2. 3 0
      engine/physics/Raycast.h

+ 15 - 0
engine/physics/Raycast.cpp

@@ -92,4 +92,19 @@ void Raycast::cast(const Vector3& from, const Vector3& dir, const float length)
 	}
 }
 
+//-------------------------------------------------------------------------
+Actor* Raycast::sync_cast(const Vector3& from, const Vector3& dir, const float length)
+{
+	bool hit = m_scene->raycast(PxVec3(from.x, from.y, from.z), PxVec3(dir.x, dir.y, dir.z), length,
+								m_buffer, PxHitFlags(PxHitFlag::eDEFAULT), m_fd);
+
+	if (hit)
+	{
+		PxRaycastHit rh = m_buffer.getAnyHit(0);
+		return (Actor*)(rh.actor->userData);
+	}
+	else return NULL;
+}
+
+
 } // namespace crown

+ 3 - 0
engine/physics/Raycast.h

@@ -44,6 +44,7 @@ namespace crown
 {
 
 struct Vector3;
+struct Actor;
 
 struct Raycast
 {
@@ -59,6 +60,8 @@ struct Raycast
 	/// @a SceneQueryMode::ALL: as @a SceneQueryMode::CLOSEST, with more tuples
 	void	cast(const Vector3& from, const Vector3& dir, const float length);
 
+	Actor*	sync_cast(const Vector3& from, const Vector3& dir, const float length);
+
 private:
 
 	PxScene* 				m_scene;