PRetty good collision detection but there is still some small bug I don't know about

This commit is contained in:
2023-02-24 23:37:27 -08:00
parent d5fdc29cb4
commit b32c7e8af6
15 changed files with 124 additions and 43 deletions

View File

@ -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;
}

View File

@ -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

View File

@ -11,7 +11,7 @@ CubeCollider::CubeCollider(SceneItem *item) : Collider3D(item) {
}
bool_t CubeCollider::raycast(
bool_t CubeCollider::performRaycast(
struct Collider3DRayResult *result,
struct Ray3D ray
) {

View File

@ -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;
};
}