/
memoryspeak
/
UlamCodeWeb
Обзор
Документация
Войти
/
memoryspeak
/
UlamCodeWeb
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
js/Input.js
190 строк
4 KB
memoryspeak
refactor function parameters
17 фев 2026, 18:30
17 фев 2026, 18:30
d5167b6
Код
Авторство
О чём код?
export default class Input { KEY_CODES = [ 87, // w 65, // a 83, // s 68, // d 38, // ArrowUp 37, // ArrowLeft 39, // ArrowRight 40, // ArrowDown 13, // Enter (основной) 10, // Enter (NumPad) 32, // Space (пробел) 16, // Shift (левый) 27, // Escape ]; constructor(app) { this.canvas = app.layer.canvas; this.keys = []; this.mouse = { x: 0, y: 0, isDown: false, isUp: false, wheel: 0, }; this.canvas.addEventListener("mousemove", (event) => this.changeMouseState(event), ); this.canvas.addEventListener("mouseup", (event) => this.changeMouseState(event), ); this.canvas.addEventListener("mousedown", (event) => this.changeMouseState(event), ); this.canvas.addEventListener("contextmenu", (event) => this.changeMouseState(event), ); this.canvas.addEventListener("touchstart", (event) => this.changeTouchState(event), ); this.canvas.addEventListener("touchmove", (event) => this.changeTouchState(event), ); this.canvas.addEventListener("touchend", (event) => this.changeTouchState(event), ); this.canvas.addEventListener( "wheel", (event) => this.changeWheelState(event), { passive: false }, ); window.addEventListener("keyup", (event) => { if (this._isPressAnyKeyCode(event)) { this.keys.splice(this.keys.indexOf(event.keyCode), 1); } }); window.addEventListener("keydown", (event) => { if ( this._isPressAnyKeyCode(event) && this.keys.indexOf(event.keyCode) === -1 ) { this.keys.push(event.keyCode); } }); } changeMouseState(event) { const canvasRect = this.canvas.getBoundingClientRect(); this.mouse.x = event.clientX - canvasRect.left; this.mouse.y = event.clientY - canvasRect.top; if (event.type === "mousedown") { this.mouse.isDown = true; this.mouse.isUp = false; } else if (event.type === "mouseup") { this.mouse.isDown = false; this.mouse.isUp = true; } else if (event.type === "contextmenu") { event.preventDefault(); } } changeTouchState(event) { event.preventDefault(); const touch = event.type === "touchend" ? event.changedTouches[0] : event.touches[0]; if (!touch) return; const rect = this.canvas.getBoundingClientRect(); this.mouse.x = touch.clientX - rect.left; this.mouse.y = touch.clientY - rect.top; switch (event.type) { case "touchstart": this.mouse.isDown = true; this.mouse.isUp = false; break; case "touchend": this.mouse.isDown = false; this.mouse.isUp = true; break; } } changeWheelState(event) { event.preventDefault(); this.mouse.wheel = -Math.sign(event.deltaY); } update() { this.mouse.isUp = false; this.mouse.wheel = 0; } isPressA() { return this.keys.indexOf(65) !== -1; } isPressD() { return this.keys.indexOf(68) !== -1; } isPressW() { return this.keys.indexOf(87) !== -1; } isPressS() { return this.keys.indexOf(83) !== -1; } isPressArrowUp() { return this.keys.indexOf(38) !== -1; } isPressArrowDown() { return this.keys.indexOf(40) !== -1; } isPressArrowLeft() { return this.keys.indexOf(37) !== -1; } isPressArrowRight() { return this.keys.indexOf(39) !== -1; } isPressEnter() { return this.keys.indexOf(10) !== -1 || this.keys.indexOf(13) !== -1; } isPressSpace() { return this.keys.indexOf(32) !== -1; } isWheelUp() { return this.mouse.wheel > 0; } isWheelDown() { return this.mouse.wheel < 0; } isWheelShiftUp() { return this.mouse.wheel > 0 && this.keys.indexOf(16) !== -1; } isWheelShiftDown() { return this.mouse.wheel < 0 && this.keys.indexOf(16) !== -1; } isPressEscape() { return this.keys.indexOf(27) !== -1; } _isPressAnyKeyCode(event) { for (let i = 0; i < this.KEY_CODES.length; i++) { if (event.keyCode === this.KEY_CODES[i]) return true; } return false; } }