Input & Input Manipulation Functions - Singhzing-kid1/Buff-Ducks GitHub Wiki
deadzone
int32_t deadzone(controller_analog_e_t valueY, controller_analog_e_t valueX){
if ((master.get_analog(valueY) >= drivers[driverIndex].deadZoneLimit || master.get_analog(valueY) <= -drivers[driverIndex].deadZoneLimit) && master.get_analog(valueX) == 0){
return master.get_analog(valueY);
} else if ((master.get_analog(valueY) >= drivers[driverIndex].deadZoneLimit || master.get_analog(valueY) <= -drivers[driverIndex].deadZoneLimit) && master.get_analog(valueX) != 0){
if(master.get_analog(valueY) < 0){
if(-hypot((double)master.get_analog(valueX), (double)master.get_analog(valueY)) <= -drivers[driverIndex].deadZoneLimit){
return (int32_t)-hypot((double)master.get_analog(valueX), (double)master.get_analog(valueY));
}
} else if(master.get_analog(valueY) > 0){
if(hypot((double)master.get_analog(valueX), (double)master.get_analog(valueY)) >= drivers[driverIndex].deadZoneLimit){
return (int32_t)hypot((double)master.get_analog(valueX), (double)master.get_analog(valueY));
}
}
} else{
return (int32_t)0;
}
}
Simply put this takes the x and y axes from one of the analog sticks using the Pythagorean theorem to find out whether or not the analog stick is within a circular dead-zone of a radius set in config.cpp. If it is within this dead-zone it returns zero, and if it is outside the dead-zone it returns the hypotenuse of the triangle created from the x and y values of the joystick.
clamp
int32_t clamp(int32_t analogValue){
if(abs(analogValue) >= drivers[driverIndex].clampLimit){
if(analogValue < 0){
return (int32_t)-drivers[driverIndex].clampLimit;
} else if(analogValue > 0){
return (int32_t)drivers[driverIndex].clampLimit;
}
} else{
return analogValue;
}
}
Checks if the input value is greater than a value set in config.cpp and if so it returns that value. Works for both negative and positive inputs.