blast_stress_solver/rapier/
optimization.rs1use 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}