rapier3d/dynamics/
coefficient_combine_rule.rs1use crate::math::Real;
2
3#[derive(Default, Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
11#[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))]
12pub enum CoefficientCombineRule {
13 #[default]
15 Average = 0,
16 Min = 1,
18 Multiply = 2,
20 Max = 3,
22}
23
24impl CoefficientCombineRule {
25 pub(crate) fn combine(
26 coeff1: Real,
27 coeff2: Real,
28 rule_value1: CoefficientCombineRule,
29 rule_value2: CoefficientCombineRule,
30 ) -> Real {
31 let effective_rule = rule_value1.max(rule_value2);
32
33 match effective_rule {
34 CoefficientCombineRule::Average => (coeff1 + coeff2) / 2.0,
35 CoefficientCombineRule::Min => coeff1.min(coeff2),
36 CoefficientCombineRule::Multiply => coeff1 * coeff2,
37 CoefficientCombineRule::Max => coeff1.max(coeff2),
38 }
39 }
40}