[C++/DirectX] Update() 2 keer aanroepen voor button states?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • ikt
  • Registratie: Juli 2008
  • Laatst online: 22:16
Hoi Tweakers,

Dit wordt een beetje moeilijk om uit te leggen, maar hopelijk lukt het. Het probleem strekt zich over meerdere klassen.

Ik heb hier een mod voor GTA V waar ik met DirectInput een stuurwieltje in het spel probeer te krijgen. Dit gaat prima, maar bij het (her)-initialiseren van het apparaat krijg ik voor de POV-hat een keer 0 (nul) binnen als beginwaarde. Deze zou altijd -1 moeten geven wanneer er niks is ingedrukt en 0 wanneer de POV-hat omhoog wordt ingedrukt.

Een minder groot probleem is dat de stuurpositie ook op 0 wordt geïnitialiseerd, waardoor het stuur schokt bij het starten.

Het initialiseren van het apparaat doe ik zo:
https://github.com/E66666.../WheelDirectInput.cpp#L13

UpdateState();
code:
1
2
3
4
5
6
7
8
void WheelDirectInput::UpdateState() {
    djs.update();

    const DiJoyStick::Entry* e = djs.getEntry(0);
    if (e) {
        JoyState = e->joystate;
    }
}


update(); van DiJoyStick:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void update() const {
        for (int iEntry = 0; iEntry < nEntry; ++iEntry) {
            Entry& e = entry[iEntry];
            LPDIRECTINPUTDEVICE8 d = e.diDevice;

            if (FAILED(d->Poll())) {
                HRESULT hr = d->Acquire();
                while (hr == DIERR_INPUTLOST) {
                    hr = d->Acquire();
                }
            }
            else {
                d->GetDeviceState(sizeof(DIJOYSTATE2), &e.joystate);
            }
        }
}


Als ik de standaard waarde initialiseer op -1, wordt deze overschreven bij de eerste aanroep van Update(); - Dan wordt deze weer 0.

Als ik iets doe van (pseudocode)
code:
1
2
3
while (pov[0] != -1) {
    UpdateState();
}

Krijg ik nog steeds 0 binnen bij de eerstevolgende handleVehicleButtons();

Wat ik nu doe is simpelweg UpdateState(); twee keer aanroepen, waardoor de FFB zich gedraagt en de waarde nooit op 0 komt bij initialisatie. Dit vind ik er wel raar uit zien en ik denk niet dat dit standaard zo hoort.

Is het beter als ik dit anders oplos? Zo ja, hoe dan?
Het enige alternatief wat ik kan verzinnen is een vlaggetje plaatsen dat alle waarden zijn ingelezen, maar dan moet je weer achter een variabele gaan jagen overal...