@@ -105,11 +105,11 @@ func find_instance_functions(code : String):
105105 for r in result :
106106 if not r .strings [1 ] in [ "return" ]:
107107 functions .push_back (r .strings [2 ]);
108- code = code .replace (r .strings [0 ], "%s %s (%s , float _seed_variation_) {" % [ r .strings [1 ], r .strings [2 ], r .strings [3 ] ])
108+ code = code .replace (r .strings [0 ], "%s %s (%s , float _seed_variation_, vec4 _controlled_variation_ ) {" % [ r .strings [1 ], r .strings [2 ], r .strings [3 ] ])
109109 return { code = code , functions = functions }
110110
111111func fix_instance_functions (code : String , instance_functions : Array ):
112- var variation_parameter = ", _seed_variation_"
112+ var variation_parameter = ", _seed_variation_, _controlled_variation_ "
113113 var variation_parameter_length = variation_parameter .length ()
114114 for f in instance_functions :
115115 var location : int = 0
@@ -411,7 +411,7 @@ func find_keyword_call(string : String, keyword : String):
411411 print (string )
412412 return "#error"
413413
414- func replace_input_with_function_call (string : String , input : String , seed_parameter : String = ", _seed_variation_" , input_suffix : String = "" ) -> String :
414+ func replace_input_with_function_call (string : String , input : String , seed_parameter : String = ", _seed_variation_, _controlled_variation_ " , input_suffix : String = "" ) -> String :
415415 var genname = "o" + str (get_instance_id ())
416416 while true :
417417 var uv : String = find_keyword_call (string , input + input_suffix )
@@ -424,8 +424,10 @@ func replace_input_with_function_call(string : String, input : String, seed_para
424424 string = string .replace ("$%s (%s )" % [ input + input_suffix , uv ], "%s _input_%s (%s%s )" % [ genname , input , uv , seed_parameter ])
425425 return string
426426
427+ const WORD_LETTERS : String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_?"
428+
427429func is_word_letter (l ) -> bool :
428- return "azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN1234567890_" .find (l ) != - 1
430+ return WORD_LETTERS .find (l ) != - 1
429431
430432func replace_rnd (string : String , offset : int = 0 ) -> String :
431433 while true :
@@ -455,8 +457,6 @@ func replace_rndi(string : String, offset : int = 0) -> String:
455457 string = string .replace (replace , with )
456458 return string
457459
458- const WORD_LETTERS : String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
459-
460460func generate_parameter_declarations (rv : ShaderCode ) -> void :
461461 var genname = "o" + str (get_instance_id ())
462462 if has_randomness ():
@@ -493,7 +493,7 @@ func generate_input_function(index : int, input: Dictionary, rv : ShaderCode, co
493493 rv .add_uniforms (source_rv .uniforms )
494494 rv .defs += source_rv .defs
495495 rv .add_globals (source_rv .globals )
496- rv .defs += "%s %s _input_%s (%s , float _seed_variation_) {\n " % [ mm_io_types .types [input .type ].type , genname , input .name , mm_io_types .types [input .type ].paramdefs ]
496+ rv .defs += "%s %s _input_%s (%s , float _seed_variation_, vec4 _controlled_variation_ ) {\n " % [ mm_io_types .types [input .type ].type , genname , input .name , mm_io_types .types [input .type ].paramdefs ]
497497 rv .defs += "%s \n " % source_rv .code
498498 rv .defs += "return %s ;\n }\n " % source_rv .output_values [input .type ]
499499
@@ -611,9 +611,16 @@ func replace_input(input_name : String, suffix : String, parameters : String, va
611611 if input_def .has ("function" ) and input_def .function :
612612 var function_name : String = "o%s _input_%s " % [ str (get_instance_id ()), input_def .name ]
613613 if suffix == "variation" :
614- return function_name + parameters
614+ var parameter_list : Array [String ] = split_parameters (parameters )
615+ var parameters_suffix : String = ")"
616+ match parameter_list .size ():
617+ 1 :
618+ parameters_suffix = ", _seed_variation_, _controlled_variation_)"
619+ 2 :
620+ parameters_suffix = ", _controlled_variation_)"
621+ return function_name + "(" + ", " .join (split_parameters (parameters ))+ parameters_suffix
615622 else :
616- return function_name + "(" + parameters + ", _seed_variation_)"
623+ return function_name + "(" + parameters + ", _seed_variation_, _controlled_variation_ )"
617624 var source_rv : ShaderCode = source .generator .get_shader_code (parameters , source .output_index , context )
618625 rv .add_uniforms (source_rv .uniforms )
619626 rv .defs += source_rv .defs
@@ -709,6 +716,10 @@ func get_common_replace_variables(uv : String, rv : ShaderCode) -> Dictionary:
709716 variables ["seed" ] = "seed_" + genname
710717 else :
711718 variables ["seed" ] = "(seed_" + genname + "+fract(_seed_variation_))"
719+ variables ["?1" ] = "_controlled_variation_.x"
720+ variables ["?2" ] = "_controlled_variation_.y"
721+ variables ["?3" ] = "_controlled_variation_.z"
722+ variables ["?4" ] = "_controlled_variation_.w"
712723 variables ["node_id" ] = str (get_instance_id ())
713724 return variables
714725
0 commit comments