use crate::BodyHandle;
use std::fmt;
#[derive(Debug, Clone, PartialEq)]
#[non_exhaustive]
pub enum GizmoError {
CollisionOverflow { count: usize, limit: usize },
NaNVelocity(BodyHandle),
NaNPosition(BodyHandle),
InvalidConstraint(String),
DivideByZero(BodyHandle),
TunnelingDetected(BodyHandle),
BvhBuildFailed,
JointEntityNotFound(BodyHandle),
InvalidShapeData(String),
SleepStateCorrupted(BodyHandle),
}
impl fmt::Display for GizmoError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
GizmoError::CollisionOverflow { count, limit } => write!(
f,
"Too many collisions detected (count: {}, limit: {})",
count, limit
),
GizmoError::NaNVelocity(ent) => {
write!(f, "NaN velocity detected for entity: {:?}", ent)
}
GizmoError::NaNPosition(ent) => {
write!(f, "NaN position detected for entity: {:?}", ent)
}
GizmoError::InvalidConstraint(msg) => write!(f, "Invalid constraint: {}", msg),
GizmoError::DivideByZero(ent) => {
write!(f, "Divide by zero encountered for entity: {:?}", ent)
}
GizmoError::TunnelingDetected(ent) => {
write!(f, "Tunneling detected for entity: {:?}", ent)
}
GizmoError::BvhBuildFailed => write!(f, "BVH build failed"),
GizmoError::JointEntityNotFound(ent) => {
write!(f, "Joint entity not found in entity_index_map: {:?}", ent)
}
GizmoError::InvalidShapeData(msg) => {
write!(f, "Invalid shape data (degenerate shape): {}", msg)
}
GizmoError::SleepStateCorrupted(ent) => {
write!(f, "Sleep/wake state corrupted for entity: {:?}", ent)
}
}
}
}
impl std::error::Error for GizmoError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
None
}
}