enhance(drop-and-fusion): some tweaks

This commit is contained in:
syuilo 2024-01-10 13:44:00 +09:00
parent 3d9e42efca
commit 4bd9f664d7
3 changed files with 21 additions and 11 deletions

View file

@ -1028,6 +1028,7 @@ definePageMetadata({
bottom: 10px; bottom: 10px;
padding: 6px 8px; padding: 6px 8px;
color: #f00; color: #f00;
font-weight: bold;
background: #0008; background: #0008;
border-radius: 6px; border-radius: 6px;
pointer-events: none; pointer-events: none;

View file

@ -157,6 +157,7 @@ export class DropAndFusionGame extends EventEmitter<{
//#region walls //#region walls
const WALL_OPTIONS: Matter.IChamferableBodyDefinition = { const WALL_OPTIONS: Matter.IChamferableBodyDefinition = {
label: '_wall_',
isStatic: true, isStatic: true,
friction: 0.7, friction: 0.7,
slop: 1.0, slop: 1.0,
@ -254,12 +255,14 @@ export class DropAndFusionGame extends EventEmitter<{
const additionalScore = Math.round(currentMono.score * comboBonus); const additionalScore = Math.round(currentMono.score * comboBonus);
this.score += additionalScore; this.score += additionalScore;
// TODO: 効果音再生はコンポーネント側の責務なので移動する // TODO: 効果音再生はコンポーネント側の責務なので移動するべき?
const pan = ((newX / this.gameWidth) - 0.5) * 2; const panV = newX - this.PLAYAREA_MARGIN;
const panW = this.gameWidth - this.PLAYAREA_MARGIN - this.PLAYAREA_MARGIN;
const pan = ((panV / panW) - 0.5) * 2;
sound.playUrl('/client-assets/drop-and-fusion/bubble2.mp3', { sound.playUrl('/client-assets/drop-and-fusion/bubble2.mp3', {
volume: this.sfxVolume, volume: this.sfxVolume,
pan, pan,
playbackRate: nextMono.sfxPitch, playbackRate: nextMono.sfxPitch * this.replayPlaybackRate,
}); });
this.emit('monoAdded', nextMono); this.emit('monoAdded', nextMono);
@ -293,7 +296,7 @@ export class DropAndFusionGame extends EventEmitter<{
this.tickRaf = null; this.tickRaf = null;
this.emit('gameOver'); this.emit('gameOver');
// TODO: 効果音再生はコンポーネント側の責務なので移動する // TODO: 効果音再生はコンポーネント側の責務なので移動するべき?
sound.playUrl('/client-assets/drop-and-fusion/gameover.mp3', { sound.playUrl('/client-assets/drop-and-fusion/gameover.mp3', {
volume: this.sfxVolume, volume: this.sfxVolume,
}); });
@ -377,14 +380,19 @@ export class DropAndFusionGame extends EventEmitter<{
} else { } else {
const energy = pairs.collision.depth; const energy = pairs.collision.depth;
if (energy > minCollisionEnergyForSound) { if (energy > minCollisionEnergyForSound) {
// TODO: 効果音再生はコンポーネント側の責務なので移動する // TODO: 効果音再生はコンポーネント側の責務なので移動するべき?
const vol = ((Math.min(maxCollisionEnergyForSound, energy - minCollisionEnergyForSound) / maxCollisionEnergyForSound) / 4) * this.sfxVolume; const vol = ((Math.min(maxCollisionEnergyForSound, energy - minCollisionEnergyForSound) / maxCollisionEnergyForSound) / 4) * this.sfxVolume;
const pan = ((((bodyA.position.x + bodyB.position.x) / 2) / this.gameWidth) - 0.5) * 2; const panV =
pairs.bodyA.label === '_wall_' ? bodyB.position.x - this.PLAYAREA_MARGIN :
pairs.bodyB.label === '_wall_' ? bodyA.position.x - this.PLAYAREA_MARGIN :
((bodyA.position.x + bodyB.position.x) / 2) - this.PLAYAREA_MARGIN;
const panW = this.gameWidth - this.PLAYAREA_MARGIN - this.PLAYAREA_MARGIN;
const pan = ((panV / panW) - 0.5) * 2;
const pitch = soundPitchMin + ((soundPitchMax - soundPitchMin) * (1 - (Math.min(10, energy) / 10))); const pitch = soundPitchMin + ((soundPitchMax - soundPitchMin) * (1 - (Math.min(10, energy) / 10)));
sound.playUrl('/client-assets/drop-and-fusion/poi1.mp3', { sound.playUrl('/client-assets/drop-and-fusion/poi1.mp3', {
volume: vol, volume: vol,
pan, pan,
playbackRate: pitch, playbackRate: pitch * this.replayPlaybackRate,
}); });
} }
} }
@ -518,11 +526,14 @@ export class DropAndFusionGame extends EventEmitter<{
this.emit('dropped'); this.emit('dropped');
this.emit('monoAdded', head.mono); this.emit('monoAdded', head.mono);
// TODO: 効果音再生はコンポーネント側の責務なので移動する // TODO: 効果音再生はコンポーネント側の責務なので移動するべき?
const pan = ((x / this.gameWidth) - 0.5) * 2; const panV = x - this.PLAYAREA_MARGIN;
const panW = this.gameWidth - this.PLAYAREA_MARGIN - this.PLAYAREA_MARGIN;
const pan = ((panV / panW) - 0.5) * 2;
sound.playUrl('/client-assets/drop-and-fusion/poi2.mp3', { sound.playUrl('/client-assets/drop-and-fusion/poi2.mp3', {
volume: this.sfxVolume, volume: this.sfxVolume,
pan, pan,
playbackRate: this.replayPlaybackRate,
}); });
} }

View file

@ -99,7 +99,6 @@ export async function loadAudio(url: string, options?: { useCache?: boolean; })
} }
if (options?.useCache ?? true) { if (options?.useCache ?? true) {
if (cache.has(url)) { if (cache.has(url)) {
if (_DEV_) console.log('use cache');
return cache.get(url) as AudioBuffer; return cache.get(url) as AudioBuffer;
} }
} }
@ -128,7 +127,6 @@ export async function loadAudio(url: string, options?: { useCache?: boolean; })
*/ */
export function playMisskeySfx(operationType: OperationType) { export function playMisskeySfx(operationType: OperationType) {
const sound = defaultStore.state[`sound_${operationType}`]; const sound = defaultStore.state[`sound_${operationType}`];
if (_DEV_) console.log('play', operationType, sound);
if (sound.type == null || !canPlay) return; if (sound.type == null || !canPlay) return;
canPlay = false; canPlay = false;