Support steering wheel
This commit is contained in:
parent
99313c0e45
commit
44bb7d0d46
|
@ -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,6 +1168,7 @@ 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?)
|
||||
|
@ -1352,15 +1319,11 @@ static void common_drive(const int index, tCarElt* car, tSituation *s)
|
|||
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;
|
||||
|
|
Loading…
Reference in New Issue