PRetty good collision detection but there is still some small bug I don't know about
This commit is contained in:
@ -9,4 +9,14 @@ using namespace Dawn;
|
||||
|
||||
Collider3D::Collider3D(SceneItem *item) : SceneItemComponent(item) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
bool_t Collider3D::raycast(
|
||||
struct Collider3DRayResult *result,
|
||||
struct Ray3D ray
|
||||
) {
|
||||
assertNotNull(result);
|
||||
if(!this->performRaycast(result, ray)) return false;
|
||||
result->collider = this;
|
||||
return true;
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ namespace Dawn {
|
||||
glm::vec3 point;
|
||||
float_t distance;
|
||||
glm::vec3 normal;
|
||||
Collider3D *collider;
|
||||
};
|
||||
|
||||
enum Collider3DType {
|
||||
@ -20,6 +21,14 @@ namespace Dawn {
|
||||
|
||||
class Collider3D : public SceneItemComponent {
|
||||
protected:
|
||||
/**
|
||||
* Internal per-collider raycast implementation. Same arguments as
|
||||
* Collider3D::raycast()
|
||||
*/
|
||||
virtual bool_t performRaycast(
|
||||
struct Collider3DRayResult *result,
|
||||
struct Ray3D ray
|
||||
) = 0;
|
||||
|
||||
public:
|
||||
Collider3D(SceneItem *item);
|
||||
@ -31,10 +40,7 @@ namespace Dawn {
|
||||
* @param ray The ray to cast against.
|
||||
* @return True if the ray intercepts this collider, otherwise false.
|
||||
*/
|
||||
virtual bool_t raycast(
|
||||
struct Collider3DRayResult *result,
|
||||
struct Ray3D ray
|
||||
) = 0;
|
||||
bool_t raycast(struct Collider3DRayResult *result, struct Ray3D ray);
|
||||
|
||||
/**
|
||||
* Returns which type of collider this is. Useful for performing dynamic
|
||||
|
@ -11,7 +11,7 @@ CubeCollider::CubeCollider(SceneItem *item) : Collider3D(item) {
|
||||
|
||||
}
|
||||
|
||||
bool_t CubeCollider::raycast(
|
||||
bool_t CubeCollider::performRaycast(
|
||||
struct Collider3DRayResult *result,
|
||||
struct Ray3D ray
|
||||
) {
|
||||
|
@ -9,17 +9,18 @@
|
||||
|
||||
namespace Dawn {
|
||||
class CubeCollider : public Collider3D {
|
||||
protected:
|
||||
bool_t performRaycast(
|
||||
struct Collider3DRayResult *result,
|
||||
struct Ray3D ray
|
||||
) override;
|
||||
|
||||
public:
|
||||
glm::vec3 min = glm::vec3(-0.5f, -0.5f, -0.5f);
|
||||
glm::vec3 max = glm::vec3(0.5f, 0.5f, 0.5f);
|
||||
|
||||
CubeCollider(SceneItem *item);
|
||||
|
||||
bool_t raycast(
|
||||
struct Collider3DRayResult *result,
|
||||
struct Ray3D ray
|
||||
) override;
|
||||
|
||||
enum Collider3DType getColliderType() override;
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user