feat: strengthen semantic battle feedback
This commit is contained in:
@@ -57,7 +57,7 @@ export type MusicDuckOptions = {
|
||||
releaseMs?: number;
|
||||
};
|
||||
|
||||
type SemanticCueGroup = 'turn' | 'operation' | 'objective' | 'narrative';
|
||||
type SemanticCueGroup = 'turn' | 'operation' | 'objective' | 'narrative' | 'recovery' | 'status' | 'reward';
|
||||
|
||||
type MusicDuckState = {
|
||||
multiplier: number;
|
||||
@@ -103,7 +103,10 @@ export class SoundDirector {
|
||||
turn: 900,
|
||||
operation: 650,
|
||||
objective: 1200,
|
||||
narrative: 220
|
||||
narrative: 220,
|
||||
recovery: 1900,
|
||||
status: 280,
|
||||
reward: 1100
|
||||
};
|
||||
private readonly semanticCuePlayedAt = new Map<SemanticCueGroup, number>();
|
||||
private lastPlayedSemanticCue?: { group: SemanticCueGroup; key: string; at: number };
|
||||
@@ -442,6 +445,28 @@ export class SoundDirector {
|
||||
});
|
||||
}
|
||||
|
||||
playRecoveryCue() {
|
||||
return this.playSemanticCue('recovery', 'recovery-cue', {
|
||||
volume: 0.26,
|
||||
stopAfterMs: 1900
|
||||
});
|
||||
}
|
||||
|
||||
playBurnTickCue() {
|
||||
return this.playSemanticCue('status', 'burn-tick', {
|
||||
volume: 0.24,
|
||||
stopAfterMs: 680
|
||||
});
|
||||
}
|
||||
|
||||
playRewardRevealCue() {
|
||||
return this.playSemanticCue('reward', 'reward-reveal', {
|
||||
volume: 0.26,
|
||||
stopAfterMs: 1400,
|
||||
duck: { multiplier: 0.76, attackMs: 36, holdMs: 420, releaseMs: 260 }
|
||||
});
|
||||
}
|
||||
|
||||
playStrategyPulse() {
|
||||
this.playEffect('strategy-cast', { volume: 0.44, rate: 0.96, stopAfterMs: 960 });
|
||||
this.playTone(460, 0.08, 0.012, 'sine');
|
||||
|
||||
Reference in New Issue
Block a user