1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// Copyright (C) 2020-2025 phys-raycast authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//! # Phys Raycast Library
//!
//! A lightweight ray casting library for 3D physics shapes built on top of the phys-geom library.
//!
//! This library provides ray casting functionality for basic geometric shapes commonly used in
//! physics simulations. It's designed to be minimal and focused, depending only on the core
//! geometry library without requiring the full collision detection system.
//!
//! ## Features
//!
//! - **Basic Shapes**: Ray casting support for sphere, cuboid, capsule, cylinder, triangle, and
//! infinite plane
//! - **Minimal Dependencies**: Only depends on phys-geom for geometry types
//! - **Simple API**: Clean and intuitive ray casting interface
//! - **Type Safe**: Leverages Rust's type system for safe geometric operations
//!
//! ## Usage
//!
//! ```rust
//! use phys_raycast::{Raycast, RaycastHitResult};
//! use phys_geom::{Ray, shape::Sphere, math::{Point3, Vec3}};
//!
//! let sphere = Sphere::new(1.0);
//! let ray = Ray::new(Point3::new(-2.0, 0.0, 0.0), Vec3::x_axis());
//!
//! if let Some(hit) = sphere.raycast(ray, 10.0, false) {
//! println!("Hit at distance: {}, normal: {:?}", hit.distance, hit.normal);
//! }
//! ```
pub extern crate phys_geom as geom;
// Re-export commonly used types
pub use Real;
pub use Ray;
pub use ;