Skip to content

Commit 5cb8361

Browse files
authored
Make pause key actually pause (#431)
* make pause key actually pause
1 parent d4efbef commit 5cb8361

2 files changed

Lines changed: 20 additions & 8 deletions

File tree

src/window/dos/controls/keyboard.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
import { CommandInterface } from "emulators";
2-
import { domToKeyCode } from "./keys";
2+
// eslint-disable-next-line camelcase
3+
import { domToKeyCode, KBD_pause } from "./keys";
34
import { Dispatch } from "@reduxjs/toolkit";
45
import { sendQuickLoadEvent, sendQuickSaveEvent } from "../../../player-api";
56
import { uiSlice } from "../../../store/ui";
6-
export function keyboard(el: HTMLElement, ci: CommandInterface, handleQuickSaves: boolean, dispatch: Dispatch) {
7+
import { dosSlice } from "../../../store/dos";
8+
9+
export function keyboard(el: HTMLElement,
10+
ci: CommandInterface,
11+
handleQuickSaves: boolean,
12+
dispatch: Dispatch,
13+
paused: boolean) {
714
const pressedKeys = new Set<number>();
815

916
function releaseKeys() {
@@ -30,10 +37,14 @@ export function keyboard(el: HTMLElement, ci: CommandInterface, handleQuickSaves
3037
}
3138

3239
const keyCode = domToKeyCode(e.keyCode, e.location);
33-
ci.sendKeyEvent(keyCode, true);
34-
pressedKeys.add(keyCode);
35-
e.stopPropagation();
36-
e.preventDefault();
40+
if (keyCode === KBD_pause) { // eslint-disable-line camelcase
41+
dispatch(dosSlice.actions.paused(!paused));
42+
} else {
43+
ci.sendKeyEvent(keyCode, true);
44+
pressedKeys.add(keyCode);
45+
e.stopPropagation();
46+
e.preventDefault();
47+
}
3748
}
3849

3950
function onKeyUp(e: KeyboardEvent) {

src/window/dos/dos-runtime.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,10 @@ function useMouse(canvas: HTMLCanvasElement,
156156
function useKeyboard(ci: CommandInterface): void {
157157
const dispatch = useDispatch();
158158
const dosboxX = useSelector((state: State) => state.dos.backend) === "dosboxX";
159+
const paused = useSelector((state: State) => state.dos.paused);
159160
useEffect(() => {
160-
return keyboard(window as any, ci, dosboxX, dispatch);
161-
}, [ci, dosboxX, dispatch]);
161+
return keyboard(window as any, ci, dosboxX, dispatch, paused);
162+
}, [ci, dosboxX, dispatch, paused]);
162163
}
163164

164165
function useRenderBackend(canvas: HTMLCanvasElement,

0 commit comments

Comments
 (0)