Let a game hand values to the parameters of a sound FX #311
A sound FX played the same every time: its numbers were settings of the nodes. Now the Input declares parameters with a default, every number of Gain, Pitch and EQ is an input they can feed, and a Play sound hands in values for them. - Input declares number parameters in the inspector, each with a Default (DeclaredPort.default, SetPortDefaultCommand). They are outputs of the Input. Input and Output count as terminals now, one of each per graph. - Gain, Pitch and EQ take their numbers at inputs under the keys the settings had, so saved graphs sound as before without a migration. Each value is held to its range however it arrives. - The compiler gives an FxPlan with the parameters still open. fxChainOf fills them in when a voice starts. The player still only sees an FxChain. - New behavior node Sound FX parameters: names an FX and picks its parameters like a Variables node picks variables. Each picked one is a number input that starts at the FX's default. Its output has the new port type fxparams, which only fits Play sound's fx params. - Play sound warns when the parameters name another FX than the one it plays. Names the FX does not know are left out. - Renaming a parameter at the Input renames it in every Sound FX parameters node naming that FX, edges and values included. - The Sound FX tab has a number field per parameter in its header. Play uses those values, they are never written into the asset. - A value counts from the start of a voice. Changing a playing voice is #315, a Mix node is #316. Tests: - soundfx.test.ts 22 (+11): parameters in the plan, held values, a 0-by-default stage, EQ band, save with defaults, wrong port types, default command with undo, Sound FX parameters into Play sound, defaults of picked ones, node problems, mismatch, rename with undo - node-catalog 368 (+3): Play sound fx params, Sound FX parameters - e2e 34: ALL PASSED - 28 checks (+2: header field plays depth 5, a Sound FX parameters node gives the game's voice depth 7) - Gate on melektaus-atx: typecheck, lint, prettier clean, 240 test files, 3636 tests green - Counter-check: with fxChainOf ignoring the values and the rename not followed, 5 of the new tests fail. - Browser probe: header fields, inspector Default and the picked parameter looked at in two screenshots. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
de14f0f9e2
commit
183f356c99
25 files changed
+785
-99
No files matched your search
@@ -1950,7 +1950,9 @@ const CASES: Record<string, Case[]> = {
|
||||
// flag – is the BehaviorSystem's to resolve, since only it holds the project (see
|
||||
// `sounds.test.ts`).
|
||||
after: (ctx) =>
|
||||
expect(ctx.played).toEqual([{ assetId: 'snd-1', volume: 0.5, loop: true, detached: false, fx: '' }]),
|
||||
expect(ctx.played).toEqual([
|
||||
{ assetId: 'snd-1', volume: 0.5, loop: true, detached: false, fx: '', fxParams: {} },
|
||||
]),
|
||||
},
|
||||
{
|
||||
name: 'detached says the voice is nobody’s, so destroying this object leaves it playing',
|
||||
@@ -1976,6 +1978,24 @@ const CASES: Record<string, Case[]> = {
|
||||
next: 'exec',
|
||||
after: (ctx) => expect(ctx.played[0]?.fx).toBe('fx-1'),
|
||||
},
|
||||
{
|
||||
name: 'hands on the numbers of its fx params, and nothing for what is no bundle',
|
||||
inputs: { sound: 'snd-1', volume: 1, loop: '', fx: 'fx-1', fxParams: { depth: -12, name: 'x' } },
|
||||
next: 'exec',
|
||||
after: (ctx) => expect(ctx.played[0]?.fxParams).toEqual({ depth: -12 }),
|
||||
},
|
||||
],
|
||||
SoundFxParameters: [
|
||||
{
|
||||
name: 'bundles its picked parameters as numbers',
|
||||
ports: [
|
||||
{ key: 'depth', kind: 'number' },
|
||||
{ key: 'loud', kind: 'number' },
|
||||
],
|
||||
inputs: { depth: '-12', loud: 3 },
|
||||
outputs: { params: { depth: -12, loud: 3 } },
|
||||
},
|
||||
{ name: 'with none picked the bundle is empty', outputs: { params: {} } },
|
||||
],
|
||||
LoadScene: [
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user