Shot ships fall with gravity
This commit is contained in:
@@ -43,6 +43,16 @@
|
|||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.explosion {
|
||||||
|
r: 5px;
|
||||||
|
transition: r 0.01s ease-in;
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.explosion.flash {
|
||||||
|
r: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
#triangles polygon {
|
#triangles polygon {
|
||||||
fill-opacity: 0.2;
|
fill-opacity: 0.2;
|
||||||
stroke-width: 1px;
|
stroke-width: 1px;
|
||||||
@@ -299,7 +309,7 @@ const Combat = (() => {
|
|||||||
target.x = pt.x;
|
target.x = pt.x;
|
||||||
target.y = pt.y;
|
target.y = pt.y;
|
||||||
|
|
||||||
const hitShips = Ships.find(({ entity_id: id }) => {
|
const hitShips = Ships.filter(({ entity_id: id }) => {
|
||||||
const node = Nodes[id];
|
const node = Nodes[id];
|
||||||
const p = Position[id];
|
const p = Position[id];
|
||||||
const body = node.querySelector(".body");
|
const body = node.querySelector(".body");
|
||||||
@@ -311,8 +321,10 @@ const Combat = (() => {
|
|||||||
const offBg = !bg.isPointInFill(pt);
|
const offBg = !bg.isPointInFill(pt);
|
||||||
const wallHits = [...wallElements].find(el => el.isPointInFill(pt));
|
const wallHits = [...wallElements].find(el => el.isPointInFill(pt));
|
||||||
|
|
||||||
|
hitShips.forEach(({ entity_id }) => GravityEffect[entity_id] = true);
|
||||||
|
|
||||||
i += 1;
|
i += 1;
|
||||||
if (hitShips || offBg || wallHits) break;
|
if (hitShips.length || offBg || wallHits) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -335,6 +347,7 @@ const Draw = (() => {
|
|||||||
|
|
||||||
shot: ({ entity_id }, shot) => {
|
shot: ({ entity_id }, shot) => {
|
||||||
const gun = CannonNodes[entity_id];
|
const gun = CannonNodes[entity_id];
|
||||||
|
|
||||||
const lineEl = document.createElementNS(namespaceURIsvg, 'line');
|
const lineEl = document.createElementNS(namespaceURIsvg, 'line');
|
||||||
lineEl.classList.add('bullet');
|
lineEl.classList.add('bullet');
|
||||||
lineEl.setAttribute('x1', shot.origin.x);
|
lineEl.setAttribute('x1', shot.origin.x);
|
||||||
@@ -343,11 +356,24 @@ const Draw = (() => {
|
|||||||
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 = gun.querySelector(".tip")
|
const tipEl = gun.querySelector(".tip")
|
||||||
tipEl.classList.remove("recoil");
|
tipEl.classList.remove("recoil");
|
||||||
setTimeout(() => tipEl.classList.add('recoil'), 0);
|
setTimeout(() => tipEl.classList.add('recoil'), 0);
|
||||||
|
|
||||||
return bulletsContainer.appendChild(lineEl);
|
|
||||||
|
const explosionEl = document.createElementNS(namespaceURIsvg, 'circle');
|
||||||
|
explosionEl.classList.add('explosion');
|
||||||
|
explosionEl.setAttribute('cx', shot.target.x);
|
||||||
|
explosionEl.setAttribute('cy', shot.target.y);
|
||||||
|
explosionEl.setAttribute('fill', 'orange');
|
||||||
|
explosionEl.addEventListener('transitionend', e => e.target.remove());
|
||||||
|
setTimeout(() => explosionEl.classList.add('flash'), 100);
|
||||||
|
|
||||||
|
const le = bulletsContainer.appendChild(lineEl);
|
||||||
|
bulletsContainer.appendChild(explosionEl);
|
||||||
|
|
||||||
|
return le;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 54 KiB |
Reference in New Issue
Block a user