Add short fade-in ramp to local movement footsteps

This commit is contained in:
Jage9
2026-02-22 19:33:42 -05:00
parent 7ba67c3707
commit 391100a00e
3 changed files with 10 additions and 4 deletions

View File

@@ -1,5 +1,5 @@
// Maintainer-controlled web client version.
// Format: YYYY.MM.DD Rn (example: 2026.02.20 R2)
window.CHGRID_WEB_VERSION = "2026.02.22 R173";
window.CHGRID_WEB_VERSION = "2026.02.22 R174";
// Optional display timezone for timestamps. Falls back to America/Detroit if unset/invalid.
window.CHGRID_TIME_ZONE = "America/Detroit";

View File

@@ -369,7 +369,7 @@ export class AudioEngine {
}
}
async playSample(url: string, gain = 1): Promise<void> {
async playSample(url: string, gain = 1, fadeInMs = 0): Promise<void> {
await this.ensureContext();
const { audioCtx, sfxGainNode } = this;
if (!audioCtx || !sfxGainNode) return;
@@ -380,7 +380,13 @@ export class AudioEngine {
const source = audioCtx.createBufferSource();
source.buffer = buffer;
const gainNode = audioCtx.createGain();
const safeFadeMs = Number.isFinite(fadeInMs) ? Math.max(0, fadeInMs) : 0;
if (safeFadeMs > 0) {
gainNode.gain.setValueAtTime(0, audioCtx.currentTime);
gainNode.gain.linearRampToValueAtTime(gain, audioCtx.currentTime + safeFadeMs / 1000);
} else {
gainNode.gain.value = gain;
}
source.connect(gainNode).connect(sfxGainNode);
source.start();
} catch {

View File

@@ -1136,7 +1136,7 @@ function handleMovement(): void {
persistPlayerPosition();
state.player.lastMoveTime = now;
void refreshAudioSubscriptions(true);
void audio.playSample(randomFootstepUrl(), FOOTSTEP_GAIN);
void audio.playSample(randomFootstepUrl(), FOOTSTEP_GAIN, 40);
signaling.send({ type: 'update_position', x: nextX, y: nextY });
const namesOnTile = getPeerNamesAtPosition(nextX, nextY);