Esempio n. 1
0
 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)
Esempio n. 2
0
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)
Esempio n. 3
0
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()