Only set settings when the game loads

This commit is contained in:
Gwilym Inzani 2023-04-25 21:53:51 +01:00 committed by Corwin
parent 845a4b9244
commit a1c1671b0b
No known key found for this signature in database

View file

@ -24,6 +24,7 @@ export const Mgba: FC<MgbaProps> = ({ gameUrl, volume, controls, paused }) => {
const mgbaModule = useRef<Module>({}); const mgbaModule = useRef<Module>({});
const [state, setState] = useState(MgbaState.Uninitialised); const [state, setState] = useState(MgbaState.Uninitialised);
const [gameLoaded, setGameLoaded] = useState(false);
useEffect(() => { useEffect(() => {
if (state !== MgbaState.Initialised) return; if (state !== MgbaState.Initialised) return;
@ -34,6 +35,7 @@ export const Mgba: FC<MgbaProps> = ({ gameUrl, volume, controls, paused }) => {
const gamePath = `${MGBA_ROM_DIRECTORY}/${gameUrl}`; const gamePath = `${MGBA_ROM_DIRECTORY}/${gameUrl}`;
mgbaModule.current.FS.writeFile(gamePath, new Uint8Array(gameData)); mgbaModule.current.FS.writeFile(gamePath, new Uint8Array(gameData));
mgbaModule.current.loadGame(gamePath); mgbaModule.current.loadGame(gamePath);
setGameLoaded(true);
})(); })();
}, [state, gameUrl]); }, [state, gameUrl]);
@ -67,12 +69,12 @@ export const Mgba: FC<MgbaProps> = ({ gameUrl, volume, controls, paused }) => {
try { try {
mgbaModule.current.quitGame(); mgbaModule.current.quitGame();
mgbaModule.current.quitMgba(); mgbaModule.current.quitMgba();
} catch {} } catch { }
}; };
}, [state]); }, [state]);
useEffect(() => { useEffect(() => {
if (state !== MgbaState.Initialised) return; if (!gameLoaded) return;
const controlEntries = Object.entries(controls); const controlEntries = Object.entries(controls);
@ -86,22 +88,22 @@ export const Mgba: FC<MgbaProps> = ({ gameUrl, volume, controls, paused }) => {
mgbaModule.current.bindKey(binding, key); mgbaModule.current.bindKey(binding, key);
} }
}, [controls, state]); }, [controls, gameLoaded]);
useEffect(() => { useEffect(() => {
if (state !== MgbaState.Initialised) return; if (!gameLoaded) return;
mgbaModule.current.setVolume(volume ?? 1.0); mgbaModule.current.setVolume(volume ?? 1.0);
}, [state, volume]); }, [gameLoaded, volume]);
useEffect(() => { useEffect(() => {
if (state !== MgbaState.Initialised) return; if (!gameLoaded) return;
if (paused) { if (paused) {
mgbaModule.current.pauseGame(); mgbaModule.current.pauseGame();
} else { } else {
mgbaModule.current.resumeGame(); mgbaModule.current.resumeGame();
} }
}, [state, paused]); }, [gameLoaded, paused]);
return ( return (
<> <>