pub struct CollisionResponse {
pub restitution: f32,
pub friction: f32,
pub position_correction: f32,
pub slop: f32,
}Expand description
Collision response configuration for impulse resolution.
These settings control how collisions are resolved using impulse-based physics. Different collision types (bounce, slide, etc.) require different configurations.
§Examples
use goud_engine::ecs::collision::CollisionResponse;
// Bouncy ball (high restitution)
let bouncy = CollisionResponse::bouncy();
// Character controller (no bounce, high friction)
let character = CollisionResponse::character();
// Realistic physics (default)
let realistic = CollisionResponse::default();Fields§
§restitution: f32How much velocity is retained after collision (0.0 = no bounce, 1.0 = perfect bounce).
Typical values:
- 0.0-0.1: Non-bouncy (characters, boxes)
- 0.3-0.5: Moderately bouncy (rubber balls)
- 0.8-1.0: Very bouncy (super balls)
friction: f32Resistance to sliding (0.0 = ice, 1.0 = rubber on concrete).
Typical values:
- 0.0-0.1: Ice, very slippery
- 0.2-0.4: Wood on wood, metal on metal
- 0.6-0.8: Rubber on concrete
position_correction: f32Percentage of overlap to resolve (0.0-1.0).
Helps prevent objects from sinking into each other due to numerical errors.
- 0.0: No positional correction
- 0.2-0.8: Recommended range (0.4 is common)
- 1.0: Full correction (may cause jitter)
slop: f32Threshold below which positional correction is not applied.
Prevents over-correction for small penetrations. Typical value: 0.01 units
Implementations§
Source§impl CollisionResponse
impl CollisionResponse
Sourcepub fn new(
restitution: f32,
friction: f32,
position_correction: f32,
slop: f32,
) -> CollisionResponse
pub fn new( restitution: f32, friction: f32, position_correction: f32, slop: f32, ) -> CollisionResponse
Creates a new collision response configuration.
§Arguments
restitution- Bounciness (0.0 = no bounce, 1.0 = perfect bounce)friction- Sliding resistance (0.0 = ice, 1.0 = rubber)position_correction- Overlap correction percentage (0.0-1.0)slop- Minimum penetration for correction
§Example
use goud_engine::ecs::collision::CollisionResponse;
let response = CollisionResponse::new(0.5, 0.4, 0.4, 0.01);Sourcepub fn bouncy() -> CollisionResponse
pub fn bouncy() -> CollisionResponse
Creates a bouncy collision response (high restitution, low friction).
Good for: balls, projectiles, bouncing objects
§Example
use goud_engine::ecs::collision::CollisionResponse;
let bouncy = CollisionResponse::bouncy();
assert_eq!(bouncy.restitution, 0.8);Sourcepub fn character() -> CollisionResponse
pub fn character() -> CollisionResponse
Creates a character controller response (no bounce, high friction).
Good for: player characters, NPCs, walking entities
§Example
use goud_engine::ecs::collision::CollisionResponse;
let character = CollisionResponse::character();
assert_eq!(character.restitution, 0.0);
assert_eq!(character.friction, 0.8);Sourcepub fn slippery() -> CollisionResponse
pub fn slippery() -> CollisionResponse
Creates a slippery collision response (low friction, some bounce).
Good for: ice, smooth surfaces, low-friction materials
§Example
use goud_engine::ecs::collision::CollisionResponse;
let slippery = CollisionResponse::slippery();
assert!(slippery.friction < 0.2);Sourcepub fn elastic() -> CollisionResponse
pub fn elastic() -> CollisionResponse
Creates a perfectly elastic collision (no energy loss).
Good for: billiard balls, perfect bounce scenarios
§Example
use goud_engine::ecs::collision::CollisionResponse;
let elastic = CollisionResponse::elastic();
assert_eq!(elastic.restitution, 1.0);Trait Implementations§
Source§impl Clone for CollisionResponse
impl Clone for CollisionResponse
Source§fn clone(&self) -> CollisionResponse
fn clone(&self) -> CollisionResponse
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for CollisionResponse
impl Debug for CollisionResponse
Source§impl Default for CollisionResponse
impl Default for CollisionResponse
Source§fn default() -> CollisionResponse
fn default() -> CollisionResponse
Default collision response: moderate bounce and friction.
Source§impl PartialEq for CollisionResponse
impl PartialEq for CollisionResponse
impl Copy for CollisionResponse
impl StructuralPartialEq for CollisionResponse
Auto Trait Implementations§
impl Freeze for CollisionResponse
impl RefUnwindSafe for CollisionResponse
impl Send for CollisionResponse
impl Sync for CollisionResponse
impl Unpin for CollisionResponse
impl UnsafeUnpin for CollisionResponse
impl UnwindSafe for CollisionResponse
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian().