oxihuman_morph/
masseter_morph.rs1#![allow(dead_code)]
4
5pub struct MasseterMorph {
6 pub hypertrophy: f32,
7 pub width: f32,
8 pub length: f32,
9}
10
11pub fn new_masseter_morph() -> MasseterMorph {
12 MasseterMorph {
13 hypertrophy: 0.0,
14 width: 0.5,
15 length: 0.5,
16 }
17}
18
19pub fn masseter_set_hypertrophy(m: &mut MasseterMorph, v: f32) {
20 m.hypertrophy = v.clamp(0.0, 1.0);
21}
22
23pub fn masseter_is_hypertrophied(m: &MasseterMorph) -> bool {
24 m.hypertrophy > 0.6
25}
26
27pub fn masseter_overall_weight(m: &MasseterMorph) -> f32 {
28 (m.hypertrophy + m.width) * 0.5
29}
30
31pub fn masseter_blend(a: &MasseterMorph, b: &MasseterMorph, t: f32) -> MasseterMorph {
32 let t = t.clamp(0.0, 1.0);
33 MasseterMorph {
34 hypertrophy: a.hypertrophy + (b.hypertrophy - a.hypertrophy) * t,
35 width: a.width + (b.width - a.width) * t,
36 length: a.length + (b.length - a.length) * t,
37 }
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43
44 #[test]
45 fn test_new_masseter_morph() {
46 let m = new_masseter_morph();
48 assert!((m.hypertrophy - 0.0).abs() < 1e-6);
49 }
50
51 #[test]
52 fn test_masseter_set_hypertrophy() {
53 let mut m = new_masseter_morph();
55 masseter_set_hypertrophy(&mut m, 0.7);
56 assert!((m.hypertrophy - 0.7).abs() < 1e-6);
57 }
58
59 #[test]
60 fn test_masseter_is_hypertrophied_true() {
61 let mut m = new_masseter_morph();
63 masseter_set_hypertrophy(&mut m, 0.9);
64 assert!(masseter_is_hypertrophied(&m));
65 }
66
67 #[test]
68 fn test_masseter_is_hypertrophied_false() {
69 let m = new_masseter_morph();
71 assert!(!masseter_is_hypertrophied(&m));
72 }
73
74 #[test]
75 fn test_masseter_blend() {
76 let a = new_masseter_morph();
78 let mut b = new_masseter_morph();
79 b.hypertrophy = 1.0;
80 let mid = masseter_blend(&a, &b, 0.5);
81 assert!((mid.hypertrophy - 0.5).abs() < 1e-6);
82 }
83}