1
0
mirror of https://github.com/tobspr/shapez.io.git synced 2025-12-09 16:21:51 +00:00

Split KEYCODES from KeyActionMapper

Move KEYCODES and related functions to a separate file. No further
refactoring is done yet.
This commit is contained in:
Даниїл Григор'єв 2025-07-21 16:55:28 +03:00
parent bcda036c73
commit 6366aa61dd
No known key found for this signature in database
GPG Key ID: B890DF16341D8C1D
5 changed files with 200 additions and 207 deletions

194
src/js/core/keycodes.ts Normal file
View File

@ -0,0 +1,194 @@
import { T } from "@/translations";
export function keyToKeyCode(key: string) {
return key.toUpperCase().charCodeAt(0);
}
export const KEYCODES = {
Tab: 9,
Enter: 13,
Shift: 16,
Ctrl: 17,
Alt: 18,
Escape: 27,
Space: 32,
ArrowLeft: 37,
ArrowUp: 38,
ArrowRight: 39,
ArrowDown: 40,
Delete: 46,
F1: 112,
F2: 113,
F3: 114,
F4: 115,
F5: 116,
F6: 117,
F7: 118,
F8: 119,
F9: 120,
F10: 121,
F11: 122,
F12: 123,
Plus: 187,
Minus: 189,
};
export const KEYCODE_LMB = 1;
export const KEYCODE_MMB = 2;
export const KEYCODE_RMB = 3;
export function getStringForKeyCode(code: number): string {
// @todo: Refactor into dictionary
switch (code) {
case KEYCODE_LMB:
return "LMB";
case KEYCODE_MMB:
return "MMB";
case KEYCODE_RMB:
return "RMB";
case 4:
return "MB4";
case 5:
return "MB5";
case 8:
return "⌫";
case KEYCODES.Tab:
return T.global.keys.tab;
case KEYCODES.Enter:
return "⏎";
case KEYCODES.Shift:
return "⇪";
case KEYCODES.Ctrl:
return T.global.keys.control;
case KEYCODES.Alt:
return T.global.keys.alt;
case 19:
return "PAUSE";
case 20:
return "CAPS";
case KEYCODES.Escape:
return T.global.keys.escape;
case KEYCODES.Space:
return T.global.keys.space;
case 33:
return "PGUP";
case 34:
return "PGDOWN";
case 35:
return "END";
case 36:
return "HOME";
case KEYCODES.ArrowLeft:
return "⬅";
case KEYCODES.ArrowUp:
return "⬆";
case KEYCODES.ArrowRight:
return "➡";
case KEYCODES.ArrowDown:
return "⬇";
case 44:
return "PRNT";
case 45:
return "INS";
case 46:
return "DEL";
case 93:
return "SEL";
case 96:
return "NUM 0";
case 97:
return "NUM 1";
case 98:
return "NUM 2";
case 99:
return "NUM 3";
case 100:
return "NUM 4";
case 101:
return "NUM 5";
case 102:
return "NUM 6";
case 103:
return "NUM 7";
case 104:
return "NUM 8";
case 105:
return "NUM 9";
case 106:
return "*";
case 107:
return "+";
case 109:
return "-";
case 110:
return ".";
case 111:
return "/";
case KEYCODES.F1:
return "F1";
case KEYCODES.F2:
return "F2";
case KEYCODES.F3:
return "F3";
case KEYCODES.F4:
return "F4";
case KEYCODES.F5:
return "F5";
case KEYCODES.F6:
return "F6";
case KEYCODES.F7:
return "F7";
case KEYCODES.F8:
return "F8";
case KEYCODES.F9:
return "F9";
case KEYCODES.F10:
return "F10";
case KEYCODES.F11:
return "F11";
case KEYCODES.F12:
return "F12";
case 144:
return "NUMLOCK";
case 145:
return "SCRLOCK";
case 182:
return "COMP";
case 183:
return "CALC";
case 186:
return ";";
case 187:
return "+";
case 188:
return ",";
case 189:
return "-";
case 190:
return ".";
case 191:
return "/";
case 192:
return "`";
case 219:
return "[";
case 220:
return "\\";
case 221:
return "]";
case 222:
return "'";
}
return (48 <= code && code <= 57) || (65 <= code && code <= 90)
? String.fromCharCode(code)
: "[" + code + "]";
}

View File

@ -1,11 +1,11 @@
import type { Application } from "../application";
import { getStringForKeyCode } from "../game/key_action_mapper";
import { SOUNDS } from "../platform/sound";
import { T } from "../translations";
import { ClickDetector, ClickDetectorConstructorArgs } from "./click_detector";
import { globalConfig } from "./config";
import { InputReceiver, KeydownEvent } from "./input_receiver";
import { getStringForKeyCode } from "./keycodes";
import { createLogger } from "./logging";
import { FormElement } from "./modal_dialog_forms";
import { Signal, STOP_PROPAGATION } from "./signal";

View File

