@@ -231,6 +231,8 @@ def process_geo_nodes_group(node_tree, level, node_vars, used_vars):
231231 #initialize nodes
232232 file .write (f"{ inner } #initialize { node_tree_var } nodes\n " )
233233
234+ sim_inputs = []
235+
234236 for node in node_tree .nodes :
235237 if node .bl_idname == 'GeometryNodeGroup' :
236238 node_nt = node .node_tree
@@ -390,9 +392,38 @@ def process_geo_nodes_group(node_tree, level, node_vars, used_vars):
390392 if img .source in {'FILE' , 'GENERATED' , 'TILED' }:
391393 save_image (img , addon_dir )
392394 load_image (img , file , inner , f"{ node_var } .image" )
393-
394- set_input_defaults (node , file , inner , node_var , addon_dir )
395- set_output_defaults (node , file , inner , node_var )
395+ elif node .bl_idname == 'GeometryNodeSimulationInput' :
396+ sim_inputs .append (node )
397+ elif node .bl_idname == 'GeometryNodeSimulationOutput' :
398+ file .write (f"{ inner } #remove generated sim state items\n " )
399+ file .write (f"{ inner } for item in { node_var } .state_items:\n " )
400+ file .write (f"{ inner } \t { node_var } .state_items.remove(item)\n " )
401+ for i , si in enumerate (node .state_items ):
402+ socket_type = enum_to_py_str (si .socket_type )
403+ name = str_to_py_str (si .name )
404+ file .write (f"{ inner } #create SSI { name } \n " )
405+ file .write ((f"{ inner } { node_var } .state_items.new"
406+ f"({ socket_type } , { name } )\n " ))
407+ si_var = f"{ node_var } .state_items[{ i } ]"
408+ attr_domain = enum_to_py_str (si .attribute_domain )
409+ file .write ((f"{ inner } { si_var } .attribute_domain = "
410+ f"{ attr_domain } \n " ))
411+
412+ if node .bl_idname != 'GeometryNodeSimulationInput' :
413+ set_input_defaults (node , file , inner , node_var , addon_dir )
414+ set_output_defaults (node , file , inner , node_var )
415+
416+ #create simulation zones
417+ for sim_input in sim_inputs :
418+ sim_input_var = node_vars [sim_input ]
419+ sim_output_var = node_vars [sim_input .paired_output ]
420+ file .write ((f"{ inner } { sim_input_var } .pair_with_output"
421+ f"({ sim_output_var } )\n " ))
422+
423+ #must set defaults after paired with output
424+ set_input_defaults (sim_input , file , inner , sim_input_var , addon_dir )
425+ set_output_defaults (sim_input , file , inner , sim_input_var )
426+
396427 set_parents (node_tree , file , inner , node_vars )
397428 set_locations (node_tree , file , inner , node_vars )
398429 set_dimensions (node_tree , file , inner , node_vars )
0 commit comments