Expand description
§Getting started
use c2::{prelude::*, AABB, Circle, Capsule, Poly, Transformation, Rotation};
use std::f32::consts::PI;
fn main() {
let circle = Circle::new([0.0, 0.0], 15.0);
let aabb = AABB::new([10.0, 5.0], [20.0, 30.0]);
let collided = circle.collides_with(&aabb);
assert!(collided);
let capsule = Capsule::new([5.0, 5.0], [15.0, 10.0], 1.0);
let poly = Poly::from_slice(&[
[-1.0, -3.0],
[1.0, -3.0],
[1.0, 0.0],
[0.0, 1.0],
[-1.0, 0.0],
]);
let collided = capsule.collides_with(&poly);
assert!(!collided);
let transformation =
Transformation::new([5.0, 4.0], Rotation::radians(PI / 2.0));
let collided = circle.collides_with(&(poly, transformation));
assert!(collided);
let manifold = circle.manifold(&poly);
/*
The manifold is used for resolving collisions and has the following methods:
manifold.count() -> i32
manifold.depths() -> [f32; 2]
manifold.contact_points() -> [Vec2; 2]
manifold.normal() -> Vec2
*/
let gjk_response = poly.gjk(&circle).run();
/*
The result of the GJK algorithm:
gjk_response.distance() -> f32
gjk_response.closest_points() -> (Vec2, Vec2)
*/
}
Check out the library this builds on top of for additional documentation. Please note the section entitled NUMERIC ROBUSTNESS.
Modules§
Structs§
- AABB
- Rectangle with a min vector and a max vector
- Capsule
- A capsule with a line segment and a radius
- Circle
- A circle with a point and a radius
- GjkResponse
- The result of the GJK function
- GjkRunner
- A builder for running the GJK algorithm
- Manifold
- Contains the data necessary for collision resolution
- Poly
- A polygon with up to 8 sides
- Ray
- A Ray struct for casting a ray
- RayCast
- The result of the ray casting operations
- Rotation
- Rotation, an angle
- ToiRunner
- A builder for finding the time of impact for two shapes
- Transformation
- For transforming the position and rotation of polygons
- Vec2
- A 2d vector
Enums§
- Type
- The type of the shape