Time flicks from touch-down, log the opponent's shots, save early half-volleys

From Oliver's first swing log (cup vs the Brute): 13 of 22 hits were
perfect, 9 badly early or late — mostly forward-right flicks — and the
weak balls became seven "passed you". Every hit was a flick, and flicks
still swung only at the flickMin crossing while the timed ring says "touch
now": they are now timed from touch-down too (capped at flickLead 0.1 s).

The log gains its other half: a THEM line per opponent shot (kind, pace,
where it lands relative to you, coming in) and "never swung" judged per
incoming ball instead of once a point. And an early swing on a low ball
digs it out as a capped half-volley instead of whiffing. v366.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5.5 committed 2026-10-14 11:48:51 +02:00
1 parent d110e12321
commit 5bbde720ad
7 files changed
+66 -9

No files matched your search

+7 -2
View File
@@ -207,7 +207,12 @@ cv.addEventListener('touchmove', e => {
? { ax: Math.abs(dx) > dist * 0.38 ? Math.sign(dx) : 0,
az: Math.abs(dy) > dist * 0.38 ? Math.sign(dy) : 0,
fx: dx / dist, fy: dy / dist, mag: dist } : null;
if (G.swipe && !stick.swung && G.phase === 'rally') { stick.swung = true; keyPressed('Space'); }
// ...timed, like the tap, from the moment the finger LANDED (gameplay.keyPressed's `lead`): the
// timed gold ring means "touch now", and a flick only swings once it has travelled flickMin.
// Capped at flickLead, so a slow drag still has a window to swing into (the left-flick lesson).
if (G.swipe && !stick.swung && G.phase === 'rally') {
stick.swung = true; keyPressed('Space', Math.min(TUNE.flickLead, (performance.now() - stick.t0) / 1000), true);
}
}
}, { passive: false });
@@ -235,7 +240,7 @@ const endTouch = e => {
az: Math.abs(dy) > dist * 0.38 ? Math.sign(dy) : 0,
fx: dx / dist, fy: dy / dist, mag: dist, // raw vector: splatter free-aim
t: performance.now() };
if (!stick.swung) keyPressed('Space'); // the crossing already swung — never twice per gesture
if (!stick.swung) keyPressed('Space', Math.min(TUNE.flickLead, dt / 1000), true); // the crossing already swung — never twice per gesture
}
stick = null; touchAxis.x = 0; touchAxis.z = 0; G.swipe = null;
}