sounts
Version:
A tiny helper library for working with the web audio API written in TypeScript.
54 lines (53 loc) • 2.05 kB
JavaScript
"use strict";
/* eslint-disable jsdoc/require-jsdoc */
Object.defineProperty(exports, "__esModule", { value: true });
exports.Player = void 0;
const utils_1 = require("./utils");
class Player {
constructor() {
this.element = document.getElementById("listener");
this.x = utils_1.main.clientWidth / 2;
this.y = utils_1.main.clientHeight / 2;
this.angle = 0;
this.keys = {
ArrowUp: false,
ArrowDown: false,
ArrowLeft: false,
ArrowRight: false,
};
(0, utils_1.moveElementTo)(this.element, this.x, this.y);
window.addEventListener("keydown", (e) => {
if (e.code in this.keys) {
this.keys[e.code] = true;
e.preventDefault();
e.stopPropagation();
}
});
window.addEventListener("keyup", (e) => {
if (e.code in this.keys) {
this.keys[e.code] = false;
e.preventDefault();
e.stopPropagation();
}
});
}
update(deltaTime) {
let deltaAngle = 0;
if (this.keys.ArrowRight)
deltaAngle += 1;
if (this.keys.ArrowLeft)
deltaAngle -= 1;
this.angle = (360 + this.angle + deltaTime * deltaAngle * 0.2) % 360;
this.element.style.transform = `rotate(${this.angle}deg)`;
if ((this.keys.ArrowUp || this.keys.ArrowDown) && this.keys.ArrowUp !== this.keys.ArrowDown) {
const moveAngle = (this.keys.ArrowUp ? this.angle - 90 : this.angle + 90) * utils_1.DEG_TO_RAD;
const dx = Math.cos(moveAngle);
const dy = Math.sin(moveAngle);
const speed = deltaTime * 0.1;
this.x = Math.min(utils_1.main.clientWidth - 50, Math.max(50, this.x + dx * speed));
this.y = Math.min(utils_1.main.clientHeight - 50, Math.max(50, this.y + dy * speed));
(0, utils_1.moveElementTo)(this.element, this.x, this.y);
}
}
}
exports.Player = Player;