Etterna 0.74.4
Loading...
Searching...
No Matches
GenericBracketing.h
1#pragma once
2#include "../../PatternModHelpers.h"
3
7{
8 const CalcPatternMod _pmod = GBracketing;
9 // const std::vector<CalcPatternMod> _dbg = { HSS, HSJ };
10 const std::string name = "GenericBracketingMod";
11 const int min_tap_size = jump;
12
13#pragma region params
14
15 float min_mod = 0.6F;
16 float max_mod = 1.1F;
17 float mod_base = 0.4F;
18 float prop_buffer = 1.F;
19
20 float total_prop_min = min_mod;
21 float total_prop_max = max_mod;
22
23 // was ~32/7, is higher now to push up light hs (maybe overkill tho)
24 float total_prop_scaler = 5.571F;
25 float total_prop_base = 0.4F;
26
27 float split_hand_pool = 1.6F;
28 float split_hand_min = 0.89F;
29 float split_hand_max = 1.F;
30 float split_hand_scaler = 1.F;
31
32 float jack_pool = 1.35F;
33 float jack_min = 0.5F;
34 float jack_max = 1.F;
35 float jack_scaler = 1.F;
36
37 float decay_factor = 0.05F;
38
39 const std::vector<std::pair<std::string, float*>> _params{
40 { "min_mod", &min_mod },
41 { "max_mod", &max_mod },
42 { "mod_base", &mod_base },
43 { "prop_buffer", &prop_buffer },
44
45 { "total_prop_scaler", &total_prop_scaler },
46 { "total_prop_min", &total_prop_min },
47 { "total_prop_max", &total_prop_max },
48 { "total_prop_base", &total_prop_base },
49
50 { "decay_factor", &decay_factor },
51 };
52#pragma endregion params and param map
53
54 float total_prop = 0.F;
55 float jumptrill_prop = 0.F;
56 float jack_prop = 0.F;
57 float last_mod = min_mod;
58 float pmod = min_mod;
59 float t_taps = 0.F;
60 float bracket_taps = 0.F;
61
62 void full_reset()
63 {
64 last_mod = min_mod;
65 }
66
67 void decay_mod()
68 {
69 pmod = std::clamp(last_mod - decay_factor, min_mod, max_mod);
70 last_mod = pmod;
71 }
72
73 auto operator()(const metaItvGenericHandInfo& mitvghi) -> float
74 {
75 // empty interval, don't decay mod or update last_mod
76 if (mitvghi.total_taps == 0) {
77 return neutral;
78 }
79
80 // definitely no brackets, decay
81 if (mitvghi.taps_bracketing == 0) {
82 decay_mod();
83 return pmod;
84 }
85
86 t_taps = static_cast<float>(mitvghi.total_taps);
87 bracket_taps = static_cast<float>(mitvghi.taps_bracketing);
88
89 total_prop =
90 total_prop_base + ((bracket_taps + prop_buffer) /
91 (t_taps - prop_buffer) * total_prop_scaler);
92 total_prop =
93 std::clamp(fastsqrt(total_prop), total_prop_min, total_prop_max);
94
95 // limits
96 pmod = std::clamp(total_prop, min_mod, max_mod);
97
98 // for decay
99 last_mod = pmod;
100
101 return pmod;
102 }
103};
Definition GenericBracketing.h:7
Definition MetaIntervalGenericHandInfo.h:145