A burst fires for its whole window, and the countdown is the tile itself
The gun, beacon, flamer and rocket fell silent the moment they cleared the court: firing and steering were both gated on phase 'rally', and every beat raised by the kill that empties the court (a point, a won game, the mop-up) parks the phase in 'over'. A burst is its own control mode for its whole len, like a horde — its own clock is the only thing that ends it. Not fixed by forcing the phase back to rally: a parked 'over' beat that never expires is how pendingHorde gets stranded. The countdown moved off the tile's bottom edge (the rounded frame, and the bottom of the screen) into the tile: the armed slot's well drains as a gold wash, clipped to its own rounded path, under the icon and labels. 16 tests. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5ea84f8511
commit
c659b6882f
6 files changed
+59
-7
No files matched your search
+13
-2
@@ -1227,6 +1227,19 @@ function drawRack() {
|
||||
sel ? '#1c5230' : '#0a2418', // sunk slot — the live one sits visibly lit
|
||||
sel ? UI.pick : '#05160e'); // gold frame when live
|
||||
if (sel) ctx.lineWidth = 1;
|
||||
// THE BURST COUNTDOWN IS THE TILE ITSELF. It was a 1.5 px bar along the tile's bottom edge —
|
||||
// which is both the rounded frame AND the very bottom of a phone screen, so it was invisible
|
||||
// ("the progress bar is not visible anymore because of the lower border"). The armed slot's
|
||||
// WELL drains instead: a lit wash across the whole tile, emptying to the left as the window
|
||||
// runs out. Clipped to the tile's own rounded path (panel leaves it current) so it can never
|
||||
// square off the corners, and drawn UNDER the icon and labels, which stay fully readable.
|
||||
if (G.mgT > 0 && slotId(i) === G.gunId) {
|
||||
const frac = Math.min(1, G.mgT / (WEAPONS[G.gunId]?.len || TUNE.mgPickupLen));
|
||||
ctx.save(); ctx.clip();
|
||||
ctx.fillStyle = hexA(UI.pick, 0.34);
|
||||
ctx.fillRect(x + 1.5, y0 + 1.5, (g.tw - 3) * frac, g.h - 3);
|
||||
ctx.restore();
|
||||
}
|
||||
// a slot that just came out of a barrel announces itself: a pink pulse for a moment, WITHOUT
|
||||
// stealing the selection (grabbing the gun mid-plan was the complaint — see popBarrel)
|
||||
if (G.rackGlow && G.rackGlow.slot === i) {
|
||||
@@ -1253,8 +1266,6 @@ function drawRack() {
|
||||
ctx.font = F(6, 0); ctx.fillStyle = sel ? '#f2ead6' : temp ? UI.pink : '#8fa89a';
|
||||
ctx.fillText(label, tx, y0 + g.h * 0.72); // weapon label, under its count
|
||||
ctx.globalAlpha = 1;
|
||||
// the burst countdown belongs to whichever slot is holding the armed weapon now, not to slot 4
|
||||
if (G.mgT > 0 && slotId(i) === G.gunId) { ctx.fillStyle = UI.pick; ctx.fillRect(x + 2, y0 + g.h - 2, (g.tw - 4) * Math.min(1, G.mgT / (WEAPONS[G.gunId]?.len || TUNE.mgPickupLen)), 1.5); }
|
||||
}
|
||||
ctx.restore();
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user