Skip to main content

blast_stress_solver/rapier/
optimization.rs

1use rapier3d::prelude::RigidBodyHandle;
2
3#[derive(Clone, Copy, Debug, PartialEq, Eq)]
4pub enum OptimizationMode {
5    Off,
6    Always,
7    AfterGroundCollision,
8}
9
10impl Default for OptimizationMode {
11    fn default() -> Self {
12        Self::Off
13    }
14}
15
16#[derive(Clone, Copy, Debug)]
17pub struct SmallBodyDampingOptions {
18    pub mode: OptimizationMode,
19    pub collider_count_threshold: usize,
20    pub min_linear_damping: f32,
21    pub min_angular_damping: f32,
22}
23
24impl Default for SmallBodyDampingOptions {
25    fn default() -> Self {
26        Self {
27            mode: OptimizationMode::Off,
28            collider_count_threshold: 3,
29            min_linear_damping: 2.0,
30            min_angular_damping: 2.0,
31        }
32    }
33}
34
35#[derive(Clone, Copy, Debug)]
36pub struct DebrisCleanupOptions {
37    pub mode: OptimizationMode,
38    pub debris_ttl_secs: f32,
39    pub max_colliders_for_debris: usize,
40}
41
42impl Default for DebrisCleanupOptions {
43    fn default() -> Self {
44        Self {
45            mode: OptimizationMode::Off,
46            debris_ttl_secs: 10.0,
47            max_colliders_for_debris: 2,
48        }
49    }
50}
51
52#[derive(Clone, Copy, Debug)]
53pub struct SleepThresholdOptions {
54    pub mode: OptimizationMode,
55    pub linear_threshold: f32,
56    pub angular_threshold: f32,
57}
58
59impl Default for SleepThresholdOptions {
60    fn default() -> Self {
61        Self {
62            mode: OptimizationMode::Off,
63            linear_threshold: 0.1,
64            angular_threshold: 0.1,
65        }
66    }
67}
68
69#[derive(Clone, Debug, Default)]
70pub struct OptimizationResult {
71    pub damped_bodies: Vec<RigidBodyHandle>,
72    pub sleep_tuned_bodies: Vec<RigidBodyHandle>,
73    pub removed_bodies: Vec<RigidBodyHandle>,
74    pub removed_nodes: Vec<u32>,
75}