diff --git a/blender/addon/armory.py b/blender/addon/armory.py index 2bd63d95..257bd9d8 100755 --- a/blender/addon/armory.py +++ b/blender/addon/armory.py @@ -136,11 +136,20 @@ def bundled_sdk_path(): # /blender.exe return bpy.app.binary_path.replace('\\', '/').rsplit('/', 1)[0] + '/armsdk/' +def get_fp(): + if bpy.data.filepath == '': + return '' + s = bpy.data.filepath.split(os.path.sep) + s.pop() + return os.path.sep.join(s) + def get_sdk_path(context): user_preferences = context.user_preferences addon_prefs = user_preferences.addons["armory"].preferences p = bundled_sdk_path() - if os.path.exists(p) and addon_prefs.sdk_bundled: + if os.path.exists(get_fp() + '/armsdk'): + return get_fp() + '/armsdk' + elif os.path.exists(p) and addon_prefs.sdk_bundled: return p else: return addon_prefs.sdk_path @@ -329,18 +338,16 @@ class ArmAddonStartButton(bpy.types.Operator): sdk_path = get_sdk_path(context) if sdk_path == "": - self.report({"ERROR"}, "Configure SDK path first") + print("Configure Armory SDK path first") return {"CANCELLED"} scripts_path = sdk_path + "/armory/blender/" sys.path.append(scripts_path) + local_sdk = os.path.exists(get_fp() + '/armsdk') import start - start.register() + start.register(local_sdk=local_sdk) ArmAddonStartButton.running = True - if not hasattr(bpy.app.handlers, 'scene_update_post'): - bpy.types.VIEW3D_HT_header.remove(draw_view3d_header) - return {"FINISHED"} class ArmAddonStopButton(bpy.types.Operator): @@ -363,7 +370,7 @@ class ArmAddonUpdateButton(bpy.types.Operator): def execute(self, context): p = get_sdk_path(context) if p == "": - self.report({"ERROR"}, "Configure SDK path first") + self.report({"ERROR"}, "Configure Armory SDK path first") return {"CANCELLED"} self.report({'INFO'}, 'Updating, check console for details. Please restart Blender after successful SDK update.') print('Armory (add-on v' + str(bl_info['version']) + '): Cloning [armory, iron, haxebullet, haxerecast, zui] repositories') @@ -396,7 +403,7 @@ class ArmAddonRestoreButton(bpy.types.Operator): def execute(self, context): p = get_sdk_path(context) if p == "": - self.report({"ERROR"}, "Configure SDK path first") + self.report({"ERROR"}, "Configure Armory SDK path first") return {"CANCELLED"} os.chdir(p) restore_repo(p, 'armory') @@ -420,15 +427,15 @@ class ArmAddonInstallGitButton(bpy.types.Operator): return {"FINISHED"} @persistent -def on_scene_update_post(scene): - if hasattr(bpy.app.handlers, 'scene_update_post'): - bpy.app.handlers.scene_update_post.remove(on_scene_update_post) +def on_load_post(context): + # Detect local armsdk + # if os.path.exists(get_fp() + '/armsdk'): + # if ArmAddonStartButton.running: + # bpy.ops.arm_addon.stop() + if ArmAddonStartButton.running: + return bpy.ops.arm_addon.start() -def draw_view3d_header(self, context): - layout = self.layout - layout.operator("arm_addon.start") - def register(): bpy.utils.register_class(ArmoryAddonPreferences) bpy.utils.register_class(ArmAddonStartButton) @@ -436,10 +443,7 @@ def register(): bpy.utils.register_class(ArmAddonUpdateButton) bpy.utils.register_class(ArmAddonRestoreButton) bpy.utils.register_class(ArmAddonInstallGitButton) - if hasattr(bpy.app.handlers, 'scene_update_post'): - bpy.app.handlers.scene_update_post.append(on_scene_update_post) - else: - bpy.types.VIEW3D_HT_header.append(draw_view3d_header) + bpy.app.handlers.load_post.append(on_load_post) def unregister(): bpy.ops.arm_addon.stop() @@ -449,6 +453,7 @@ def unregister(): bpy.utils.unregister_class(ArmAddonUpdateButton) bpy.utils.unregister_class(ArmAddonRestoreButton) bpy.utils.unregister_class(ArmAddonInstallGitButton) + bpy.app.handlers.load_post.remove(on_load_post) if __name__ == "__main__": register() diff --git a/blender/arm/handlers.py b/blender/arm/handlers.py index 03a1ff63..f35eb313 100644 --- a/blender/arm/handlers.py +++ b/blender/arm/handlers.py @@ -164,9 +164,6 @@ def register(): if hasattr(bpy.app.handlers, 'scene_update_pre'): bpy.app.handlers.scene_update_pre.append(on_scene_update_pre) bpy.app.handlers.load_post.append(on_load_post) - # On windows, on_load_post is not called when opening .blend file from explorer - if arm.utils.get_os() == 'win' and arm.utils.get_fp() != '': - on_load_post(None) reload_blend_data() def unregister(): diff --git a/blender/arm/make.py b/blender/arm/make.py index 76ab1bd1..11347eb8 100755 --- a/blender/arm/make.py +++ b/blender/arm/make.py @@ -81,8 +81,8 @@ def export_data(fp, sdk_path): if os.path.isdir(build_dir + '/compiled/Shaders'): shutil.rmtree(build_dir + '/compiled/Shaders', onerror=remove_readonly) - raw_shaders_path = sdk_path + 'armory/Shaders/' - assets_path = sdk_path + 'armory/Assets/' + raw_shaders_path = sdk_path + '/armory/Shaders/' + assets_path = sdk_path + '/armory/Assets/' export_physics = bpy.data.worlds['Arm'].arm_physics != 'Disabled' export_navigation = bpy.data.worlds['Arm'].arm_navigation != 'Disabled' export_ui = bpy.data.worlds['Arm'].arm_ui != 'Disabled' diff --git a/blender/arm/make_renderpath.py b/blender/arm/make_renderpath.py index ab7ed7c4..491239a1 100755 --- a/blender/arm/make_renderpath.py +++ b/blender/arm/make_renderpath.py @@ -133,7 +133,7 @@ def build(): arm.api.drivers[rpdat.rp_driver]['make_rpath']() return - assets_path = arm.utils.get_sdk_path() + 'armory/Assets/' + assets_path = arm.utils.get_sdk_path() + '/armory/Assets/' wrd = bpy.data.worlds['Arm'] add_world_defs() diff --git a/blender/arm/make_world.py b/blender/arm/make_world.py index e6c3a648..74d01bbf 100755 --- a/blender/arm/make_world.py +++ b/blender/arm/make_world.py @@ -214,9 +214,9 @@ def parse_color(world, node): hosek_path = 'armory/Assets/hosek/' sdk_path = arm.utils.get_sdk_path() # Use fake maps for now - assets.add(sdk_path + hosek_path + 'hosek_radiance.hdr') + assets.add(sdk_path + '/' + hosek_path + 'hosek_radiance.hdr') for i in range(0, 8): - assets.add(sdk_path + hosek_path + 'hosek_radiance_' + str(i) + '.hdr') + assets.add(sdk_path + '/' + hosek_path + 'hosek_radiance_' + str(i) + '.hdr') world.arm_envtex_name = 'hosek' world.arm_envtex_num_mips = 8 diff --git a/blender/arm/utils.py b/blender/arm/utils.py index 718ea6ed..42e240e5 100755 --- a/blender/arm/utils.py +++ b/blender/arm/utils.py @@ -102,11 +102,15 @@ def bundled_sdk_path(): # /blender.exe return bpy.app.binary_path.replace('\\', '/').rsplit('/', 1)[0] + '/armsdk/' +# Passed by load_post handler when armsdk is found in project folder +use_local_sdk = False def get_sdk_path(): user_preferences = bpy.context.user_preferences addon_prefs = user_preferences.addons["armory"].preferences p = bundled_sdk_path() - if os.path.exists(p) and addon_prefs.sdk_bundled: + if use_local_sdk: + return get_fp() + '/armsdk/' + elif os.path.exists(p) and addon_prefs.sdk_bundled: return p else: return addon_prefs.sdk_path @@ -629,8 +633,9 @@ def check_default_props(): # Take blend file name wrd.arm_project_name = arm.utils.blend_name() -def register(): +def register(local_sdk=False): global v8_found + global use_local_sdk try: engine = bpy.context.scene.render.engine bpy.context.scene.render.engine = 'ARMORY' @@ -638,6 +643,7 @@ def register(): v8_found = True except: pass + use_local_sdk = local_sdk def unregister(): pass diff --git a/blender/start.py b/blender/start.py index 816d9ce6..56589506 100755 --- a/blender/start.py +++ b/blender/start.py @@ -15,10 +15,10 @@ import arm.keymap registered = False -def register(): +def register(local_sdk=False): global registered registered = True - arm.utils.register() + arm.utils.register(local_sdk=local_sdk) arm.props_traits_params.register() arm.props_traits_props.register() arm.props_traits.register()