def save_game_remove_logic(self):

        bpy.ops.wm.addon_enable(module="game_engine_save_as_runtime")
        bpy.context.screen.scene = self.main_scene
        bpy.ops.wm.save_as_runtime(
            filepath=blender_utils.get_directory('blender') +
            '/annotation scenes/' +
            bpy.path.basename(bpy.context.blend_data.filepath).replace(
                ".blend", "-" + self.suffix + ".blend"))
        directory = blender_utils.get_directory('bpy')
        blender_utils.run_bpy_script(directory, "remove_all_logic.py")
def prepare_scene():
    bpy_scripts_directory = blender_utils.get_directory('bpy')

    edits_scripts_directory = blender_utils.get_directory('edits')

    blender_utils.link_scripts(bpy_scripts_directory)

    blender_utils.link_scripts(edits_scripts_directory)

    #blender_utils.run_bpy_script(directory,"edit_physics.py")
    blender_utils.run_bpy_script(bpy_scripts_directory,
                                 "edit_rendering_and_settings.py")
    blender_utils.run_bpy_script(bpy_scripts_directory, "create_highlights.py")
    blender_utils.run_bpy_script(bpy_scripts_directory, "remove_all_logic.py")
    def add_logic(self):
        rigid_body_list = blender_utils.create_list_rigid_bodies()
        ### Start by clearing all logic from scene
        directory = blender_utils.get_directory('bpy')
        blender_utils.run_bpy_script(directory, "remove_all_logic.py")
        ### Start by deselecting all objects
        bpy.ops.object.select_all(action='DESELECT')

        self.add_general_logic(rigid_body_list)
        self.add_main_empty_logic()
        self.add_camera_navigation_logic()
    def add_general_logic(self, object_list):
        ### Link scripts
        bge_scripts_directory = blender_utils.get_directory('bge')

        bgui_scripts_directory = blender_utils.get_directory('bgui')

        blender_utils.link_scripts(bge_scripts_directory)

        blender_utils.link_scripts(bgui_scripts_directory)

        bpy_scripts_directory = blender_utils.get_directory('bpy')

        edits_scripts_directory = blender_utils.get_directory('edits')

        blender_utils.link_scripts(bpy_scripts_directory)

        blender_utils.link_scripts(edits_scripts_directory)

        ###### EMPTY

        ### Add empty object if there isn't one
        bpy.context.screen.scene = self.main_scene
        if "Empty" not in self.main_scene.objects:
            bpy.ops.object.empty_add(
                type='PLAIN_AXES',
                view_align=False,
                location=(0, 0, 0),
                layers=(True, False, False, False, False, False, False, False,
                        False, False, False, False, False, False, False, False,
                        False, False, False, False))
            bpy.context.active_object.name = "Empty"
            print(
                "Empty object was missing from main scene and has been added")
        ### Select empty object
        empty = self.main_scene.objects["Empty"]

        empty.select = True

        bpy.context.scene.objects.active = empty
        ### Clear empty game properties
        while len(empty.game.properties) != 0:
            bpy.ops.object.game_property_remove(index=0)

        ### Add game properties
        bpy.ops.object.game_property_new(
            type="BOOL",
            name=self.name)  # This should be added in the first position

        bpy.ops.object.game_property_new(
            type="BOOL", name=self.suffix
        )  #This allows the game to know which task we are doing.

        bpy.ops.object.game_property_new(type="TIMER", name='game_time')

        bpy.ops.object.game_property_new(type="BOOL",
                                         name=bpy.path.basename(
                                             bpy.context.blend_data.filepath))

        # Add general sensors
        bpy.ops.logic.sensor_add(type="ALWAYS",
                                 name="Always",
                                 object=empty.name)
        empty.game.sensors["Always"].use_pulse_true_level = True

        bpy.ops.logic.sensor_add(type="ALWAYS",
                                 name="AlwaysStartup",
                                 object=empty.name)
        # bpy.ops.logic.sensor_add(type="MESSAGE",name="start",object=obj.name)

        bpy.ops.logic.sensor_add(type="MESSAGE",
                                 name="deselect",
                                 object=empty.name)
        empty.game.sensors["deselect"].subject = "deselect"

        bpy.ops.logic.sensor_add(type="MESSAGE",
                                 name="change",
                                 object=empty.name)
        empty.game.sensors["change"].subject = "change"

        bpy.ops.logic.sensor_add(type="MESSAGE",
                                 name="changepreposition",
                                 object=empty.name)
        empty.game.sensors["changepreposition"].subject = "changepreposition"

        bpy.ops.logic.sensor_add(type="KEYBOARD",
                                 name="textinputkeyboard",
                                 object=empty.name)
        empty.game.sensors["textinputkeyboard"].use_all_keys = True

        bpy.ops.logic.sensor_add(type="MOUSE",
                                 name="leftClick",
                                 object=empty.name)
        empty.game.sensors["leftClick"].use_tap = True
        empty.game.sensors["leftClick"].mouse_event = "LEFTCLICK"

        bpy.ops.logic.sensor_add(type="MOUSE",
                                 name="rightClick",
                                 object=empty.name)
        empty.game.sensors["rightClick"].use_tap = True
        empty.game.sensors["rightClick"].mouse_event = "RIGHTCLICK"

        bpy.ops.logic.sensor_add(type="MOUSE",
                                 name="hoverAny",
                                 object=empty.name)
        empty.game.sensors["hoverAny"].mouse_event = "MOUSEOVERANY"

        bpy.ops.logic.controller_add(type="PYTHON",
                                     name="ObjectController",
                                     object=empty.name)

        empty.game.sensors["leftClick"].link(
            empty.game.controllers["ObjectController"])
        empty.game.sensors["rightClick"].link(
            empty.game.controllers["ObjectController"])
        empty.game.sensors["hoverAny"].link(
            empty.game.controllers["ObjectController"])
        empty.game.sensors["deselect"].link(
            empty.game.controllers["ObjectController"])

        empty.game.controllers["ObjectController"].text = bpy.data.texts[
            "object_controller.py"]

        bpy.ops.logic.controller_add(type="PYTHON",
                                     name="startUp",
                                     object=empty.name)
        empty.game.controllers["startUp"].text = bpy.data.texts[
            "on-startup.py"]
        empty.game.controllers["startUp"].use_priority = True
        empty.game.sensors["AlwaysStartup"].link(
            empty.game.controllers["startUp"])

        bpy.ops.logic.controller_add(type="PYTHON",
                                     name="textui",
                                     object=empty.name)
        empty.game.controllers["textui"].text = bpy.data.texts[
            "textui_and_output.py"]
        empty.game.sensors["Always"].link(empty.game.controllers["textui"])
        empty.game.sensors["deselect"].link(empty.game.controllers["textui"])
        empty.game.sensors["textinputkeyboard"].link(
            empty.game.controllers["textui"])
        empty.game.sensors["changepreposition"].link(
            empty.game.controllers["textui"])

        bpy.ops.logic.actuator_add(type="GAME",
                                   name="END_GAME",
                                   object=empty.name)
        empty.game.actuators['END_GAME'].mode = 'QUIT'
        empty.game.actuators['END_GAME'].link(empty.game.controllers['textui'])

        ### OBJECTS

        for obj in object_list:
            bpy.ops.object.select_all(action='DESELECT')
            obj.select = True

            bpy.context.scene.objects.active = obj

            while len(obj.game.properties) != 0:
                bpy.ops.object.game_property_remove(index=0)
            if "used" not in obj.game.properties:

                bpy.ops.object.game_property_new(type="BOOL",
                                                 name="selectedfigure")

                bpy.ops.object.game_property_new(type="BOOL",
                                                 name="selectedground")

                bpy.ops.object.game_property_new(type="BOOL", name="highlight")

                bpy.ops.object.game_property_new(type="BOOL", name="used")