diff --git a/include/mgba/core/interface.h b/include/mgba/core/interface.h index 597387753..033047cac 100644 --- a/include/mgba/core/interface.h +++ b/include/mgba/core/interface.h @@ -133,6 +133,7 @@ struct mRumbleIntegrator { }; void mRumbleIntegratorInit(struct mRumbleIntegrator*); +void mRumbleIntegratorReset(struct mRumbleIntegrator*); struct mCoreChannelInfo { size_t id; diff --git a/src/core/interface.c b/src/core/interface.c index 10d3433ab..5771d80e1 100644 --- a/src/core/interface.c +++ b/src/core/interface.c @@ -110,14 +110,14 @@ void mRTCGenericSourceInit(struct mRTCGenericSource* rtc, struct mCore* core) { rtc->d.deserialize = _rtcGenericDeserialize; } -static void mRumbleIntegratorReset(struct mRumble* rumble, bool enable) { +static void _mRumbleIntegratorReset(struct mRumble* rumble, bool enable) { struct mRumbleIntegrator* integrator = (struct mRumbleIntegrator*) rumble; integrator->state = enable; integrator->timeOn = 0; integrator->totalTime = 0; } -static void mRumbleIntegratorSetRumble(struct mRumble* rumble, bool enable, uint32_t sinceLast) { +static void _mRumbleIntegratorSetRumble(struct mRumble* rumble, bool enable, uint32_t sinceLast) { struct mRumbleIntegrator* integrator = (struct mRumbleIntegrator*) rumble; if (integrator->state) { @@ -127,7 +127,7 @@ static void mRumbleIntegratorSetRumble(struct mRumble* rumble, bool enable, uint integrator->state = enable; } -static void mRumbleIntegratorIntegrate(struct mRumble* rumble, uint32_t period) { +static void _mRumbleIntegratorIntegrate(struct mRumble* rumble, uint32_t period) { if (!period) { return; } @@ -144,7 +144,11 @@ static void mRumbleIntegratorIntegrate(struct mRumble* rumble, uint32_t period) void mRumbleIntegratorInit(struct mRumbleIntegrator* integrator) { memset(integrator, 0, sizeof(*integrator)); - integrator->d.reset = mRumbleIntegratorReset; - integrator->d.setRumble = mRumbleIntegratorSetRumble; - integrator->d.integrate = mRumbleIntegratorIntegrate; + integrator->d.reset = _mRumbleIntegratorReset; + integrator->d.setRumble = _mRumbleIntegratorSetRumble; + integrator->d.integrate = _mRumbleIntegratorIntegrate; +} + +void mRumbleIntegratorReset(struct mRumbleIntegrator* integrator) { + _mRumbleIntegratorReset(&integrator->d, false); } diff --git a/src/platform/libretro/libretro.c b/src/platform/libretro/libretro.c index 232c4e6eb..d2a871546 100644 --- a/src/platform/libretro/libretro.c +++ b/src/platform/libretro/libretro.c @@ -834,7 +834,7 @@ static void _setupMaps(struct mCore* core) { void retro_reset(void) { core->reset(core); - mRumbleIntegratorInit(&rumble); + mRumbleIntegratorReset(&rumble); _setupMaps(core); } diff --git a/src/platform/switch/main.c b/src/platform/switch/main.c index 1f61cc279..6cd7bc3b8 100644 --- a/src/platform/switch/main.c +++ b/src/platform/switch/main.c @@ -296,7 +296,7 @@ static void _setup(struct mGUIRunner* runner) { } _updateRenderer(runner, fakeBool); - mRumbleIntegratorInit(&rumble.d); + mRumbleIntegratorReset(&rumble.d); runner->core->setPeripheral(runner->core, mPERIPH_RUMBLE, &rumble.d.d); runner->core->setPeripheral(runner->core, mPERIPH_ROTATION, &rotation); runner->core->setAVStream(runner->core, &stream); @@ -363,13 +363,10 @@ static void _gameLoaded(struct mGUIRunner* runner) { runner->core->reloadConfigOption(runner->core, "videoScale", &runner->config); } } - - mRumbleIntegratorInit(&rumble.d); } static void _gameUnloaded(struct mGUIRunner* runner) { UNUSED(runner); - mRumbleIntegratorInit(&rumble.d); HidVibrationValue values[4]; memcpy(&values[0], &vibrationStop, sizeof(rumble.value)); memcpy(&values[1], &vibrationStop, sizeof(rumble.value)); @@ -812,6 +809,7 @@ static void hidSetup(void) { padConfigureInput(1, HidNpadStyleSet_NpadStandard); padInitializeDefault(&pad); + mRumbleIntegratorInit(&rumble.d); rumble.d.setRumble = _setRumble; rumble.value.freq_low = 120.0; rumble.value.freq_high = 180.0;