def on_compiled(mode): # build, play, play_viewport, publish log.clear() sdk_path = arm.utils.get_sdk_path() wrd = bpy.data.worlds['Arm'] # Print info if mode == 'publish': target_name = make_utils.get_kha_target(wrd.arm_project_target) print('Project published') files_path = arm.utils.get_fp() + '/build/' + target_name if target_name == 'html5': print('HTML5 files are located in ' + files_path) elif target_name == 'ios' or target_name == 'osx': # TODO: to macos print('XCode project files are located in ' + files_path + '-build') elif target_name == 'windows': print('VisualStudio 2015 project files are located in ' + files_path + '-build') elif target_name == 'android-native': print('Android Studio project files are located in ' + files_path + '-build/' + arm.utils.safefilename(wrd.arm_project_name)) else: print('Makefiles are located in ' + files_path + '-build') return # Launch project in new window elif mode =='play': if wrd.arm_play_runtime == 'Electron': electron_app_path = './build/electron.js' if arm.utils.get_os() == 'win': electron_path = sdk_path + 'win32/Kode Studio.exe' elif arm.utils.get_os() == 'mac': electron_path = sdk_path + 'Kode Studio.app/Contents/MacOS/Electron' else: electron_path = sdk_path + 'linux64/kodestudio' state.playproc = subprocess.Popen([electron_path, '--chromedebug', '--remote-debugging-port=9222', '--enable-logging', electron_app_path], stderr=subprocess.PIPE) watch_play() elif wrd.arm_play_runtime == 'Browser': # Start server os.chdir(arm.utils.get_fp()) t = threading.Thread(name='localserver', target=arm.lib.server.run) t.daemon = True t.start() html5_app_path = 'http://localhost:8040/build/html5' webbrowser.open(html5_app_path) elif wrd.arm_play_runtime == 'Krom': if arm.utils.get_os() == 'win': krom_location = sdk_path + '/win32/Krom/win32' krom_path = krom_location + '/Krom.exe' elif arm.utils.get_os() == 'mac': krom_location = sdk_path + '/Kode Studio.app/Contents/Krom/macos/Krom.app/Contents/MacOS' krom_path = krom_location + '/Krom' else: krom_location = sdk_path + '/linux64/Krom/linux' krom_path = krom_location + '/Krom' os.chdir(krom_location) state.playproc = subprocess.Popen([krom_path, arm.utils.get_fp() + '/build/window/krom', arm.utils.get_fp() + '/build/window/krom-resources', '--nosound'], stderr=subprocess.PIPE) watch_play()
def execute(self, context): if not arm.utils.check_saved(self): return {"CANCELLED"} if not arm.utils.check_sdkpath(self): return {"CANCELLED"} if not arm.utils.check_engine(self): return {"CANCELLED"} self.report({'INFO'}, 'Publishing project, check console for details.') arm.utils.check_projectpath(self) make_renderer.check_default() wrd = bpy.data.worlds['Arm'] item = wrd.arm_exporterlist[wrd.arm_exporterlist_index] if item.arm_project_rp == '': item.arm_project_rp = wrd.arm_rplist[wrd.arm_rplist_index].name # Assume unique rp names rplist_index = wrd.arm_rplist_index for i in range(0, len(wrd.arm_rplist)): if wrd.arm_rplist[i].name == item.arm_project_rp: wrd.arm_rplist_index = i break make.clean_project() state.target = item.arm_project_target state.is_export = True assets.invalidate_enabled = False make.build_project(is_publish=True) make.compile_project(watch=True) state.is_export = False wrd.arm_rplist_index = rplist_index assets.invalidate_enabled = True target_name = make_utils.get_kha_target(state.target) files_path = arm.utils.get_fp_build() + '/' + target_name if target_name == 'html5': print('HTML5 files are being exported to ' + files_path) elif target_name == 'ios' or target_name == 'osx': # TODO: to macos print('XCode project files are being exported to ' + files_path + '-build') elif target_name == 'windows': print('VisualStudio 2017 project files are being exported to ' + files_path + '-build') elif target_name == 'windowsapp': print('VisualStudio 2017 project files are being exported to ' + files_path + '-build') elif target_name == 'android-native': print('Android Studio project files are being exported to ' + files_path + '-build/' + arm.utils.safestr(wrd.arm_project_name)) else: print('Makefiles are being exported to ' + files_path + '-build') return {'FINISHED'}
def on_compiled(mode): # build, play, play_viewport, publish log.clear() sdk_path = arm.utils.get_sdk_path() wrd = bpy.data.worlds['Arm'] # Print info if mode == 'publish': target_name = make_utils.get_kha_target(wrd.arm_project_target) print('Project published') files_path = arm.utils.get_fp_build() + '/' + target_name if target_name == 'html5': print('HTML5 files are located in ' + files_path) elif target_name == 'ios' or target_name == 'osx': # TODO: to macos print('XCode project files are located in ' + files_path + '-build') elif target_name == 'windows': print('VisualStudio 2017 project files are located in ' + files_path + '-build') elif target_name == 'windowsapp': print('VisualStudio 2017 project files are located in ' + files_path + '-build') elif target_name == 'android-native': print('Android Studio project files are located in ' + files_path + '-build/' + arm.utils.safestr(wrd.arm_project_name)) else: print('Makefiles are located in ' + files_path + '-build') return # Launch project in new window elif mode == 'play': if wrd.arm_play_runtime == 'Browser': # Start server os.chdir(arm.utils.get_fp()) t = threading.Thread(name='localserver', target=arm.lib.server.run) t.daemon = True t.start() html5_app_path = 'http://localhost:8040/' + arm.utils.build_dir( ) + '/html5' webbrowser.open(html5_app_path) elif wrd.arm_play_runtime == 'Krom': krom_location, krom_path = arm.utils.krom_paths() os.chdir(krom_location) # os.chdir(arm.utils.get_fp_build()) args = [ krom_path, arm.utils.get_fp_build() + '/window/krom', arm.utils.get_fp_build() + '/window/krom-resources', '--nosound' ] if state.is_render: args.append('--nowindow') state.playproc = subprocess.Popen(args, stderr=subprocess.PIPE) watch_play()
def compile_project(target_name=None, watch=False, patch=False, no_project_file=False): """ :param no_project_file: Pass '--noproject' to kha make. In the future assets will be copied. """ wrd = bpy.data.worlds['Arm'] fp = arm.utils.get_fp() os.chdir(fp) # Set build command if target_name == None: target_name = state.target if target_name == 'native': target_name = '' node_path = arm.utils.get_node_path() khamake_path = arm.utils.get_khamake_path() kha_target_name = make_utils.get_kha_target(target_name) cmd = [node_path, khamake_path, kha_target_name] ffmpeg_path = arm.utils.get_ffmpeg_path() # Path to binary if ffmpeg_path != '': cmd.append('--ffmpeg') cmd.append(ffmpeg_path) # '"' + ffmpeg_path + '"' if kha_target_name == 'krom': cmd.append('-g') cmd.append('opengl') if state.in_viewport: if arm.utils.glsl_version() >= 330: cmd.append('--shaderversion') cmd.append('330') else: cmd.append('--shaderversion') cmd.append('110') else: cmd.append('-g') cmd.append(arm.utils.get_gapi()) cmd.append('--to') if kha_target_name == 'krom' and not state.in_viewport: cmd.append(arm.utils.build_dir() + '/windowed') else: cmd.append(arm.utils.build_dir()) # User defined commands if wrd.arm_khamake != '': for s in bpy.data.texts[wrd.arm_khamake].as_string().split(' '): cmd.append(s) if patch: if state.compileproc == None: cmd.append('--nohaxe') cmd.append('--noproject') # cmd.append('--noshaders') state.compileproc = subprocess.Popen(cmd, stderr=subprocess.PIPE) if state.playproc == None: if state.in_viewport: mode = 'play_viewport' else: mode = 'play' else: mode = 'build' threading.Timer(0.1, watch_patch, [mode]).start() return state.compileproc elif watch: state.compileproc = subprocess.Popen(cmd) threading.Timer(0.1, watch_compile, ['build']).start() return state.compileproc else: if no_project_file: cmd.append('--onlydata') print("Running:\n", cmd) return subprocess.Popen(cmd)
def compile_project(target_name=None, is_publish=False, watch=False, patch=False): wrd = bpy.data.worlds['Arm'] # Set build command if target_name == None: target_name = wrd.arm_project_target elif target_name == 'native': target_name = '' node_path = arm.utils.get_node_path() khamake_path = arm.utils.get_khamake_path() kha_target_name = make_utils.get_kha_target(target_name) cmd = [node_path, khamake_path, kha_target_name] ffmpeg_path = arm.utils.get_ffmpeg_path() # Path to binary if ffmpeg_path != '': cmd.append('--ffmpeg') cmd.append(ffmpeg_path) # '"' + ffmpeg_path + '"' if target_name == '' or target_name == '--run': cmd.append('-g') cmd.append(getattr(wrd, 'arm_gapi_' + arm.utils.get_os())) if kha_target_name == 'krom': if state.in_viewport: if arm.utils.glsl_version() >= 330: cmd.append('--shaderversion') cmd.append('330') else: cmd.append('--shaderversion') cmd.append('110') else: cmd.append('--to') cmd.append('build/window') # User defined commands cmd_text = wrd.arm_command_line if cmd_text != '': for s in bpy.data.texts[cmd_text].as_string().split(' '): cmd.append(s) if patch: if state.compileproc == None: # Quick build - disable krafix and haxe cmd.append('--nohaxe') cmd.append('--noshaders') cmd.append('--noproject') state.compileproc = subprocess.Popen(cmd, stderr=subprocess.PIPE) if state.playproc == None: if state.in_viewport: mode = 'play_viewport' else: mode = 'play' else: mode = 'build' threading.Timer(0.1, watch_patch, [mode]).start() return state.compileproc elif watch: state.compileproc = subprocess.Popen(cmd) threading.Timer(0.1, watch_compile, ['build']).start() return state.compileproc else: return subprocess.Popen(cmd)