2014-07-21 21:08:18 +00:00
|
|
|
/********************************************************************************
|
2015-02-15 20:56:45 +00:00
|
|
|
* ReactPhysics3D physics library, http://www.reactphysics3d.com *
|
2016-04-11 18:15:20 +00:00
|
|
|
* Copyright (c) 2010-2016 Daniel Chappuis *
|
2014-07-21 21:08:18 +00:00
|
|
|
*********************************************************************************
|
|
|
|
* *
|
|
|
|
* This software is provided 'as-is', without any express or implied warranty. *
|
|
|
|
* In no event will the authors be held liable for any damages arising from the *
|
|
|
|
* use of this software. *
|
|
|
|
* *
|
|
|
|
* Permission is granted to anyone to use this software for any purpose, *
|
|
|
|
* including commercial applications, and to alter it and redistribute it *
|
|
|
|
* freely, subject to the following restrictions: *
|
|
|
|
* *
|
|
|
|
* 1. The origin of this software must not be misrepresented; you must not claim *
|
|
|
|
* that you wrote the original software. If you use this software in a *
|
|
|
|
* product, an acknowledgment in the product documentation would be *
|
|
|
|
* appreciated but is not required. *
|
|
|
|
* *
|
|
|
|
* 2. Altered source versions must be plainly marked as such, and must not be *
|
|
|
|
* misrepresented as being the original software. *
|
|
|
|
* *
|
|
|
|
* 3. This notice may not be removed or altered from any source distribution. *
|
|
|
|
* *
|
|
|
|
********************************************************************************/
|
|
|
|
|
|
|
|
#ifndef REACTPHYSICS3D_RAYCAST_INFO_H
|
|
|
|
#define REACTPHYSICS3D_RAYCAST_INFO_H
|
|
|
|
|
|
|
|
// Libraries
|
2014-08-07 19:38:31 +00:00
|
|
|
#include "mathematics/Vector3.h"
|
2014-11-04 21:38:40 +00:00
|
|
|
#include "mathematics/Ray.h"
|
2014-07-21 21:08:18 +00:00
|
|
|
|
|
|
|
/// ReactPhysics3D namespace
|
|
|
|
namespace reactphysics3d {
|
|
|
|
|
2014-08-01 10:36:32 +00:00
|
|
|
// Declarations
|
|
|
|
class CollisionBody;
|
|
|
|
class ProxyShape;
|
|
|
|
class CollisionShape;
|
|
|
|
|
2014-07-21 21:08:18 +00:00
|
|
|
// Structure RaycastInfo
|
|
|
|
/**
|
|
|
|
* This structure contains the information about a raycast hit.
|
|
|
|
*/
|
|
|
|
struct RaycastInfo {
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
// -------------------- Methods -------------------- //
|
|
|
|
|
|
|
|
/// Private copy constructor
|
|
|
|
RaycastInfo(const RaycastInfo& raycastInfo);
|
|
|
|
|
|
|
|
/// Private assignment operator
|
|
|
|
RaycastInfo& operator=(const RaycastInfo& raycastInfo);
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
// -------------------- Attributes -------------------- //
|
|
|
|
|
|
|
|
/// Hit point in world-space coordinates
|
|
|
|
Vector3 worldPoint;
|
|
|
|
|
2014-09-02 20:54:19 +00:00
|
|
|
/// Surface normal at hit point in world-space coordinates
|
|
|
|
Vector3 worldNormal;
|
|
|
|
|
2014-10-21 20:26:40 +00:00
|
|
|
/// Fraction distance of the hit point between point1 and point2 of the ray
|
|
|
|
/// The hit point "p" is such that p = point1 + hitFraction * (point2 - point1)
|
|
|
|
decimal hitFraction;
|
2014-07-21 21:08:18 +00:00
|
|
|
|
2015-12-02 21:25:52 +00:00
|
|
|
/// Mesh subpart index that has been hit (only used for triangles mesh and -1 otherwise)
|
|
|
|
int meshSubpart;
|
|
|
|
|
|
|
|
/// Hit triangle index (only used for triangles mesh and -1 otherwise)
|
|
|
|
int triangleIndex;
|
|
|
|
|
2014-07-21 21:08:18 +00:00
|
|
|
/// Pointer to the hit collision body
|
|
|
|
CollisionBody* body;
|
|
|
|
|
|
|
|
/// Pointer to the hit proxy collision shape
|
|
|
|
ProxyShape* proxyShape;
|
|
|
|
|
|
|
|
// -------------------- Methods -------------------- //
|
|
|
|
|
|
|
|
/// Constructor
|
2016-05-15 17:25:58 +00:00
|
|
|
RaycastInfo() : meshSubpart(-1), triangleIndex(-1), body(nullptr), proxyShape(nullptr) {
|
2014-07-21 21:08:18 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Destructor
|
|
|
|
~RaycastInfo() {
|
|
|
|
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2014-11-04 21:38:40 +00:00
|
|
|
// Class RaycastCallback
|
|
|
|
/**
|
|
|
|
* This class can be used to register a callback for ray casting queries.
|
|
|
|
* You should implement your own class inherited from this one and implement
|
|
|
|
* the notifyRaycastHit() method. This method will be called for each ProxyShape
|
|
|
|
* that is hit by the ray.
|
|
|
|
*/
|
|
|
|
class RaycastCallback {
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
// -------------------- Methods -------------------- //
|
|
|
|
|
|
|
|
/// Destructor
|
|
|
|
virtual ~RaycastCallback() {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/// This method will be called for each ProxyShape that is hit by the
|
|
|
|
/// ray. You cannot make any assumptions about the order of the
|
|
|
|
/// calls. You should use the return value to control the continuation
|
2015-12-02 21:25:52 +00:00
|
|
|
/// of the ray. The returned value is the next maxFraction value to use.
|
2014-11-04 21:38:40 +00:00
|
|
|
/// If you return a fraction of 0.0, it means that the raycast should
|
|
|
|
/// terminate. If you return a fraction of 1.0, it indicates that the
|
|
|
|
/// ray is not clipped and the ray cast should continue as if no hit
|
|
|
|
/// occurred. If you return the fraction in the parameter (hitFraction
|
|
|
|
/// value in the RaycastInfo object), the current ray will be clipped
|
|
|
|
/// to this fraction in the next queries. If you return -1.0, it will
|
|
|
|
/// ignore this ProxyShape and continue the ray cast.
|
2015-02-12 21:31:26 +00:00
|
|
|
/**
|
|
|
|
* @param raycastInfo Information about the raycast hit
|
|
|
|
* @return Value that controls the continuation of the ray after a hit
|
|
|
|
*/
|
2014-11-04 21:38:40 +00:00
|
|
|
virtual decimal notifyRaycastHit(const RaycastInfo& raycastInfo)=0;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
/// Structure RaycastTest
|
|
|
|
struct RaycastTest {
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
/// User callback class
|
|
|
|
RaycastCallback* userCallback;
|
|
|
|
|
|
|
|
/// Constructor
|
|
|
|
RaycastTest(RaycastCallback* callback) {
|
|
|
|
userCallback = callback;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Ray cast test against a proxy shape
|
|
|
|
decimal raycastAgainstShape(ProxyShape* shape, const Ray& ray);
|
|
|
|
};
|
|
|
|
|
2014-07-21 21:08:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|