@ -1,12 +1,7 @@
import { getStringForKeyCode, KEYCODE_LMB, KEYCODE_MMB, KEYCODE_RMB } from "@/core/keycodes";
import { makeDiv } from "../../../core/utils";
import { T } from "../../../translations";
import {
getStringForKeyCode,
KEYCODE_LMB,
KEYCODE_MMB,
KEYCODE_RMB,
KEYMAPPINGS,
} from "../../key_action_mapper";
import { KEYMAPPINGS } from "../../key_action_mapper";
import { enumHubGoalRewards } from "../../tutorial_goals";
import { BaseHUDPart } from "../base_hud_part";
import { DynamicDomAttach } from "../dynamic_dom_attach";

View File

@ -4,50 +4,11 @@ import { InputReceiver } from "../core/input_receiver";
import { GameRoot } from "./root";
/* typehints:end */
import { getStringForKeyCode, KEYCODES, keyToKeyCode } from "@/core/keycodes";
import { IS_MOBILE } from "../core/config";
import { Signal, STOP_PROPAGATION } from "../core/signal";
import { T } from "../translations";
export function keyToKeyCode(str) {
return str.toUpperCase().charCodeAt(0);
}
export const KEYCODES = {
Tab: 9,
Enter: 13,
Shift: 16,
Ctrl: 17,
Alt: 18,
Escape: 27,
Space: 32,
ArrowLeft: 37,
ArrowUp: 38,
ArrowRight: 39,
ArrowDown: 40,
Delete: 46,
F1: 112,
F2: 113,
F3: 114,
F4: 115,
F5: 116,
F6: 117,
F7: 118,
F8: 119,
F9: 120,
F10: 121,
F11: 122,
F12: 123,
Plus: 187,
Minus: 189,
};
export const KEYMAPPINGS = {
// Make sure mods come first so they can override everything
mods: {},
@ -163,164 +124,6 @@ for (const categoryId in KEYMAPPINGS) {
}
}
export const KEYCODE_LMB = 1;
export const KEYCODE_MMB = 2;
export const KEYCODE_RMB = 3;
/**
* Returns a keycode -> string
* @param {number} code
* @returns {string}
*/
export function getStringForKeyCode(code) {
// @todo: Refactor into dictionary
switch (code) {
case KEYCODE_LMB:
return "LMB";
case KEYCODE_MMB:
return "MMB";
case KEYCODE_RMB:
return "RMB";
case 4:
return "MB4";
case 5:
return "MB5";
case 8:
return "⌫";
case KEYCODES.Tab:
return T.global.keys.tab;
case KEYCODES.Enter:
return "⏎";
case KEYCODES.Shift:
return "⇪";
case KEYCODES.Ctrl:
return T.global.keys.control;
case KEYCODES.Alt:
return T.global.keys.alt;
case 19:
return "PAUSE";
case 20:
return "CAPS";
case KEYCODES.Escape:
return T.global.keys.escape;
case KEYCODES.Space:
return T.global.keys.space;
case 33:
return "PGUP";
case 34:
return "PGDOWN";
case 35:
return "END";
case 36:
return "HOME";
case KEYCODES.ArrowLeft:
return "⬅";
case KEYCODES.ArrowUp:
return "⬆";
case KEYCODES.ArrowRight:
return "➡";
case KEYCODES.ArrowDown:
return "⬇";
case 44:
return "PRNT";
case 45:
return "INS";
case 46:
return "DEL";
case 93:
return "SEL";
case 96:
return "NUM 0";
case 97:
return "NUM 1";
case 98:
return "NUM 2";
case 99:
return "NUM 3";
case 100:
return "NUM 4";
case 101:
return "NUM 5";
case 102:
return "NUM 6";
case 103:
return "NUM 7";
case 104:
return "NUM 8";
case 105:
return "NUM 9";
case 106:
return "*";
case 107:
return "+";
case 109:
return "-";
case 110:
return ".";
case 111:
return "/";
case KEYCODES.F1:
return "F1";
case KEYCODES.F2:
return "F2";
case KEYCODES.F3:
return "F3";
case KEYCODES.F4:
return "F4";
case KEYCODES.F5:
return "F5";
case KEYCODES.F6:
return "F6";
case KEYCODES.F7:
return "F7";
case KEYCODES.F8:
return "F8";
case KEYCODES.F9:
return "F9";
case KEYCODES.F10:
return "F10";
case KEYCODES.F11:
return "F11";
case KEYCODES.F12:
return "F12";
case 144:
return "NUMLOCK";
case 145:
return "SCRLOCK";
case 182:
return "COMP";
case 183:
return "CALC";
case 186:
return ";";
case 187:
return "+";
case 188:
return ",";
case 189:
return "-";
case 190:
return ".";
case 191:
return "/";
case 192:
return "`";
case 219:
return "[";
case 220:
return "\\";
case 221:
return "]";
case 222:
return "'";
}
return (48 <= code && code <= 57) || (65 <= code && code <= 90)
? String.fromCharCode(code)
: "[" + code + "]";
}
export class Keybinding {
/**
*

View File

@ -1,6 +1,7 @@
import { getStringForKeyCode } from "@/core/keycodes";
import { Dialog } from "../core/modal_dialog_elements";
import { TextualGameState } from "../core/textual_game_state";
import { getStringForKeyCode, KEYMAPPINGS } from "../game/key_action_mapper";
import { KEYMAPPINGS } from "../game/key_action_mapper";
import { SOUNDS } from "../platform/sound";
import { T } from "../translations";