def write_code_for_tree(self, tree): if getattr(bpy.context.scene.logic_node_settings, 'use_node_debug', False): utils.notify("Generating code for tree {}".format(tree.name)) if tree.mode: writer = self.write_to_text(tree) else: writer = self.write_to_file(tree) self.write_init_content(tree, writer) indent = self.write_pulse_line(tree, writer) self.write_pulse_content(tree, writer, indent)
def _do_load_project_nodes(context): utils.notify("Loading project nodes and cells...") current_file = context.blend_data.filepath file_dir = os.path.dirname(current_file) netlogic_dir = os.path.join(file_dir, "bgelogic") # cells_dir = os.path.join(netlogic_dir, "cells") nodes_dir = os.path.join(netlogic_dir, "nodes") if os.path.exists(nodes_dir): bge_netlogic.remove_project_user_nodes() bge_netlogic.load_nodes_from(nodes_dir)
def _generate_on_game_start(self, context): utils.notify('Building Logic Trees on Startup...') bpy.ops.bge_netlogic.generate_logicnetwork_all()
def write_code_for_tree(self, tree): buffer_name = utils.py_module_filename_for_tree(tree) if getattr(bpy.context.scene.logic_node_settings, 'use_node_debug', False): utils.notify("Generating code for tree {}".format(tree.name)) line_writer = self.create_text_file("bgelogic/" + buffer_name) line_writer.write_line("# MACHINE GENERATED") line_writer.write_line("import bge") line_writer.write_line("import mathutils") line_writer.write_line("import bgelogic") line_writer.write_line("import math") user_modules = self.list_user_modules_needed_by_tree(tree) for module in user_modules: line_writer.write_line('{} = bgelogic.load_user_logic("{}")', module, module) line_writer.write_line("") line_writer.write_line("def _initialize(owner):") line_writer.set_indent_level(1) line_writer.write_line("network = bgelogic.LogicNetwork()") cell_var_names, uid_map = self._write_tree(tree, line_writer) for varname in self._sort_cellvarnames(cell_var_names, uid_map): if not uid_map.is_removed(varname): line_writer.write_line("network.add_cell({})", varname) line_writer.write_line('owner["{}"] = network', tree.name) line_writer.write_line("network._owner = owner") line_writer.write_line("network.setup()") line_writer.write_line( "network.stopped = not owner.get('{}')", utils.get_key_network_initial_status_for_tree(tree)) line_writer.write_line("return network") line_writer.set_indent_level(0) line_writer.write_line("") line_writer.write_line("def pulse_network(controller):") line_writer.set_indent_level(1) line_writer.write_line("owner = controller.owner") line_writer.write_line('network = owner.get("{}")', tree.name) line_writer.write_line("if network is None:") line_writer.set_indent_level(2) line_writer.write_line("network = _initialize(owner)") line_writer.set_indent_level(1) line_writer.write_line("if network.stopped: return") line_writer.write_line("shutdown = network.evaluate()") line_writer.write_line("if shutdown is True:") line_writer.set_indent_level(2) line_writer.write_line("controller.sensors[0].repeat = False") line_writer.close() #write the bgelogic.py module source in the directory of the current blender file this_module_dir = os.path.dirname(__file__) bge_netlogic_dir = os.path.dirname(this_module_dir) # try: # del sys.modules['mymodule'] # except: # print('This wont do yo') # pass # game_dir = os.path.join(bge_netlogic_dir, "game", 'windows') # bgelogic_input_file = os.path.join(game_dir, "bgelogic.pyd") # target_path = os.path.join(bpy.path.abspath("//bgelogic"), "__init__.pyd") # print(bgelogic_input_file) # print(target_path) # shutil.copyfile(bgelogic_input_file, target_path) game_dir = os.path.join(bge_netlogic_dir, "game") bgelogic_input_file = os.path.join(game_dir, "bgelogic.py") bgelogic_source_code = None with open(bgelogic_input_file, "r") as f: bgelogic_source_code = f.read() assert (bgelogic_source_code is not None) bgelogic_output_writer = self.create_text_file("bgelogic/__init__.py") bgelogic_output_writer.write_line(bgelogic_source_code) bgelogic_output_writer.close()