use crate::{
ffi,
math::{BoundingBox, Matrix, Ray, RayCollision, Rectangle, Vector2, Vector3},
model::Mesh,
};
#[inline]
pub fn check_collision_rects(rec1: Rectangle, rec2: Rectangle) -> bool {
unsafe { ffi::CheckCollisionRecs(rec1.into(), rec2.into()) }
}
#[inline]
pub fn check_collision_circles(
center1: Vector2,
radius1: f32,
center2: Vector2,
radius2: f32,
) -> bool {
unsafe { ffi::CheckCollisionCircles(center1.into(), radius1, center2.into(), radius2) }
}
#[inline]
pub fn check_collision_circle_rect(center: Vector2, radius: f32, rec: Rectangle) -> bool {
unsafe { ffi::CheckCollisionCircleRec(center.into(), radius, rec.into()) }
}
#[inline]
pub fn check_point_inside_rect(point: Vector2, rec: Rectangle) -> bool {
unsafe { ffi::CheckCollisionPointRec(point.into(), rec.into()) }
}
#[inline]
pub fn check_point_inside_circle(point: Vector2, center: Vector2, radius: f32) -> bool {
unsafe { ffi::CheckCollisionPointCircle(point.into(), center.into(), radius) }
}
#[inline]
pub fn check_point_inside_triangle(point: Vector2, p1: Vector2, p2: Vector2, p3: Vector2) -> bool {
unsafe { ffi::CheckCollisionPointTriangle(point.into(), p1.into(), p2.into(), p3.into()) }
}
#[inline]
pub fn check_point_inside_polygon(point: Vector2, points: &[Vector2]) -> bool {
unsafe {
ffi::CheckCollisionPointPoly(point.into(), points.as_ptr() as *mut _, points.len() as _)
}
}
#[inline]
pub fn check_collision_lines(
start_pos1: Vector2,
end_pos1: Vector2,
start_pos2: Vector2,
end_pos2: Vector2,
) -> Option<Vector2> {
let mut coll_pt: ffi::Vector2 = ffi::Vector2 { x: 0., y: 0. };
if unsafe {
ffi::CheckCollisionLines(
start_pos1.into(),
end_pos1.into(),
start_pos2.into(),
end_pos2.into(),
&mut coll_pt as *mut _,
)
} {
Some(coll_pt.into())
} else {
None
}
}
#[inline]
pub fn check_collision_point_line(
point: Vector2,
p1: Vector2,
p2: Vector2,
threshold: u32,
) -> bool {
unsafe { ffi::CheckCollisionPointLine(point.into(), p1.into(), p2.into(), threshold as _) }
}
#[inline]
pub fn get_collision_rect(rec1: Rectangle, rec2: Rectangle) -> Rectangle {
unsafe { ffi::GetCollisionRec(rec1.into(), rec2.into()).into() }
}
#[inline]
pub fn check_collision_spheres(
center1: Vector3,
radius1: f32,
center2: Vector3,
radius2: f32,
) -> bool {
unsafe { ffi::CheckCollisionSpheres(center1.into(), radius1, center2.into(), radius2) }
}
#[inline]
pub fn check_collision_boxes(box1: BoundingBox, box2: BoundingBox) -> bool {
unsafe { ffi::CheckCollisionBoxes(box1.into(), box2.into()) }
}
#[inline]
pub fn check_collision_box_sphere(bbox: BoundingBox, center: Vector3, radius: f32) -> bool {
unsafe { ffi::CheckCollisionBoxSphere(bbox.into(), center.into(), radius) }
}
#[inline]
pub fn get_ray_collision_sphere(ray: Ray, center: Vector3, radius: f32) -> RayCollision {
unsafe { ffi::GetRayCollisionSphere(ray.into(), center.into(), radius).into() }
}
#[inline]
pub fn get_ray_collision_box(ray: Ray, bbox: BoundingBox) -> RayCollision {
unsafe { ffi::GetRayCollisionBox(ray.into(), bbox.into()).into() }
}
#[inline]
pub fn get_ray_collision_mesh(ray: Ray, mesh: Mesh, transform: Matrix) -> RayCollision {
unsafe { ffi::GetRayCollisionMesh(ray.into(), mesh.raw.clone(), transform.into()).into() }
}
#[inline]
pub fn get_ray_collision_triangle(ray: Ray, p1: Vector3, p2: Vector3, p3: Vector3) -> RayCollision {
unsafe { ffi::GetRayCollisionTriangle(ray.into(), p1.into(), p2.into(), p3.into()).into() }
}
#[inline]
pub fn get_ray_collision_quad(
ray: Ray,
p1: Vector3,
p2: Vector3,
p3: Vector3,
p4: Vector3,
) -> RayCollision {
unsafe {
ffi::GetRayCollisionQuad(ray.into(), p1.into(), p2.into(), p3.into(), p4.into()).into()
}
}