feat(traps): activation VFX/SFX, explosion effect, and help section

Wire mimic/pit/arrow/laser media on activate, poison/explosion via effects, and document the scene editor and traps in Instructions.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Ivan Fontosh
2026-07-25 12:35:22 +08:00
parent 02d73ddf81
commit fed5674468
36 changed files with 697 additions and 34 deletions
@@ -46,6 +46,34 @@ void test('ControlApp: звук облака яда (public/oblako-yada.mp3)', (
assert.ok(sfxSrc.includes('playbackRate'));
});
void test('ControlApp: активация ловушки «яд» спавнит poisonCloud как на пульте эффектов', () => {
const src = readControlApp();
assert.ok(src.includes("trap?.type === 'poison'"));
assert.ok(src.includes("type: 'poisonCloud'"));
assert.ok(src.includes('trap_pc_'));
assert.ok(src.includes('playPoisonCloudEffectSound(poisonLifeMs)'));
});
void test('ControlApp: эффект «взрыв» + ловушка используют explosion webm/mp3', () => {
const appSrc = readControlApp();
const sfxSrc = fs.readFileSync(path.join(here, 'explosionSfx.ts'), 'utf8');
assert.ok(appSrc.includes("title={t('control.explosion')}"));
assert.ok(appSrc.includes("tool: 'explosion'"));
assert.ok(appSrc.includes("type: 'explosion'"));
assert.ok(appSrc.includes('getExplosionEffectLifeMs'));
assert.ok(appSrc.includes('playExplosionEffectSound'));
assert.ok(appSrc.includes("trap?.type === 'explosion'"));
assert.ok(appSrc.includes('trap_ex_'));
assert.ok(sfxSrc.includes('explosion.mp3'));
assert.ok(sfxSrc.includes('aerial-debris-smoke.webm'));
assert.ok(appSrc.includes('ExplosionVideoOverlay'));
const videoOverlaySrc = fs.readFileSync(
path.join(here, '..', 'shared', 'effects', 'ExplosionVideoOverlay.tsx'),
'utf8',
);
assert.ok(videoOverlaySrc.includes('explosionEffectVideoUrl'));
});
void test('ControlApp: эффекты в пульте, иконки с тултипами и подписью для a11y', () => {
const src = readControlApp();
assert.ok(src.includes("t('control.instruments')"));