diff --git a/src/drivers/human/human.cpp b/src/drivers/human/human.cpp index 86b3df1a7..ffd877123 100644 --- a/src/drivers/human/human.cpp +++ b/src/drivers/human/human.cpp @@ -603,8 +603,28 @@ newrace(int index, tCarElt* car, tSituation *s) void resumerace(int index, tCarElt* car, tSituation *s) { + const int idx = index - 1; + tControlCmd *cmd = HCtx[idx]->cmdControl; + // re-read the controls as they may have changed HmReadPrefs(index); + + // Setup Keyboard map (key code => index of the associated command in keyInfo / lastReadKeyState). + keyIndex = 0; + mapKeys.clear(); + + for (int i = 0; i < NbCmdControl; i++) + { + if (cmd[i].type == GFCTRL_TYPE_KEYBOARD) + { + if (mapKeys.find(cmd[i].val) == mapKeys.end()) + { + mapKeys[cmd[i].val] = keyIndex; + keyIndex++; + } + }//KEYBOARD + + }//for i } static int diff --git a/src/modules/userinterface/legacymenu/confscreens/controlconfig.cpp b/src/modules/userinterface/legacymenu/confscreens/controlconfig.cpp index cd5b1f8de..53cdb5c93 100644 --- a/src/modules/userinterface/legacymenu/confscreens/controlconfig.cpp +++ b/src/modules/userinterface/legacymenu/confscreens/controlconfig.cpp @@ -610,10 +610,17 @@ ControlMenuInit(void *prevMenu, void *prefHdle, unsigned index, tGearChangeMode { int i; + /* Don't recreate screen if already done */ + if (ScrHandle) { + if (PrevScrHandle != prevMenu) + // Need to re-create screen as parent has changed + GfuiScreenRelease(ScrHandle); + else + return ScrHandle; + } + ReloadValues = 1; - PrevScrHandle = prevMenu; - PrefHdle = prefHdle; SaveOnExit = saveOnExit; @@ -623,11 +630,6 @@ ControlMenuInit(void *prevMenu, void *prefHdle, unsigned index, tGearChangeMode /* Set specified gear changing mode for current player */ GearChangeMode = gearChangeMode; - /* Don't recreate screen if already done */ - if (ScrHandle) { - return ScrHandle; - } - /* Initialize joysticks array */ for (int jsInd = 0; jsInd < GFCTRL_JOY_NUMBER; jsInd++) Joystick[jsInd] = 0;