WIP: move multiple ships

This commit is contained in:
2026-02-10 15:58:43 -08:00
parent 7f07c94c82
commit af8e222045

View File

@@ -255,6 +255,8 @@ const Acceleration = {};
const AngularAcceleration = {}; const AngularAcceleration = {};
const AngularVelocity = {}; const AngularVelocity = {};
const Degrees = {}; const Degrees = {};
const Nodes = {};
const CannonNodes = {};
// Points = { // Points = {
// "wall_1": "0,0 2,0 1,1", // "wall_1": "0,0 2,0 1,1",
@@ -288,6 +290,18 @@ const Shoot = (() => {
}; };
})(); })();
const Draw = (() => {
return {
update: ({ entity_id }) => {
const node = Nodes[entity_id];
const gun = CannonNodes[entity_id];
newPos = Position[entity_id];
node.style.transform = `translate(${newPos.x}px, ${newPos.y}px)`;
gun.style.transform = `rotate(${Degrees[entity_id]}deg)`;
}
};
})();
const Rotate = (() => { const Rotate = (() => {
const metersPerMillisecond = 0.001; const metersPerMillisecond = 0.001;
@@ -778,9 +792,12 @@ const Move = (() => {
return { return {
update: ({ entity_id }, elapsed) => { update: ({ entity_id }, elapsed) => {
const gravity = 0.1;
// affectedByWalls & affectedByGravity toggles?
const { x: px, y: py } = Position[entity_id]; const { x: px, y: py } = Position[entity_id];
const { x: vx, y: vy } = Velocity[entity_id]; const { x: vx, y: vy } = Velocity[entity_id];
const { x: ax, y: ay } = Acceleration[entity_id]; let { x: ax, y: ay } = Acceleration[entity_id];
ay += gravity;
const vr = { const vr = {
x: Math.round(vx * 100 + ax * 100) / 100, x: Math.round(vx * 100 + ax * 100) / 100,
@@ -1039,8 +1056,10 @@ function init() {
AngularAcceleration[entity_id] = s.angularAcceleration; AngularAcceleration[entity_id] = s.angularAcceleration;
AngularVelocity[entity_id] = s.angularVelocity; AngularVelocity[entity_id] = s.angularVelocity;
Degrees[entity_id] = s.degrees; Degrees[entity_id] = s.degrees;
let node = document.querySelector(`#${entity_id}`); Nodes[entity_id] = document.querySelector(`#${entity_id}`);
node.style.transform = `translate(${s.position.x}px, ${s.position.y}px)`; CannonNodes[entity_id] = document.querySelector(`#${entity_id} .cannon`);
// let node = document.querySelector(`#${entity_id}`);
// node.style.transform = `translate(${s.position.x}px, ${s.position.y}px)`;
} }
Ships.forEach(({ entity_id }) => { Ships.forEach(({ entity_id }) => {
@@ -1063,6 +1082,10 @@ function init() {
degrees: 0 degrees: 0
}); });
Ships.forEach(({ entity_id }) => {
Draw.update({ entity_id });
});
[...edgeContainer.children].forEach(c => c.remove());; [...edgeContainer.children].forEach(c => c.remove());;
wallElements.forEach(w => w.setAttribute('fill', 'black')); wallElements.forEach(w => w.setAttribute('fill', 'black'));
@@ -1333,17 +1356,9 @@ function animate(timestamp) {
Ships.forEach(({ entity_id }) => { Ships.forEach(({ entity_id }) => {
Move.update({ entity_id }, elapsed); Move.update({ entity_id }, elapsed);
Rotate.update({ entity_id }, elapsed); Rotate.update({ entity_id }, elapsed);
Draw.update({ entity_id });
}); });
// let newPos = updateShip(s, elapsed);
newPos = Position[Ships[0].entity_id];
let newVel = Velocity[Ships[0].entity_id];
s.node.style.transform = `translate(${newPos.x}px, ${newPos.y}px)`;
positionEl.innerText = `${newPos.x},${newPos.y}`;
velocityEl.innerText = `${newVel.x},${newVel.y}`;
gun.style.transform = `rotate(${Degrees[Ships[0].entity_id]}deg)`;
// updateEdges(position); // updateEdges(position);
if (drawCollisionLines) updateTriangles(position); if (drawCollisionLines) updateTriangles(position);
@@ -1392,7 +1407,7 @@ function drawShot(shot) {
lineEl.setAttribute('y2', shot.target.y); lineEl.setAttribute('y2', shot.target.y);
lineEl.addEventListener('transitionend', e => e.target.remove()); lineEl.addEventListener('transitionend', e => e.target.remove());
setTimeout(() => lineEl.classList.add('fade'), 1000); setTimeout(() => lineEl.classList.add('fade'), 1000);
const tipEl = document.querySelector(".cannon .tip") const tipEl = document.querySelector("#ship1 .cannon .tip")
tipEl.classList.remove("recoil"); tipEl.classList.remove("recoil");
setTimeout(() => tipEl.classList.add('recoil'), 0); setTimeout(() => tipEl.classList.add('recoil'), 0);

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 52 KiB