diff --git a/html/images/space.svg b/html/images/space.svg
index c1f2192..4c418bf 100644
--- a/html/images/space.svg
+++ b/html/images/space.svg
@@ -65,6 +65,16 @@
#legs {
display: none;
}
+
+ #triangles polygon.obtuse {
+ stroke: orangered;
+ stroke-dasharray: 5 10;
+ }
+
+ #triangles polygon.anti-clockwise {
+ stroke: orange;
+ stroke-dasharray: 1 5;
+ }
@@ -123,6 +133,7 @@
let rotate = 0;
let rotationSpeed = 0.25;
const maxSpeed = 100;
+ let started = false;
const fps = document.querySelector("#fps");
const time = document.querySelector("#time");
@@ -228,6 +239,8 @@
}
t.classList[isClockwise && isAcute ? "add" : "remove"](className);
+ t.classList[isClockwise && !isAcute ? "add" : "remove"]("obtuse");
+ t.classList[!isClockwise ? "add" : "remove"]("anti-clockwise");
if (isClockwise && isAcute) visible.push(t);
});
@@ -352,44 +365,7 @@
return cornerCollision || sideCollision;
}
- requestAnimationFrame(firstFrame);
-
- let start;
- let restart = false;
- function firstFrame(timestamp) {
- zero = timestamp;
- zeroForTimer = timestamp;
- previous = timestamp;
- animate(timestamp);
- }
-
- function distance(x1, y1, x2, y2) {
- return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);
- }
-
- function animate(timestamp) {
- const elapsed = timestamp - previous;
- const delta = timestamp - zero;
- let degrees = getRotate(gun);
-
- previous = timestamp;
- time.innerText = ((timestamp - zeroForTimer) * 0.001).toFixed(3);
-
- if (delta >= 1000) {
- fps.innerText = frameCount;
-
- // info.innerText = `velocity ${velocity}\n`
- // + 'bullets\nx\ty\tvx\tvy\n'
- // + bullets.map(b => {
- // return `${b.x.toFixed(2)}\t${b.y.toFixed(2)}\t${b.vx.toFixed(2)}\t${b.vy.toFixed(2)}`;
- // }).join("\n");
-
- zero = timestamp;
- frameCount = 0;
- } else {
- frameCount++;
- }
-
+ function updateShip(elapsed) {
if (rotate > 0) gun.style.transform = `rotate(${(+degrees + rotationSpeed * elapsed) % 360}deg)`;
else if (rotate < 0) gun.style.transform = `rotate(${(+degrees - rotationSpeed * elapsed) % 360}deg)`;
@@ -417,7 +393,50 @@
let [x, y] = getTranslate(hitbox);
let position = [positionX, positionY] = restart ? [0, 0] : wrapPos(changeX + x, changeY + y);
+ hitbox.style.transform = `translate(${positionX}px, ${positionY}px)`;
+ return position;
+ }
+
+ let start;
+ let restart = false;
+ function firstFrame(timestamp) {
+ zero = timestamp;
+ zeroForTimer = timestamp;
+ previous = timestamp;
+ animate(timestamp);
+ }
+
+ function distance(x1, y1, x2, y2) {
+ return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);
+ }
+
+ let isReadingKeys = true;
+
+ function animate(timestamp) {
+ const elapsed = timestamp - previous;
+ const delta = timestamp - zero;
+ let degrees = getRotate(gun);
+
+ previous = timestamp;
+ time.innerText = ((timestamp - zeroForTimer) * 0.001).toFixed(3);
+
+ if (delta >= 1000) {
+ fps.innerText = frameCount;
+
+ // info.innerText = `velocity ${velocity}\n`
+ // + 'bullets\nx\ty\tvx\tvy\n'
+ // + bullets.map(b => {
+ // return `${b.x.toFixed(2)}\t${b.y.toFixed(2)}\t${b.vx.toFixed(2)}\t${b.vy.toFixed(2)}`;
+ // }).join("\n");
+
+ zero = timestamp;
+ frameCount = 0;
+ } else {
+ frameCount++;
+ }
+
+ position = updateShip(elapsed);
updateBullets(elapsed);
const visibleTriangles = updateTriangles(position);
@@ -447,19 +466,19 @@
}
const collision = detectCollision(points, visibleTriangles);
-
wall.setAttribute('fill', collision ? 'red' : 'black');
- hitbox.style.transform = `translate(${positionX}px, ${positionY}px)`;
if (collision) {
// restart game
zeroForTimer = timestamp;
restart = true;
+ started = false;
+ isReadingKeys = false;
}
// if (+y < 200)
// if (timestamp < 10000)
- if (lineContainer.childElementCount > 0)
+ if (lineContainer.childElementCount > 0 && started)
requestAnimationFrame(t => animate(t));
}
@@ -473,7 +492,33 @@
let rotateCWPressed = false;
let rotateCCWPressed = false;
+ const pressed = [
+ spacePressed,
+ upPressed,
+ downPressed,
+ leftPressed,
+ rightPressed,
+ rotateCWPressed,
+ rotateCCWPressed,
+ ];
+
+
document.addEventListener("keydown", function(e) {
+ // console.log(isReadingKeys, pressed.every(k => k));
+
+ if (!isReadingKeys && pressed.some(k => k)) {
+ return;
+ } else {
+ isReadingKeys = true;
+ }
+
+ if (!started && !restart) {
+ started = true;
+ requestAnimationFrame(firstFrame);
+ } else if (restart) {
+ requestAnimationFrame(firstFrame);
+ }
+
switch (e.code) {
case "Space":
if (!spacePressed) {