diff --git a/src/libs/robottools/rthumandriver.cpp b/src/libs/robottools/rthumandriver.cpp index 8b5542f2d..a61bed661 100644 --- a/src/libs/robottools/rthumandriver.cpp +++ b/src/libs/robottools/rthumandriver.cpp @@ -1029,28 +1029,11 @@ static void common_drive(const int index, tCarElt* car, tSituation *s) case GFCTRL_TYPE_JOY_AXIS: ax0 = joyInfo->ax[cmd[CMD_LEFTSTEER].val]; - // limit and normalise - if (ax0 > cmd[CMD_LEFTSTEER].max) { - ax0 = cmd[CMD_LEFTSTEER].max; - } else if (ax0 < cmd[CMD_LEFTSTEER].min) { - ax0 = cmd[CMD_LEFTSTEER].min; - } - ax0 = (ax0 - cmd[CMD_LEFTSTEER].min) / (cmd[CMD_LEFTSTEER].max - cmd[CMD_LEFTSTEER].min); - - // pow used to indicate the polarity of 'more turn' - if (cmd[CMD_LEFTSTEER].pow > 0) - ax0 = ax0 - cmd[CMD_LEFTSTEER].deadZone; - else - ax0 = 1 - ax0 - cmd[CMD_LEFTSTEER].deadZone; - - if (ax0 < 0) ax0 = 0; - - if (1 - cmd[CMD_LEFTSTEER].deadZone != 0) - ax0 = ax0 / (1 - cmd[CMD_LEFTSTEER].deadZone); - else + if (ax0 > 0.0f) { ax0 = 0; + } - leftSteer = fabs(cmd[CMD_LEFTSTEER].pow) * pow(ax0, 1.0f / cmd[CMD_LEFTSTEER].sens) / (1.0 + cmd[CMD_LEFTSTEER].spdSens * car->_speed_xy / 100.0); + leftSteer = -ax0; break; case GFCTRL_TYPE_MOUSE_AXIS: ax0 = mouseInfo->ax[cmd[CMD_LEFTSTEER].val] - cmd[CMD_LEFTSTEER].deadZone; @@ -1117,28 +1100,11 @@ static void common_drive(const int index, tCarElt* car, tSituation *s) case GFCTRL_TYPE_JOY_AXIS: ax0 = joyInfo->ax[cmd[CMD_RIGHTSTEER].val]; - // limit and normalise - if (ax0 > cmd[CMD_RIGHTSTEER].max) { - ax0 = cmd[CMD_RIGHTSTEER].max; - } else if (ax0 < cmd[CMD_RIGHTSTEER].min) { - ax0 = cmd[CMD_RIGHTSTEER].min; - } - ax0 = (ax0 - cmd[CMD_RIGHTSTEER].min) / (cmd[CMD_RIGHTSTEER].max - cmd[CMD_RIGHTSTEER].min); - - // pow used to indicate the polarity of 'more turn' - if (cmd[CMD_RIGHTSTEER].pow > 0) - ax0 = ax0 - cmd[CMD_RIGHTSTEER].deadZone; - else - ax0 = 1 - ax0 - cmd[CMD_RIGHTSTEER].deadZone; - - if (ax0 < 0) ax0 = 0; - - if (1 - cmd[CMD_RIGHTSTEER].deadZone != 0) - ax0 = ax0 / (1 - cmd[CMD_RIGHTSTEER].deadZone); - else + if (ax0 < 0.0f) { ax0 = 0; + } - rightSteer = -1 * fabs(cmd[CMD_RIGHTSTEER].pow) * pow(ax0, 1.0f / cmd[CMD_RIGHTSTEER].sens) / (1.0 + cmd[CMD_RIGHTSTEER].spdSens * car->_speed_xy / 100.0); + rightSteer = -ax0; break; case GFCTRL_TYPE_MOUSE_AXIS: ax0 = mouseInfo->ax[cmd[CMD_RIGHTSTEER].val] - cmd[CMD_RIGHTSTEER].deadZone; @@ -1202,7 +1168,8 @@ static void common_drive(const int index, tCarElt* car, tSituation *s) } car->_steerCmd = leftSteer + rightSteer; - + car->_steerCmd *= fabs(car->_steerCmd); + //send force feedback effect to the wheel //dont' even try to do it if steer command is on a keyboard because it somehow manage to crash (unable to identify the joystic to send FF to?) if(cmd[CMD_LEFTSTEER].type != GFCTRL_TYPE_KEYBOARD && cmd[CMD_LEFTSTEER].type != GFCTRL_TYPE_MOUSE_AXIS){ @@ -1347,20 +1314,16 @@ static void common_drive(const int index, tCarElt* car, tSituation *s) car->ctrl.setupChangeCmd = item; } } - - + + switch (cmd[CMD_BRAKE].type) { case GFCTRL_TYPE_JOY_AXIS: brake = joyInfo->ax[cmd[CMD_BRAKE].val]; - if (brake > cmd[CMD_BRAKE].max) { - brake = cmd[CMD_BRAKE].max; - } else if (brake < cmd[CMD_BRAKE].min) { - brake = cmd[CMD_BRAKE].min; - } - car->_brakeCmd = fabs(cmd[CMD_BRAKE].pow * - pow(fabs((brake - cmd[CMD_BRAKE].minVal) / - (cmd[CMD_BRAKE].max - cmd[CMD_BRAKE].min)), - 1.0f / cmd[CMD_BRAKE].sens)); + + brake += 1.0f; + brake /= 2.0f; + brake = 1.0f - brake; + car->_brakeCmd = brake; break; case GFCTRL_TYPE_MOUSE_AXIS: ax0 = mouseInfo->ax[cmd[CMD_BRAKE].val] - cmd[CMD_BRAKE].deadZone; @@ -1443,15 +1406,16 @@ static void common_drive(const int index, tCarElt* car, tSituation *s) switch (cmd[CMD_THROTTLE].type) { case GFCTRL_TYPE_JOY_AXIS: throttle = joyInfo->ax[cmd[CMD_THROTTLE].val]; + + throttle += 1.0f; + throttle /= 2.0f; + throttle = 1.0f - throttle; if (throttle > cmd[CMD_THROTTLE].max) { throttle = cmd[CMD_THROTTLE].max; } else if (throttle < cmd[CMD_THROTTLE].min) { throttle = cmd[CMD_THROTTLE].min; } - car->_accelCmd = fabs(cmd[CMD_THROTTLE].pow * - pow(fabs((throttle - cmd[CMD_THROTTLE].minVal) / - (cmd[CMD_THROTTLE].max - cmd[CMD_THROTTLE].min)), - 1.0f / cmd[CMD_THROTTLE].sens)); + car->_accelCmd = throttle; break; case GFCTRL_TYPE_MOUSE_AXIS: ax0 = mouseInfo->ax[cmd[CMD_THROTTLE].val] - cmd[CMD_THROTTLE].deadZone;