diff options
Diffstat (limited to 'src/entity.c')
-rw-r--r-- | src/entity.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/entity.c b/src/entity.c index f4c3747..fa610d0 100644 --- a/src/entity.c +++ b/src/entity.c @@ -333,6 +333,35 @@ bool checkEntityCollision(Entity * entity1, Entity * entity2) { return false; } +RayCollision traceRayToEntity(Entity entity, Ray ray) { + int i; + RayCollision collision; + + Ray transformedRay = (Ray){ + .direction = ray.direction, + .position = Vector3Subtract(ray.position, entity.position) + }; + + // Check every mesh. + for (i = 0; i < entity.model->meshCount; ++i) { + collision = GetRayCollisionMesh( + transformedRay, + entity.model->meshes[i], + entity.model->transform + ); + + // Hit. + if (collision.hit) + return collision; + } + + return (RayCollision){.hit = false}; +} + +RayCollision traceRayToEntityRadius(Entity entity, Ray ray, float scale) { + return GetRayCollisionSphere(ray, entity.position, entity.radius * scale); +} + // Basic wireframe drawing. void entityDraw(Entity * entity) { entity->model->transform = QuaternionToMatrix(entity->rotation); |