import { BaseJsNodeType } from '../../_Base';
import { TypedNodeTraverser } from '../../../utils/shaders/NodeTraverser';
import { JsFunctionName } from '../../../utils/shaders/ShaderName';
import { JsLinesCollectionController } from './JsLinesCollectionController';
import { LineType } from './LineType';
import { JsParamConfig } from './JsParamConfig';
import { ParamType } from '../../../../poly/ParamType';
import { NodeContext } from '../../../../poly/NodeContext';
import { BaseJsShaderAssembler } from '../assemblers/_Base';
import { ActorBuilderNode } from '../../../../scene/utils/ActorsManager';
type RootNodesForJsFunctionMethod = (shader_name: JsFunctionName, rootNodes: BaseJsNodeType[]) => BaseJsNodeType[];
export interface CodeBuilderSetCodeLinesOptions {
    otherFragmentShaderCollectionController?: JsLinesCollectionController;
    actor: {
        triggeringNodes: Set<BaseJsNodeType>;
        triggerableNodes: Set<BaseJsNodeType>;
        functionNode: ActorBuilderNode;
    };
}
export declare class JsCodeBuilder {
    private _nodeTraverser;
    private _rootNodesByShaderName;
    private _assembler;
    private _param_configs_controller;
    private _param_configs_set_allowed;
    private _shadersCollectionController;
    private _lines;
    constructor(_nodeTraverser: TypedNodeTraverser<NodeContext.JS>, _rootNodesByShaderName: RootNodesForJsFunctionMethod, _assembler: BaseJsShaderAssembler);
    nodeTraverser(): TypedNodeTraverser<NodeContext.JS>;
    shaderNames(): JsFunctionName[];
    buildFromNodes(rootNodes: BaseJsNodeType[], paramNodes: BaseJsNodeType[], setCodeLinesOptions?: CodeBuilderSetCodeLinesOptions): void;
    shadersCollectionController(): JsLinesCollectionController | undefined;
    disallow_new_param_configs(): void;
    allow_new_param_configs(): void;
    private reset;
    param_configs(): readonly JsParamConfig<ParamType>[];
    lines(shader_name: JsFunctionName, line_type: LineType): string[];
    all_lines(): Map<JsFunctionName, Map<LineType, string[]>>;
    setParamConfigs(nodes: BaseJsNodeType[]): void;
    private _setCodeLines;
    private _addCodeLines;
    private addDefinitions;
    add_code_line_for_nodes_and_line_type(nodes: BaseJsNodeType[], shaderName: JsFunctionName, lineType: LineType): void;
    add_code_line_for_node_and_line_type(node: BaseJsNodeType, shaderName: JsFunctionName, lineType: LineType, isLast: boolean): void;
}
export {};
