415_wheel_miscalibration
Abused the pow variable to indicate the polarity of the turn direction so that the deadzone can be correctly applied. The joystick stuff now passes 0-1 to either left/right turn, which is the scaled according to the Pow and Speed sensitivity. There the scaling is the same regardless of configure/range/deadzone. Might be worth doing the same for the mouse. git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@3742 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: 2b5844a16c2160852f53ccdba4e6a58f25c69747 Former-commit-id: 05fff01eaa715c0e187e6f45e191f65de66e6181
This commit is contained in:
parent
3c26f3b749
commit
2878658251
3 changed files with 56 additions and 10 deletions
|
@ -652,13 +652,30 @@ common_drive(const int index, tCarElt* car, tSituation *s)
|
|||
|
||||
switch (cmd[CMD_LEFTSTEER].type) {
|
||||
case GFCTRL_TYPE_JOY_AXIS:
|
||||
ax0 = joyInfo->ax[cmd[CMD_LEFTSTEER].val] + cmd[CMD_LEFTSTEER].deadZone;
|
||||
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;
|
||||
}
|
||||
leftSteer = -SIGN(ax0) * cmd[CMD_LEFTSTEER].pow * pow(fabs(ax0), 1.0f / cmd[CMD_LEFTSTEER].sens) / (1.0 + cmd[CMD_LEFTSTEER].spdSens * car->_speed_x / 100.0);
|
||||
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
|
||||
ax0 = 0;
|
||||
|
||||
leftSteer = fabs(cmd[CMD_LEFTSTEER].pow) * pow(ax0, 1.0f / cmd[CMD_LEFTSTEER].sens) / (1.0 + cmd[CMD_LEFTSTEER].spdSens * car->_speed_x / 100.0);
|
||||
break;
|
||||
case GFCTRL_TYPE_MOUSE_AXIS:
|
||||
ax0 = mouseInfo->ax[cmd[CMD_LEFTSTEER].val] - cmd[CMD_LEFTSTEER].deadZone;
|
||||
|
@ -723,13 +740,30 @@ common_drive(const int index, tCarElt* car, tSituation *s)
|
|||
|
||||
switch (cmd[CMD_RIGHTSTEER].type) {
|
||||
case GFCTRL_TYPE_JOY_AXIS:
|
||||
ax0 = joyInfo->ax[cmd[CMD_RIGHTSTEER].val] - cmd[CMD_RIGHTSTEER].deadZone;
|
||||
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;
|
||||
}
|
||||
rightSteer = -SIGN(ax0) * cmd[CMD_RIGHTSTEER].pow * pow(fabs(ax0), 1.0f / cmd[CMD_RIGHTSTEER].sens) / (1.0 + cmd[CMD_RIGHTSTEER].spdSens * car->_speed_x / 100.0);
|
||||
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
|
||||
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_x / 100.0);
|
||||
break;
|
||||
case GFCTRL_TYPE_MOUSE_AXIS:
|
||||
ax0 = mouseInfo->ax[cmd[CMD_RIGHTSTEER].val] - cmd[CMD_RIGHTSTEER].deadZone;
|
||||
|
|
|
@ -192,7 +192,7 @@ HmReadPrefs(const int index)
|
|||
if (cmdCtrl[cmd].min > cmdCtrl[cmd].max)
|
||||
std::swap(cmdCtrl[cmd].min, cmdCtrl[cmd].max);
|
||||
|
||||
cmdCtrl[cmd].deadZone = (cmdCtrl[cmd].max - cmdCtrl[cmd].min) * cmdCtrl[cmd].deadZone;
|
||||
//cmdCtrl[cmd].deadZone = (cmdCtrl[cmd].max - cmdCtrl[cmd].min) * cmdCtrl[cmd].deadZone;
|
||||
|
||||
if (cmdCtrl[cmd].type == GFCTRL_TYPE_MOUSE_AXIS)
|
||||
HCtx[idx]->mouseControlUsed = 1;
|
||||
|
|
|
@ -128,9 +128,15 @@ JoyCalAutomaton(void)
|
|||
break;
|
||||
case 1:
|
||||
axis = Cmd[CalState + CmdOffset].ref.index;
|
||||
Cmd[CalState + CmdOffset].min = JoyAxis[axis];
|
||||
Cmd[CalState + CmdOffset].max = JoyAxisCenter[axis];
|
||||
Cmd[CalState + CmdOffset].pow = 1.0;
|
||||
Cmd[CalState + CmdOffset].min = JoyAxisCenter[axis];
|
||||
Cmd[CalState + CmdOffset].max = JoyAxis[axis];
|
||||
|
||||
// record the polarity of the turn action
|
||||
if (Cmd[CalState + CmdOffset].max >= Cmd[CalState + CmdOffset].min)
|
||||
Cmd[CalState + CmdOffset].pow = 1.0;
|
||||
else
|
||||
Cmd[CalState + CmdOffset].pow = -1.0;
|
||||
|
||||
sprintf(buf, "%.2f", JoyAxis[axis]);
|
||||
GfuiLabelSetText(ScrHandle, LabMinId[0], buf);
|
||||
advanceStep();
|
||||
|
@ -139,7 +145,13 @@ JoyCalAutomaton(void)
|
|||
axis = Cmd[CalState + CmdOffset].ref.index;
|
||||
Cmd[CalState + CmdOffset].min = JoyAxisCenter[axis];
|
||||
Cmd[CalState + CmdOffset].max = JoyAxis[axis];
|
||||
Cmd[CalState + CmdOffset].pow = 1.0;
|
||||
|
||||
// record the polarity of the turn action
|
||||
if (Cmd[CalState + CmdOffset].max >= Cmd[CalState + CmdOffset].min)
|
||||
Cmd[CalState + CmdOffset].pow = 1.0;
|
||||
else
|
||||
Cmd[CalState + CmdOffset].pow = -1.0;
|
||||
|
||||
sprintf(buf, "%.2f", JoyAxis[axis]);
|
||||
GfuiLabelSetText(ScrHandle, LabMaxId[0], buf);
|
||||
advanceStep();
|
||||
|
@ -149,7 +161,7 @@ JoyCalAutomaton(void)
|
|||
case 5:
|
||||
axis = Cmd[CalState + CmdOffset].ref.index;
|
||||
Cmd[CalState + CmdOffset].min = JoyAxisCenter[axis];
|
||||
Cmd[CalState + CmdOffset].max = JoyAxis[axis]*1.1;
|
||||
Cmd[CalState + CmdOffset].max = JoyAxis[axis];
|
||||
Cmd[CalState + CmdOffset].pow = 1.2;
|
||||
sprintf(buf, "%.2f", JoyAxisCenter[axis]);
|
||||
GfuiLabelSetText(ScrHandle, LabMinId[CalState - 2], buf);
|
||||
|
|
Loading…
Reference in a new issue