pub struct CollisionConfig {
pub up: Vec2,
pub skin: f32,
pub snap_distance: f32,
pub normal_threshold: f32,
pub block_epsilon: f32,
}Expand description
The game’s collision tunables, all in the caller’s world units.
There is deliberately no Default: skin and snap_distance are lengths
in the game’s own units and up is the game’s axis convention, so a default
would silently bake one game’s world into every other.
Fields§
§up: Vec2Unit vector naming the world’s up axis. Vec2::Y for a y-up world,
Vec2::NEG_Y for a y-down one. Every floor, ceiling, one-way, and
ground-snap decision is made against this axis and nothing else.
skin: f32Gap left between the body and a surface after a contact resolves, so the next frame’s sweep starts clear of the surface instead of touching it. Small relative to the body.
snap_distance: f32How far snap_to_ground probes along -up.
normal_threshold: f32normal · up above which a face counts as a floor, and below whose
negation it counts as a ceiling. 0.7 is roughly 45 degrees.
block_epsilon: f32Tolerance when comparing requested against achieved motion along up
for the blocked flags. Must be well under skin, or a resolved contact
reads as unblocked.
Implementations§
Source§impl CollisionConfig
impl CollisionConfig
Sourcepub fn new(
up: Vec2,
skin: f32,
snap_distance: f32,
normal_threshold: f32,
block_epsilon: f32,
) -> Self
pub fn new( up: Vec2, skin: f32, snap_distance: f32, normal_threshold: f32, block_epsilon: f32, ) -> Self
Builds a config, normalizing up.
§Panics
If up is not a usable direction, or normal_threshold is outside
(0, 1) — outside that range every face classifies the same way and
floors, ceilings, and walls stop being distinguishable. Both are
authoring errors.
Sourcepub fn is_floor(&self, normal: Vec2) -> bool
pub fn is_floor(&self, normal: Vec2) -> bool
Whether normal belongs to a face the body can stand on.
Sourcepub fn is_ceiling(&self, normal: Vec2) -> bool
pub fn is_ceiling(&self, normal: Vec2) -> bool
Whether normal belongs to a face the body can bump its head on.