/
RaskolnickOFF
/
3D
Обзор
Документация
Войти
/
RaskolnickOFF
/
3D
Код
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
js/source/systems/inputs/InputSystem.js
96 строк
3 KB
RaskolnickOFF
fixes
19 июн 2026, 19:05
19 июн 2026, 19:05
84fe909
Код
Авторство
О чём код?
// js/source/systems/inputs/InputSystem.js import LIB from 'LIB'; import { GameEvents } from '../../core/GameEvents.js'; import { runAllTests } from '../../../tests/runTests.js'; //need upgrade export class InputSystem { constructor(eventBus) { this.eventBus = eventBus; this.keys = {}; this.editMode = false; this.mouseX = 0; this.mouseY = 0; this._keyMap = { 'w': 'w', 'ц': 'w', 'a': 'a', 'ф': 'a', 's': 's', 'ы': 's', 'd': 'd', 'в': 'd', 'e': 'e', 'у': 'e', 'b': 'b', 'и': 'b', 'z': 'z', 'я': 'z', 'x': 'x', 'ч': 'x', 'c': 'c', 'с': 'c', 'v': 'v', 'м': 'v', 'm': 'm', 'ь': 'm', 'shift': 'shift', ' ': 'space', 'f2': 'f2', }; this._onKeyDown = (e) => { const key = this._keyMap[e.key.toLowerCase()] || e.key.toLowerCase(); this.keys[key] = true; if (key === 'b') { this.editMode = !this.editMode; this.eventBus?.emit(GameEvents.EDIT_MODE_TOGGLED, { editMode: this.editMode }); } if (key === 'v') { this.eventBus?.emit(GameEvents.CAMERA_TOGGLE_FREE); } if (key === 'f2') { runAllTests(LIB.log); } if (key === 'm') { if (this.eventBus) { this.eventBus.emit('MAP_TOGGLE'); } } }; this._onKeyUp = (e) => { const key = this._keyMap[e.key.toLowerCase()] || e.key.toLowerCase(); this.keys[key] = false; }; this._onMouseDown = (e) => { if (e.button === 0) { this.keys['lmb'] = true; } if (e.button === 2) { this.keys['rmb'] = true; } }; this._onMouseUp = (e) => { if (e.button === 0) { this.keys['lmb'] = false; } if (e.button === 2) { this.keys['rmb'] = false; } }; this._onMouseMove = (e) => { this.mouseX = (e.clientX / window.innerWidth) * 2 - 1; this.mouseY = -(e.clientY / window.innerHeight) * 2 + 1; }; window.addEventListener('keydown', this._onKeyDown); window.addEventListener('keyup', this._onKeyUp); window.addEventListener('mousedown', this._onMouseDown); window.addEventListener('mouseup', this._onMouseUp); window.addEventListener('mousemove', this._onMouseMove); // window.addEventListener('contextmenu', (e) => e.preventDefault()); } isPressed(key) { return !!this.keys[key.toLowerCase()]; } destroy() { window.removeEventListener('keydown', this._onKeyDown); window.removeEventListener('keyup', this._onKeyUp); window.removeEventListener('mousedown', this._onMouseDown); window.removeEventListener('mouseup', this._onMouseUp); window.removeEventListener('mousemove', this._onMouseMove); } }