Shader graph: Number node, a typed constant like Color (#72)
game-maker / suite (push) Canceled after 6m55s

No input, one Value param (step 0.05, drawn on the node), output `value`
as a float literal via floatLiteral (2 -> 2.0, NaN -> 0.0). No uniform,
no sprite row - that is the difference to Property.

The e2e negative check for "no behavior node in the palette" now uses
Boolean as its marker, and step 28 types the palette search first
because the palette scrolls from twelve entries on.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
rootandClaude Fable 5.1 committed 2026-09-13 12:26:53 +02:00
1 parent 4d9c4982eb
commit ccc6dc5b6e
5 files changed
+89 -4

No files matched your search

+13
View File
@@ -36,6 +36,7 @@ export const SHADER_TEXTURE_COLOR = 'ShaderTextureColor';
export const SHADER_TEXTURE_ALPHA = 'ShaderTextureAlpha';
export const SHADER_OUTPUT = 'ShaderOutput';
export const SHADER_COLOR = 'ShaderColor';
export const SHADER_NUMBER = 'ShaderNumber';
/** What the fragment prelude binds: the texel's straight (unpremultiplied) colour. */
export const TEXEL_COLOR: Expr = { code: 'rgb', type: 'vec3' };
@@ -160,6 +161,17 @@ export const ShaderColor: ShaderNodeDef = {
}),
};
export const ShaderNumber: ShaderNodeDef = {
type: SHADER_NUMBER,
label: 'Number',
category: 'shader',
description: 'A constant number.',
inputs: [],
outputs: [{ key: 'value', label: 'value', type: 'number' }],
params: [{ key: 'value', label: 'Value', kind: 'number', default: 0, step: NUMBER_STEP }],
emit: (_inputs, params) => ({ value: { code: floatLiteral(Number(params.value ?? 0)), type: 'float' } }),
};
export const ShaderAdd = arithmetic('ShaderAdd', 'Add', '+', 'a + b, per channel for colours.', 0);
export const ShaderSubtract = arithmetic(
'ShaderSubtract',
@@ -211,6 +223,7 @@ export const SHADER_NODES: readonly ShaderNodeDef[] = [
ShaderOutput,
ShaderProperty,
ShaderColor,
ShaderNumber,
ShaderAdd,
ShaderSubtract,
ShaderMultiply,
+1
View File
@@ -278,6 +278,7 @@ export function installDebugHook(app: Application, state: EditorState, editor: E
nodeLabel: (nodeId: string) => editor.shaderEditor.canvas.nodeLabel(nodeId),
nodeRect: (nodeId: string) => editor.shaderEditor.canvas.nodeRect(nodeId),
nodeProblem: (nodeId: string) => editor.shaderEditor.canvas.nodeProblem(nodeId),
nodeSettings: (nodeId: string) => editor.shaderEditor.canvas.nodeSettings(nodeId),
canvasRect: () => editor.shaderEditor.canvas.canvasRect(),
emptySpot: () => editor.shaderEditor.canvas.emptySpotGlobal(),
center: () => centreOf(editor.shaderEditor.canvas),