@@ -28,10 +28,25 @@ void remote_init(Remote *remote) {
2828void remote_reset (Remote * remote ) {
2929 remote -> setpoint = 0 ;
3030 remote -> ramped_step_size = 0 ;
31+
32+ smooth_target_reset (& remote -> smooth_target , 0.0f );
3133}
3234
3335void remote_configure (Remote * remote , const RefloatConfig * config ) {
3436 remote -> step_size = config -> inputtilt_speed / config -> hertz ;
37+
38+ // Hardcoded target filter for remote
39+ static const CfgTargetFilter remote_target_filter = {
40+ .alpha = 0.020 , .in_alpha_away = 0.050 , .in_alpha_back = 0.015
41+ };
42+
43+ smooth_target_configure (
44+ & remote -> smooth_target ,
45+ & remote_target_filter ,
46+ config -> inputtilt_speed ,
47+ config -> inputtilt_speed ,
48+ config -> hertz
49+ );
3550}
3651
3752void remote_input (Remote * remote , const RefloatConfig * config ) {
@@ -72,37 +87,13 @@ void remote_input(Remote *remote, const RefloatConfig *config) {
7287 remote -> input = value ;
7388}
7489
75- void remote_update (Remote * remote , const State * state , const RefloatConfig * config ) {
90+ void remote_update (Remote * remote , const State * state , const RefloatConfig * config , float dt ) {
7691 float target = remote -> input * config -> inputtilt_angle_limit ;
7792
7893 if (state -> darkride ) {
7994 target = - target ;
8095 }
8196
82- float target_diff = target - remote -> setpoint ;
83-
84- // Smoothen changes in tilt angle by ramping the step size
85- const float smoothing_factor = 0.02 ;
86-
87- // Within X degrees of Target Angle, start ramping down step size
88- if (fabsf (target_diff ) < 2.0f ) {
89- // Target step size is reduced the closer to center you are (needed for smoothly
90- // transitioning away from center)
91- remote -> ramped_step_size = smoothing_factor * remote -> step_size * target_diff / 2 +
92- (1 - smoothing_factor ) * remote -> ramped_step_size ;
93- // Linearly ramped down step size is provided as minimum to prevent overshoot
94- float centering_step_size =
95- fminf (fabsf (remote -> ramped_step_size ), fabsf (target_diff / 2 ) * remote -> step_size ) *
96- sign (target_diff );
97- if (fabsf (target_diff ) < fabsf (centering_step_size )) {
98- remote -> setpoint = target ;
99- } else {
100- remote -> setpoint += centering_step_size ;
101- }
102- } else {
103- // Ramp up step size until the configured tilt speed is reached
104- remote -> ramped_step_size = smoothing_factor * remote -> step_size * sign (target_diff ) +
105- (1 - smoothing_factor ) * remote -> ramped_step_size ;
106- remote -> setpoint += remote -> ramped_step_size ;
107- }
97+ smooth_target_update (& remote -> smooth_target , target );
98+ remote -> setpoint = remote -> smooth_target .value ;
10899}
0 commit comments