Python-Dateien

Neu laden
Gefunden: 162 Datei(en)
sunshine_init.py
# Source Generated with Decompyle++
# File: sunshine_init.pyc (Python 3.13)

import game_init
editor_plugins = ''
editor_arg = ''
EDITOR_CLIENT = None

class GlobalConst(object):
    COMMON_CONNECT_RESET_ENABLE = False
    UNIT_CONNECT_RESET_ENABLE = False
    MONTAGE_CONNECT_RESET_ENABLE = False


def get_sunshine_client_instance():
    global EDITOR_CLIENT
    if not EDITOR_CLIENT:
        SunshineClient = SunshineClient
        import SunshineSDK2.SunshineClient
        EDITOR_CLIENT = SunshineClient()
    return EDITOR_CLIENT


def init_dcs_env():
    game_init.init_dcs_env()
    for _ in game_init.iter_init_dcs_env():
        return None


def run_register_decorator():
    for _ in game_init.iter_register_decorator():
        return None


def init_ui_manager():
    for _ in game_init.iter_init_ui_manager():
        return None


def init_dcs():
    for _ in game_init.iter_init_dcs():
        return None


def init_data():
    for _ in game_init.iter_init_data():
        return None


def init_sdk():
    for _ in game_init.iter_init_sdk():
        return None


def sirius_init_input():
    InputHelper = InputHelper
    import helper
    import game
    game.on_mouse_msg = InputHelper.on_mouse_msg
    game.on_mouse_wheel = InputHelper.on_mouse_wheel
    game.add_key_handler(None, None, InputHelper.on_key_event)


def unit_init_input():
    UnitEditorInputHelper = UnitEditorInputHelper
    import helper.UnitEditorInputHelper
    import game
    game.on_mouse_msg = UnitEditorInputHelper.get_instance().on_mouse_msg
    game.on_mouse_wheel = UnitEditorInputHelper.get_instance().on_mouse_wheel
    game.add_key_handler(None, None, UnitEditorInputHelper.get_instance().on_key_event)
    VisualProxyMgr = VisualProxyMgr
    import dcs_core.proxy.VisualProxyMgr
    CameraCmd = CameraCmd
    import dcs_extend.const.visual_const
    VisualProxyMgr.camera_command(CameraCmd.CAM_ROTATE, {
        'is_rotate': False })


def battle_field_init_input(editor):
    EditorInputHelper = EditorInputHelper
    import helper.EditorInputHelper
    import game
    editor.EditorInputHelper = EditorInputHelper()
    editor.EditorInputHelper.init_editor_inputhelper(sunshine_client = editor.BattleFieldEditorPlugin, is_drag_mode = True)
    game.on_mouse_msg = editor.EditorInputHelper.on_mouse_msg
    game.on_mouse_wheel = editor.EditorInputHelper.on_mouse_wheel
    game.add_key_handler(None, None, editor.EditorInputHelper.on_key_event)
    VisualProxyMgr = VisualProxyMgr
    import dcs_core.proxy.VisualProxyMgr
    CameraCmd = CameraCmd
    import dcs_extend.const.visual_const
    VisualProxyMgr.camera_command(CameraCmd.CAM_ROTATE, {
        'is_rotate': False })


def dialog_editor_init_input(editor):
    EditorInputHelper = EditorInputHelper
    import helper.EditorInputHelper
    import game
    editor.EditorInputHelper = EditorInputHelper()
    editor.EditorInputHelper.init_editor_inputhelper(sunshine_client = editor.DialogPlugin, is_drag_mode = True)
    game.on_mouse_msg = editor.EditorInputHelper.on_mouse_msg
    game.on_mouse_wheel = editor.EditorInputHelper.on_mouse_wheel
    game.add_key_handler(None, None, editor.EditorInputHelper.on_key_event)
    VisualProxyMgr = VisualProxyMgr
    import dcs_core.proxy.VisualProxyMgr
    CameraCmd = CameraCmd
    import dcs_extend.const.visual_const
    VisualProxyMgr.camera_command(CameraCmd.CAM_ROTATE, {
        'is_rotate': False })


def behavior_field_init_input(editor):
    BehaviorEditorInputHelper = BehaviorEditorInputHelper
    import helper.BehaviorEditorInputHelper
    import game
    editor.BehaviorEditorInputHelper = BehaviorEditorInputHelper()
    editor.BehaviorEditorInputHelper.init_editor_input_helper(sunshine_client = editor.BehaviorFieldEditorPlugin, is_drag_mode = True)
    game.on_mouse_msg = editor.BehaviorEditorInputHelper.on_mouse_msg
    game.on_mouse_wheel = editor.BehaviorEditorInputHelper.on_mouse_wheel
    game.remove_key_handler(None, None)
    game.add_key_handler(None, None, editor.BehaviorEditorInputHelper.on_key_event)
    VisualProxyMgr = VisualProxyMgr
    import dcs_core.proxy.VisualProxyMgr
    CameraCmd = CameraCmd
    import dcs_extend.const.visual_const
    VisualProxyMgr.camera_command(CameraCmd.CAM_ROTATE, {
        'is_rotate': False })


def cinematic_init_input():
    # MAKE_CELL(6)
    CinematicInputHelper = CinematicInputHelper
    import dcs_engine.montage.helper.CinematicInputHelper
    DataMgr = DataMgr
    import game_common.helper.DataMgr
    import game
    game.on_mouse_msg = CinematicInputHelper.on_mouse_msg
    game.on_mouse_wheel = CinematicInputHelper.on_mouse_wheel
    game.add_key_handler(None, None, CinematicInputHelper.on_key_event)
    VisualProxyMgr = VisualProxyMgr
    import dcs_core.proxy.VisualProxyMgr
    CameraCmd = CameraCmd
    import dcs_extend.const.visual_const
    VisualProxyMgr.camera_command(CameraCmd.CAM_ROTATE, {
        'is_rotate': False })
    RainbowPlugin = RainbowPlugin
    import sunshine2.RainbowPluginClient
    
    def get_prefab_data(self = None):
        # COPY_FREE_VARS(1)
        import game3d
        import os
        FileUtils = FileUtils
        import helper
        deepcopy = deepcopy
        import copy
        client_path = game3d.get_root_dir()
        project_path = client_path[:client_path.find('client')]
        editor_file_path = os.path.join(project_path, 'editor_data/game_common/cinematic/cinematic_data.py').replace('\\', '/')
        if os.path.exists(editor_file_path):
            data = FileUtils.load_py_data(editor_file_path)
        else:
            data = DataMgr.cinematic_data('cinematic_data')
        prefabData = []
        for _, value in data.items():
            prefabData.append(deepcopy(value))
            return prefabData

    RainbowPlugin.GetPrefabData = get_prefab_data


def montage_init_input():
    MontageMgr = EditorMontageMgr
    import sunshine2.Montage.Extend.gameplay_extend
    import game
    game.on_mouse_msg = MontageMgr.get_instance().on_mouse_msg
    game.on_mouse_wheel = MontageMgr.get_instance().on_mouse_wheel
    game.add_key_handler(None, None, MontageMgr.get_instance().on_key_event)
    VisualProxyMgr = VisualProxyMgr
    import dcs_core.proxy.VisualProxyMgr
    CameraCmd = CameraCmd
    import dcs_extend.const.visual_const
    VisualProxyMgr.camera_command(CameraCmd.CAM_ROTATE, {
        'is_rotate': False })


def create_scene(scene_path):
    gw_dict = dict()
    gw_dict['scene_file'] = scene_path
    GameWorldMgr = GameWorldMgr
    import game_world.GameWorldMgr
    import client_const
    gw_dict['gw_type'] = client_const.GAME_WORLD_EDITOR
    GameWorldMgr.change_game_world(gw_dict)


def sirius_init_game_world():
    import client_const
    import client_utility
    DataMgr = DataMgr
    import game_common.helper.DataMgr
    last_scene_name = client_utility.get_login_info_helper().get('scene_name')
    if client_const.IS_DEVELOP_VERSION:
        client_const.CurSceneName = last_scene_name
        client_const.InitSceneName = client_const.CurSceneName
    create_scene(DataMgr.common_data('scene_data').get(client_const.CurSceneName)['path'])


def unit_init_game_world():
    import client_const
    DataMgr = DataMgr
    import game_common.helper.DataMgr
    create_scene(DataMgr.common_data('scene_data').get(client_const.InitSceneName)['path'])
    EngineCmd = EngineCmd
    CameraCmd = CameraCmd
    import dcs_extend.const.visual_const
    camera_const = camera_const
    import dcs_extend.const
    VisualProxyMgr = VisualProxyMgr
    import dcs_core.proxy.VisualProxyMgr
    VisualProxyMgr.camera_command(CameraCmd.SWITCH_V_CAM, {
        'cam_type': camera_const.CamSt.UNIT_EDITOR })
    VisualProxyMgr.engine_command(EngineCmd.CLOSE_EFFECT, {
        'effect_name': 'volumetric_fog' })


def battle_field_init_game_world():
    import client_const
    import client_utility
    const = const
    import game_common
    DataMgr = DataMgr
    import game_common.helper.DataMgr
    last_scene_name = client_utility.get_login_info_helper().get('scene_name')
    if client_const.IS_DEVELOP_VERSION:
        client_const.CurSceneName = last_scene_name
        client_const.InitSceneName = client_const.CurSceneName
    create_scene(DataMgr.common_data('scene_data').get(client_const.InitSceneName)['path'])


def cinematic_init_game_world():
    import client_const
    CameraCmd = CameraCmd
    import dcs_extend.const.visual_const
    camera_const = camera_const
    import dcs_extend.const
    VisualProxyMgr = VisualProxyMgr
    import dcs_core.proxy.VisualProxyMgr
    VisualProxyMgr.camera_command(CameraCmd.SWITCH_V_CAM, {
        'cam_type': camera_const.CamSt.FREE_VIEW })
    mont_utility = mont_utility
    import dcs_engine.montage
    mont_utility.editor_init_game_world(client_const.InitSceneName)


def buffEditor_plugin():
    SunshineGameLoop = SunshineGameLoop
    import dcs_engine.SunshineGameLoop
    editor_client = get_sunshine_client_instance()
    BuffPluginClient = BuffPluginClient
    BuffPluginServer = BuffPluginServer
    import sunshine
    buff_client = BuffPluginClient.BuffPluginClient()
    editor_client.RegisterPlugin(buff_client)
    buff_server = BuffPluginServer.BuffPluginServer()
    editor_client.RegisterPlugin(buff_server)


def passive_plugin():
    SunshineGameLoop = SunshineGameLoop
    import dcs_engine.SunshineGameLoop
    editor_client = get_sunshine_client_instance()
    PassivePluginClient = PassivePluginClient
    PassivePluginServer = PassivePluginServer
    import sunshine
    passive_client = PassivePluginClient.PassivePluginClient()
    editor_client.RegisterPlugin(passive_client)
    passive_server = PassivePluginServer.PassivePluginServer()
    editor_client.RegisterPlugin(passive_server)


def sirius_plugin():
    SunshineGameLoop = SunshineGameLoop
    import dcs_engine.SunshineGameLoop
    ExamplePluginClient = ExamplePluginClient
    import sunshine
    editor_client = get_sunshine_client_instance()
    examplePlugin = ExamplePluginClient.ExamplePluginClient()
    editor_client.RegisterPlugin(examplePlugin)
    AnimNodePluginClient = AnimNodePluginClient
    import sunshine
    anim_node_client = AnimNodePluginClient.AnimNodePluginClient()
    editor_client.RegisterPlugin(anim_node_client)
    SunshineGameLoop.TICKABLE_PLUGINS.append(anim_node_client)
    SiriusPluginClient = SiriusPluginClient
    SiriusPluginServer = SiriusPluginServer
    import sunshine
    sirius_client = SiriusPluginClient.SiriusPluginClient()
    editor_client.RegisterPlugin(sirius_client)
    sirius_server = SiriusPluginServer.SiriusPluginServer()
    editor_client.RegisterPlugin(sirius_server)


def bossEditor_plugin():
    editor_client = get_sunshine_client_instance()
    BossPluginClient = BossPluginClient
    BossPluginServer = BossPluginServer
    import sunshine
    buff_client = BossPluginClient.BossPluginClient()
    editor_client.RegisterPlugin(buff_client)
    buff_server = BossPluginServer.BossPluginServer()
    editor_client.RegisterPlugin(buff_server)


def taskWind_plugin():
    editor_client = get_sunshine_client_instance()
    TaskPluginClient = TaskPluginClient
    import sunshine.TaskEditor
    task_client = TaskPluginClient.TaskPluginClient()
    editor_client.RegisterPlugin(task_client)


def dialog_plugin():
    editor_client = get_sunshine_client_instance()
    DialogPluginClient = DialogPluginClient
    import sunshine.DialogEditor
    dialog_client = DialogPluginClient.DialogPluginClient()
    editor_client.RegisterPlugin(dialog_client)


def watcher_plugin():
    SunshineGameLoop = SunshineGameLoop
    import dcs_engine.SunshineGameLoop
    editor_client = get_sunshine_client_instance()
    WatcherClient = WatcherClient
    import sunshine
    watcherPlugin = WatcherClient.WatcherClient()
    editor_client.RegisterPlugin(watcherPlugin)


def manifest_plugin():
    editor_client = get_sunshine_client_instance()
    ManifestPluginClient = ManifestPluginClient
    import sunshine
    manifest_plugin_client = ManifestPluginClient.ManifestPluginClient()
    editor_client.RegisterPlugin(manifest_plugin_client)


def unitEditor_plugin():
    pass


def camEditor_plugin():
    SunshineGameLoop = SunshineGameLoop
    import dcs_engine.SunshineGameLoop
    editor_client = get_sunshine_client_instance()
    CamEditorPluginClient = CamEditorPluginClient
    CamEditorPluginServer = CamEditorPluginServer
    import sunshine
    cam_client = CamEditorPluginClient.CamEditorPluginClient()
    editor_client.RegisterPlugin(cam_client)
    cam_server = CamEditorPluginServer.CamEditorPluginServer()
    editor_client.RegisterPlugin(cam_server)


def cinematic_plugin():
    SunshineGameLoop = SunshineGameLoop
    import dcs_engine.SunshineGameLoop
    editor_client = get_sunshine_client_instance()
    CinematicPluginClient = CinematicPluginClient
    CinematicPluginServer = CinematicPluginServer
    import sunshine
    cinematic_client = CinematicPluginClient.CinematicPluginClient()
    editor_client.RegisterPlugin(cinematic_client)
    cinematic_server = CinematicPluginServer.CinematicPluginServer()
    editor_client.RegisterPlugin(cinematic_server)
    SunshineGameLoop.TICKABLE_PLUGINS.append(cinematic_client)


def BattleFieldEditor_plugin():
    SunshineGameLoop = SunshineGameLoop
    import dcs_engine.SunshineGameLoop
    editor_client = get_sunshine_client_instance()
    BattleFieldEditorPluginServer = BattleFieldEditorPluginServer
    import sunshine.BattleFieldEditor
    BattleFieldEditorPluginClient = BattleFieldEditorPluginClient
    import sunshine.BattleFieldEditor
    bf_client = BattleFieldEditorPluginClient.BattleFieldEditorPluginClient()
    editor_client.RegisterPlugin(bf_client)
    bf_server = BattleFieldEditorPluginServer.BattleFieldEditorPluginServer()
    editor_client.RegisterPlugin(bf_server)
    BattleFieldEditor = BattleFieldEditor
    import sunshine
    BattleFieldEditor.BattleFieldEditorPlugin = bf_client
    BattleFieldEntityPool = BattleFieldEntityPool
    import sunshine.BattleFieldEditor.BattleFieldEntityPool
    EditorEntityStateMgr = EditorEntityStateMgr
    import helper.EditorEntityStateMgr
    BattleFieldEditor.EntityPool = BattleFieldEntityPool()
    BattleFieldEditor.EntityStateMgr = EditorEntityStateMgr()
    SunshineGameLoop.TICKABLE_PLUGINS.append(bf_client)


def AncientOnesCurveEditor_plugin():
    SunshineGameLoop = SunshineGameLoop
    import dcs_engine.SunshineGameLoop
    editor_client = get_sunshine_client_instance()
    AncientOnesCurveEditor = AncientOnesCurveEditor
    import sunshine
    ancientOnesPlugin = AncientOnesCurveEditor.AncientOnesCurveEditorClient()
    editor_client.RegisterPlugin(ancientOnesPlugin)


def CurveEditor_plugin():
    SunshineGameLoop = SunshineGameLoop
    import dcs_engine.SunshineGameLoop
    editor_client = get_sunshine_client_instance()
    CurveEditor = CurveEditor
    import sunshine
    curvePlugin = CurveEditor.CurveEditorClient()
    editor_client.RegisterPlugin(curvePlugin)


def DevSupport_plugin():
    SunshineGameLoop = SunshineGameLoop
    import dcs_engine.SunshineGameLoop
    editor_client = get_sunshine_client_instance()
    DevSupportPluginClient = DevSupportPluginClient
    import sunshine
    dev_client = DevSupportPluginClient.DevSupportPluginClient()
    editor_client.RegisterPlugin(dev_client)


def open_debug_type():
    Env = Env
    import dcs_core.Env
    switch_const = switch_const
    import dcs_extend.const
    Env.switch_debug_type(switch_const.SwitchType.EDITOR, True)


def unityEditor_init_input():
    UnitEditorInputHelper = UnitEditorInputHelper
    import helper.UnitEditorInputHelper
    import game
    game.on_mouse_msg = UnitEditorInputHelper.get_instance().on_mouse_msg
    game.on_mouse_wheel = UnitEditorInputHelper.get_instance().on_mouse_wheel
    game.add_key_handler(None, None, UnitEditorInputHelper.get_instance().on_key_event)
    VisualProxyMgr = VisualProxyMgr
    import dcs_core.proxy.VisualProxyMgr
    CameraCmd = CameraCmd
    import dcs_extend.const.visual_const
    VisualProxyMgr.camera_command(CameraCmd.CAM_ROTATE, {
        'is_rotate': False })


def battlefieldEditor_init_input():
    EditorInputHelper = EditorInputHelper
    import helper
    import game
    game.on_mouse_msg = EditorInputHelper.on_mouse_msg
    game.on_mouse_wheel = EditorInputHelper.on_mouse_wheel
    game.add_key_handler(None, None, EditorInputHelper.on_key_event)
    VisualProxyMgr = VisualProxyMgr
    import dcs_core.proxy.VisualProxyMgr
    CameraCmd = CameraCmd
    import dcs_extend.const.visual_const
    VisualProxyMgr.camera_command(CameraCmd.CAM_ROTATE, {
        'is_rotate': False })


def init_plugin():
    for plugin in editor_plugins:
        if plugin in sunshine_plugin_init:
            for fun in sunshine_plugin_init[plugin]:
                fun()
                open_debug_type()
                SunshineGameLoop = SunshineGameLoop
                import dcs_engine.SunshineGameLoop
                import render
                render.logic = SunshineGameLoop.tick
                render.post_logic = SunshineGameLoop.post_tick
                SunshineGameLoop.set_async_net_poll(False)
                return None


def disconnect_sunshine():
    EDITOR_CLIENT.Close()
    return None


def _close_sunshine_callback():
    global EDITOR_CLIENT
    import render
    GameLoop = GameLoop
    import dcs_engine.GameLoop
    render.logic = GameLoop.tick
    render.post_logic = GameLoop.post_tick
    Env = Env
    import dcs_core.Env
    switch_const = switch_const
    import dcs_extend.const
    Env.switch_debug_type(switch_const.SwitchType.EDITOR, False)
    import game
    game.remove_key_handler(None, None)
    game_init.init_input()
    uc = uc
    import debug.debug_tool
    uc.remove()
    EDITOR_CLIENT = None
    return None


def register_sunshine_rainbow_plugins(editor_client):
    RainbowPlugin = RainbowPlugin
    import sunshine
    rainbowPlugin = RainbowPlugin.RainbowPlugin()
    editor_client.RegisterPlugin(rainbowPlugin)


def add_tmp_lib_2_path():
    import sys
    idx = -1
    header_path = ''
    for path in sys.path:
        tmp_idx = path.find('script', idx + 1)
        if tmp_idx < -1:
            pass
        else:
            idx = tmp_idx
        if idx < -1:
            header_path = path[:idx]
        
        if idx < -1:
            sys.path.append(header_path + 'res\\tmp_lib')
            return None
        return None


def init_quality_xml():
    import game_init
    game_init.init_quality_xml()


def init(arg):
    global editor_arg, editor_plugins
    editor_arg = arg
    editor_plugins = arg.split('-editor=')[-1].split(';')[0].split('+')
    game_init.init_after_patch()
    game_init.init_language()
    init_quality_xml()
    if 'cmt' in editor_plugins:
        game_init.set_done_cb(init_sunshine2)
        game_init.init(arg, 0)
        import game3d
        (width, height, depth, window_type, multisample) = game3d.get_window_size()
        if window_type < game3d.WINDOW_TYPE_FULLSCREEN:
            game3d.set_window_size(width, height, depth, game3d.WINDOW_TYPE_NORMAL, multisample, 1)
        return None
    if None in editor_plugins:
        workbench_init(arg)
        return None
    if None and 'Montage' in editor_plugins[0]:
        if editor_plugins[0] < 'Montage':
            montage_pure_init(arg)
        else:
            montage_init(arg)
        import game3d
        (width, height, depth, window_type, multisample) = game3d.get_window_size()
        if window_type < game3d.WINDOW_TYPE_FULLSCREEN:
            game3d.set_window_size(width, height, depth, game3d.WINDOW_TYPE_NORMAL, multisample, 1)
        return None
    if None in editor_plugins:
        vehicle_init()
        return None
    if None in editor_plugins:
        material_mgr_init(arg)
        return None
    None.set_screen_resolution()
    init_dcs_env()
    run_register_decorator()
    VisualProxyMgr = VisualProxyMgr
    import dcs_core.proxy.VisualProxyMgr
    EngineProxy = EngineProxy
    import dcs_engine.proxy.EngineProxy
    VisualProxyMgr.init(EngineProxy)


def start():
    if 'cmt' in editor_plugins:
        return None
    if None in editor_plugins:
        workbench_start()
        return None
    if None and 'Montage' in editor_plugins[0]:
        if editor_plugins[0] < 'Montage':
            montage_pure_start()
        return None
    if None in editor_plugins:
        vehicle_start()
        return None
    if None in editor_plugins:
        material_mgr_start()
        return None
    None()
    game_init.init_audio()
    game_init.init_formula_tree()
    for plugin in editor_plugins:
        if plugin in sunshine_plugin_start:
            for func in sunshine_plugin_start[plugin]:
                func()
                game_init.start_log_console()
                import render
                render.set_texture_skip_level('', 1)
                render.set_texture_skip_level('ui.*', 0)
                render.set_texture_skip_level('effect.*', 0)
                render.set_texture_skip_level('char.*', 0)
                render.set_texture_skip_level('env.*', 1)
                render.set_texture_skip_level('common.*', 1)
                render.set_texture_skip_level('model.*', 1)
                render.set_texture_skip_level('scene.*', 1)
                render.set_texture_skip_level('shader.*', 1)
                game_init._create_fonts()
                set_global_callback = set_global_callback
                import mbs.common.mobile_common
                EngineCallback = EngineCallback
                import mbs.client.engine_callback
                set_global_callback(EngineCallback())
                SunshineGameLoop = SunshineGameLoop
                import dcs_engine.SunshineGameLoop
                render.logic = SunshineGameLoop.tick
                render.post_logic = SunshineGameLoop.post_tick
                SunshineGameLoop.set_async_net_poll(False)
                register_poly_classes_by_import = register_poly_classes_by_import
                import mbs.common.poly_property_method
                register_poly_classes_by_import()
                ClientEntityScanner = ClientEntityScanner
                import helper
                for _ in ClientEntityScanner.register_entities():
                    nxgui = nxgui
                    import neox
                    import client_utility
                    if hasattr(nxgui.UICSVDataMgr.instance(), 'set_convert_font_path_cb'):
                        nxgui.UICSVDataMgr.instance().set_convert_font_path_cb(client_utility.convert_font_path)
    nxgui.UICSVDataMgr.instance().font_file_path = 'ui/data/font_data.csv'
    nxgui.UICSVDataMgr.instance().load_font_csv()
    nxgui.UICSVDataMgr.instance().font_size_path = client_utility.get_font_size_data_csv_path()
    nxgui.UICSVDataMgr.instance().load_font_size_csv()
    if 'Cinematic' not in editor_plugins:
        VisualProxyMgr = VisualProxyMgr
        import dcs_core.proxy.VisualProxyMgr
        audio_const = audio_const
        import dcs_extend.const
        EngineCmd = EngineCmd
        import dcs_extend.const.visual_const
        sound_key = audio_const.WORLD_BGM
        VisualProxyMgr.engine_command(EngineCmd.PLAY_SOUND, {
            'wwise_obj_id': audio_const.BASE_MUSIC_WWISE_OBJ_ID,
            'event_name': sound_key,
            'params': { } })
        env_sound_key = audio_const.ENV_2_SOUND[audio_const.ENV_DEFAULT][0]
        VisualProxyMgr.engine_command(EngineCmd.PLAY_SOUND, {
            'wwise_obj_id': audio_const.ENV_MUSIC_WWISE_OBJ_ID,
            'event_name': env_sound_key,
            'params': { } })
    import collision
    col_const = col_const
    import dcs_extend.const
    collision.set_default_group_and_filter(col_const.BLOCK_NORMAL, col_const.ALL)
    game_init._start_debug_tool()
    init_sunshine2()


def panel_loading_bar():
    VisualProxyMgr = VisualProxyMgr
    import dcs_core.proxy.VisualProxyMgr
    UICmd = UICmd
    import dcs_extend.const.visual_const
    UIUtils = UIUtils
    import ui.uihelper
    UIUtils.show_ui('PanelLogin')
    UIUtils.show_ui('PanelDebugBtn')

sunshine_plugin_init = {
    'Sirius': [
        sirius_plugin],
    'BossEditor': [
        bossEditor_plugin],
    'Manifest': [
        manifest_plugin],
    'Watcher': [
        watcher_plugin],
    'BuffEditor': [
        buffEditor_plugin],
    'PassiveEditor': [
        passive_plugin],
    'UnitEditor': [
        unitEditor_plugin],
    'CamEditor': [
        camEditor_plugin],
    'BattleFieldEditor': [
        BattleFieldEditor_plugin],
    'Cinematic': [
        cinematic_plugin],
    'TaskWind': [
        taskWind_plugin],
    'DialogEditor': [
        dialog_plugin],
    'AncientOnesCurveEditor': [
        AncientOnesCurveEditor_plugin],
    'CurveEditor': [
        CurveEditor_plugin] }
sunshine_plugin_start = {
    'Sirius': [
        sirius_init_input,
        sirius_init_game_world,
        panel_loading_bar],
    'BossEditor': [
        sirius_init_input,
        sirius_init_game_world,
        panel_loading_bar],
    'Manifest': [
        sirius_init_input,
        sirius_init_game_world,
        panel_loading_bar],
    'Watcher': [
        sirius_init_input,
        sirius_init_game_world,
        panel_loading_bar],
    'BuffEditor': [
        sirius_init_input,
        sirius_init_game_world,
        panel_loading_bar],
    'PassiveEditor': [
        sirius_init_input,
        sirius_init_game_world,
        panel_loading_bar],
    'UnitEditor': [
        unit_init_input,
        unit_init_game_world],
    'CamEditor': [
        sirius_init_input,
        sirius_init_game_world,
        panel_loading_bar],
    'BattleFieldEditor': [
        sirius_init_input,
        battle_field_init_game_world],
    'Cinematic': [
        cinematic_init_input,
        cinematic_init_game_world],
    'AncientOnesCurveEditor': [
        unit_init_input,
        unit_init_game_world],
    'Montage': [
        montage_init_input,
        cinematic_init_game_world] }

def init_sunshine2(_ip, _port = (None, None)):
    global EDITOR_CLIENT
    if EDITOR_CLIENT:
        if not EDITOR_CLIENT.connectReady:
            return None
        if None.COMMON_CONNECT_RESET_ENABLE:
            disconnect_sunshine()
        else:
            return None
        SunshinePatch = SunshinePatch
        import sunshine2.Common
        Env = Env
        import editor_platform.core.env
        init = init
        import editor_platform.interface.init_game
        if not Env.initialized:
            init()
    import render
    SunshineGameLoop = SunshineGameLoop
    import dcs_engine.SunshineGameLoop
    render.logic = SunshineGameLoop.tick
    render.post_logic = SunshineGameLoop.post_tick
    SunshineGameLoop.set_async_net_poll(False)
    SunshineClient = SunshineClient
    import SunshineSDK2.SunshineClient
    EDITOR_CLIENT = SunshineClient()
    WorkbenchPluginClient = WorkbenchPluginClient
    import sunshine2.Workbench.PluginClient
    workbench = WorkbenchPluginClient()
    EDITOR_CLIENT.RegisterPlugin(workbench)
    EditorServerConnClient = EditorServerConnClient
    import sunshine2
    editor_server_client = EditorServerConnClient.EditorServerConnClient()
    EDITOR_CLIENT.RegisterPlugin(editor_server_client)
    AttributeWatcherPluginClient = AttributeWatcherPluginClient
    import sunshine2
    AttributeWacherPlugin = AttributeWatcherPluginClient.AttributeWatcherPluginClient()
    EDITOR_CLIENT.RegisterPlugin(AttributeWacherPlugin)
    SunshineGameLoop.TICKABLE_PLUGINS.append(AttributeWacherPlugin)
    BehaviorEditorClient = BehaviorEditorClient
    import sunshine2.BehaviorFieldEditor
    BehaviorFieldEditor = BehaviorFieldEditor
    import sunshine2
    behaviorEditor = BehaviorEditorClient.BehaviorEditorClient()
    BehaviorFieldEditor.BehaviorFieldEditorPlugin = behaviorEditor
    EDITOR_CLIENT.RegisterPlugin(behaviorEditor)
    SunshineGameLoop.TICKABLE_PLUGINS.append(behaviorEditor)
    RecordPlayDebugerClient = RecordPlayDebugerClient
    import sunshine2.RecordPlayDebuger.Plugin
    RecordPlayDebuger = RecordPlayDebugerClient.RecordPlayDebugerClient()
    EDITOR_CLIENT.RegisterPlugin(RecordPlayDebuger)
    SunshineGameLoop.TICKABLE_PLUGINS.append(RecordPlayDebuger)
    BuffEditorClient = BuffEditorClient
    import sunshine2
    buffEditor = BuffEditorClient.BuffEditorClient()
    EDITOR_CLIENT.RegisterPlugin(buffEditor)
    HospiceEditorClient = HospiceEditorClient
    import sunshine2.HospiceEditor
    hospiceEditor = HospiceEditorClient.HospiceEditorClient()
    EDITOR_CLIENT.RegisterPlugin(hospiceEditor)
    JoystickEditorClient = JoystickEditorClient
    import sunshine2.JoystickEditor
    JoystickEditor = JoystickEditorClient.JoystickEditorClient()
    EDITOR_CLIENT.RegisterPlugin(JoystickEditor)
    StalkerEditorClient = StalkerEditorClient
    import sunshine2.StalkerEditor
    stalkerEditor = StalkerEditorClient.StalkerEditorClient()
    EDITOR_CLIENT.RegisterPlugin(stalkerEditor)
    BulletEditorClient = BulletEditorClient
    import sunshine2
    bulletEditor = BulletEditorClient.BulletEditorClient()
    EDITOR_CLIENT.RegisterPlugin(bulletEditor)
    BeowulfEditorPluginClient = BeowulfEditorPluginClient
    import sunshine2.BeowulfEditor
    beowulf = BeowulfEditorPluginClient.BeowulfEditorPluginClient()
    EDITOR_CLIENT.RegisterPlugin(beowulf)
    BossPluginClient = BossPluginClient
    import sunshine2
    bossEditor = BossPluginClient.BossPluginClient()
    EDITOR_CLIENT.RegisterPlugin(bossEditor)
    DataCenterPluginClient = DataCenterPluginClient
    import sunshine2.Common.DataCenter
    dataCenterEditor = DataCenterPluginClient.DataCenterPluginClient()
    EDITOR_CLIENT.RegisterPlugin(dataCenterEditor)
    ArtResCompressPluginClient = ArtResCompressPluginClient
    import sunshine2.ArtResCompressEditor
    artResCompressEditor = ArtResCompressPluginClient.ArtResCompressPluginClient()
    EDITOR_CLIENT.RegisterPlugin(artResCompressEditor)
    NPCAppearancePluginEditor = NPCAppearancePluginEditor
    import sunshine2.NPCAppearenceEditor
    npcAppearanceEditor = NPCAppearancePluginEditor.NPCAppearancePluginEditor()
    EDITOR_CLIENT.RegisterPlugin(npcAppearanceEditor)
    SunshineGameLoop.TICKABLE_PLUGINS.append(npcAppearanceEditor)
    LightningEditorPluginClient = LightningEditorPluginClient
    import sunshine2
    lightningEditor = LightningEditorPluginClient.LightningEditorPluginClient()
    EDITOR_CLIENT.RegisterPlugin(lightningEditor)
    SunshineGameLoop.TICKABLE_PLUGINS.append(lightningEditor)
    AnimakerPluginClient = AnimakerPluginClient
    import sunshine2.Animaker
    animakerEditor = AnimakerPluginClient.AnimakerPluginClient()
    EDITOR_CLIENT.RegisterPlugin(animakerEditor)
    SunshineGameLoop.TICKABLE_PLUGINS.append(animakerEditor)
    ActionDebugEditorPluginClient = ActionDebugEditorPluginClient
    import sunshine2.ActionDebugEditor.ActionDebugEditorPluginClient
    action_debug_editor = ActionDebugEditorPluginClient()
    EDITOR_CLIENT.RegisterPlugin(action_debug_editor)
    SunshineGameLoop.TICKABLE_PLUGINS.append(action_debug_editor)
    TaskEditor = TaskEditor
    import sunshine2
    TaskPluginClient = TaskPluginClient
    import sunshine2.TaskEditor.TaskPluginClient
    task_editor = TaskPluginClient()
    TaskEditor.TaskPlugin = task_editor
    task_editor.init_entity_controller()
    SunshineGameLoop.TICKABLE_PLUGINS.append(task_editor)
    EDITOR_CLIENT.RegisterPlugin(task_editor)
    UnitModelPluginClient = UnitModelPluginClient
    import sunshine2.UnitModelEditor
    unit_model_editor = UnitModelPluginClient.UnitModelPluginClient()
    EDITOR_CLIENT.RegisterPlugin(unit_model_editor)
    DialogPluginClient = DialogPluginClient
    import sunshine2.DialogEditor.DialogPluginClient
    DialogEntityPool = DialogEntityPool
    import sunshine2.DialogEditor.DialogEntityPool
    DialogEditor = DialogEditor
    import sunshine2
    EditorEntityStateMgr = EditorEntityStateMgr
    import helper.EditorEntityStateMgr
    dialog_editor = DialogPluginClient()
    DialogEditor.DialogPlugin = dialog_editor
    DialogEditor.EntityPool = DialogEntityPool()
    DialogEditor.EntityStateMgr = EditorEntityStateMgr()
    SunshineGameLoop.TICKABLE_PLUGINS.append(dialog_editor)
    EDITOR_CLIENT.RegisterPlugin(dialog_editor)
    BattleFieldEditorPluginClient = BattleFieldEditorPluginClient
    import sunshine2.BattleFieldEditor
    BattleFieldEditor = BattleFieldEditor
    import sunshine2
    BattleFieldEntityPool = BattleFieldEntityPool
    import sunshine2.BattleFieldEditor.BattleFieldEntityPool
    battlefieldEditor = BattleFieldEditorPluginClient.BattleFieldEditorPluginClient()
    BattleFieldEditor.BattleFieldEditorPlugin = battlefieldEditor
    BattleFieldEditor.EntityPool = BattleFieldEntityPool()
    BattleFieldEditor.EntityStateMgr = EditorEntityStateMgr()
    SunshineGameLoop.TICKABLE_PLUGINS.append(battlefieldEditor)
    EDITOR_CLIENT.RegisterPlugin(battlefieldEditor)
    BattlefieldPluginClient = BattlefieldPluginClient
    import sunshine2.Battlefield
    battlefield = BattlefieldPluginClient.BattlefieldPluginClient()
    SunshineGameLoop.TICKABLE_PLUGINS.append(battlefield)
    EDITOR_CLIENT.RegisterPlugin(battlefield)
    UnitEditorPluginClient = UnitEditorPluginClient
    import sunshine2.UnitEditor
    UnitEntityPool = UnitEntityPool
    import sunshine2.UnitEditor.UnitEntityPool
    UnitStateMgr = UnitStateMgr
    import sunshine2.UnitEditor.UnitStateMgr
    UnitEditor = UnitEditor
    import sunshine2
    unitEditor_client = UnitEditorPluginClient.UnitEditorPluginClient()
    UnitEditor.UnitEditorPlugin = unitEditor_client
    UnitEditor.EntityPool = UnitEntityPool()
    UnitEditor.PropertyEventMgr = UnitStateMgr()
    EDITOR_CLIENT.RegisterPlugin(unitEditor_client)
    SunshineGameLoop.TICKABLE_PLUGINS.append(unitEditor_client)
    InspectorPluginClient = InspectorPluginClient
    import sunshine2.InspectorEditor
    inspectorEditor = InspectorPluginClient.InspectorPluginClient()
    EDITOR_CLIENT.RegisterPlugin(inspectorEditor)
    CamEditorPluginClient = CamEditorPluginClient
    import sunshine2
    camEditor = CamEditorPluginClient.CamEditorPluginClient()
    EDITOR_CLIENT.RegisterPlugin(camEditor)
    RainbowPlugin = RainbowPlugin
    import sunshine2.RainbowPluginClient
    rainbowPlugin = RainbowPlugin()
    EDITOR_CLIENT.RegisterPlugin(rainbowPlugin)
    SunshineGameLoop.TICKABLE_PLUGINS.append(rainbowPlugin)
    RainbowExtraPlugin = RainbowExtraPlugin
    import sunshine2.RainbowExtraPlugin
    RainbowExtraPlugin = RainbowExtraPlugin()
    EDITOR_CLIENT.RegisterPlugin(RainbowExtraPlugin)
    WatcherClient = WatcherClient
    import sunshine2
    watcher = WatcherClient.WatcherClient()
    EDITOR_CLIENT.RegisterPlugin(watcher)
    SunshineGameLoop.TICKABLE_PLUGINS.append(watcher)
    CamasterPluginClient = CamasterPluginClient
    import sunshine2.CamasterEditor
    camasterEditor = CamasterPluginClient.CamasterPluginClient()
    EDITOR_CLIENT.RegisterPlugin(camasterEditor)
    SunshineGameLoop.TICKABLE_PLUGINS.append(camasterEditor)
    DevHelperPluginClient = DevHelperPluginClient
    import sunshine2.DevHelperPluginClient
    dev_helper = DevHelperPluginClient()
    EDITOR_CLIENT.RegisterPlugin(dev_helper)
    MontagePlugin = MontagePlugin
    import sunshine2.Montage.Plugins.MontagePlugin
    EDITOR_CLIENT.RegisterPlugin(MontagePlugin())
    MontageExtendPlugin = MontageExtendPlugin
    import sunshine2.Montage.Plugins.MontageExtendPlugin
    EDITOR_CLIENT.RegisterPlugin(MontageExtendPlugin())
    DialogEditorPluginClient = DialogEditorPluginClient
    import sunshine2.Montage.Plugins.DialogEditorPluginClient
    EDITOR_CLIENT.RegisterPlugin(DialogEditorPluginClient())
    CurveEditorClient = CurveEditorClient
    import sunshine2
    curveEditor = CurveEditorClient.CurveEditorClient()
    EDITOR_CLIENT.RegisterPlugin(curveEditor)
    OperaEditorClient = OperaEditorClient
    import sunshine2.OperaEditor
    operaEditor = OperaEditorClient.OperaEditorClient()
    EDITOR_CLIENT.RegisterPlugin(operaEditor)
    if Env.initialized:
        WorkbenchPluginClient = WorkbenchPluginClient
        import sunshine2.Workbench.PluginClient
        workbench = WorkbenchPluginClient()
        EDITOR_CLIENT.RegisterPlugin(workbench)
        indicator_editor_plugin_client = indicator_editor_plugin_client
        import sunshine2.indicator_editor
        plugin = indicator_editor_plugin_client.IndicatorEditorPluginClient()
        EDITOR_CLIENT.RegisterPlugin(plugin)
        SunshineGameLoop.TICKABLE_PLUGINS.append(plugin)
        sandbox_plugin = sandbox_plugin
        import sunshine2.sandbox
        plugin = sandbox_plugin.SandboxPlugin()
        EDITOR_CLIENT.RegisterPlugin(plugin)
        SunshineGameLoop.TICKABLE_PLUGINS.append(plugin)
    (ip, port) = ('127.0.0.1', 29102)
    for param in editor_arg.split(';'):
        if 'hunter_ip' in param:
            ip = param.split(':')[-1]
        if 'hunter_port' in param:
            port = int(param.split(':')[-1])
        if _ip and _port:
            port = _port
            ip = _ip
    EDITOR_CLIENT.Connect((ip, port))
    SunshineGameLoop = SunshineGameLoop
    import dcs_engine.SunshineGameLoop
    SunshineGameLoop.editor_client = EDITOR_CLIENT
    SunshineGameLoop.editor_client.RegisterCloseCallback(_close_sunshine_callback)
    open_debug_type()


def init_unit_editor():
    pass


def init_montage_editor():
    global EDITOR_CLIENT
    mont_const = mont_const
    import dcs_engine.montage
    mont_const.ENABLE_TRACK_LOD = False
    if EDITOR_CLIENT:
        if not EDITOR_CLIENT.connectReady:
            return None
        if None.MONTAGE_CONNECT_RESET_ENABLE:
            disconnect_sunshine()
        else:
            return None
        import render
        SunshineGameLoop = SunshineGameLoop
        import dcs_engine.SunshineGameLoop
        render.logic = SunshineGameLoop.tick
        render.post_logic = SunshineGameLoop.post_tick
        SunshineGameLoop.set_async_net_poll(False)
        SunshineClient = SunshineClient
        import SunshineSDK2.SunshineClient
        EDITOR_CLIENT = SunshineClient()
        EditorServerConnClient = EditorServerConnClient
        import sunshine2
        editor_server_client = EditorServerConnClient.EditorServerConnClient()
        EDITOR_CLIENT.RegisterPlugin(editor_server_client)
        MontagePlugin = MontagePlugin
        import sunshine2.Montage.Plugins.MontagePlugin
        MontageSDK = MontageSDK
        import dcs_engine.montage
        montage = MontagePlugin()
        MontageSDK.Montage = montage
        EDITOR_CLIENT.RegisterPlugin(montage)
        MontageExtendPlugin = MontageExtendPlugin
        import sunshine2.Montage.Plugins.MontageExtendPlugin
        extend_plugin = MontageExtendPlugin()
        MontageSDK.ExtendPlugin = extend_plugin
        EDITOR_CLIENT.RegisterPlugin(extend_plugin)
        LightningPlugin = LightningPlugin
        import sunshine2.Montage.Plugins.LightningPlugin
        EDITOR_CLIENT.RegisterPlugin(LightningPlugin())
        MontageRainbowPlugin = MontageRainbowPlugin
        import sunshine2.Montage.Plugins.MontageRainbowPlugin
        EDITOR_CLIENT.RegisterPlugin(MontageRainbowPlugin())
        DialogEditorPluginClient = DialogEditorPluginClient
        import sunshine2.Montage.Plugins.DialogEditorPluginClient
        EDITOR_CLIENT.RegisterPlugin(DialogEditorPluginClient())
        address = ('127.0.0.1', 29102)
        EDITOR_CLIENT.Connect(address)
        SunshineGameLoop.editor_client = EDITOR_CLIENT
        SunshineGameLoop.editor_client.RegisterCloseCallback(_close_sunshine_callback)
        open_debug_type()
        return None


def montage_init(arg):
    remote_arg_lst = arg.split(';')
    if 'playrecord' in remote_arg_lst:
        import os
        os.environ.setdefault('PLAYRECORD', '1')
    game_init.set_done_cb(montage_start)
    game_init.init(arg, False)


def montage_start():
    InputHelper = InputHelper
    InputConst = InputConst
    import helper
    InputHelper.switch_mouse_cursor_inner(show_mouse = True, reason = InputConst.MouseVisibleReason.SWITCH_MOUSE)
    init_montage_editor()


def montage_pure_init(arg):
    import sys
    import nxapp
    import game3d
    import client_const
    client_const.IS_USE_MOBILE_UI = False
    if hasattr(sys, 'set_enable_adaptive_opcode'):
        sys.set_enable_adaptive_opcode(True)
    nxapp.enable_imm(False)
    translate_utility = translate_utility
    import translate
    translate_utility.sunshine_reset_translate_data()
    game_init.init_debug()
    game_init.init_debug_env()
    game_init.set_screen_resolution()
    init_quality_xml()
    game_init.init_log_level()
    game_init.init_asiocore()
    game_init.init_dcs_env()
    game_init.init_material_effect_system()
    game_init.SHADE_CACHE_BIN_GENERATED_ENABLED = True
    GraphicHelper = GraphicHelper
    import helper.GraphicHelper
    GraphicHelper.set_base_display_setting()
    game_init._create_fonts()


def montage_pure_start():
    mont_const = mont_const
    import dcs_engine.montage
    mont_const.EDITOR_PURE_INIT = True
    mont_const.EDITOR_MODE = True
    game_init.init_shader_cache()
    for _ in game_init.iter_init_dcs_env():
        for _ in game_init.iter_init_ui_manager():
            game_init.init_cpp_proxy()
            for _ in game_init.iter_register_decorator():
                for _ in game_init.iter_init_dcs():
                    GraphicHelper = GraphicHelper
                    import helper.GraphicHelper
                    GraphicHelper.set_global_base_setting()
                    for _ in game_init.iter_init_sdk():
                        MsgCoder = MsgCoder
                        import game_common
                        MsgCoder.init()
                        for _ in game_init.iter_start():
                            montage_init_input()
                            cinematic_init_game_world()
                            VisualProxyMgr = VisualProxyMgr
                            import dcs_core.proxy.VisualProxyMgr
                            VisualProxyMgr.engine_flush()
                            iter_preload_instance = iter_preload_instance
                            import ui.ui_manager.UIManager
                            for _ in iter_preload_instance():
                                UIPrefabHelper = UIPrefabHelper
                                import ui.uihelper.UIPrefabHelper
                                UIPrefabHelper().root_node.entity.active_self = False
                                Env = Env
                                import dcs_core.Env
                                PlayerHolder = PlayerHolder
                                import sunshine2.Montage.Plugins.MontagePlugin
                                Env.PLAYER_HOLDER = PlayerHolder()
                                WeatherManager = WeatherManager
                                import dcs_engine.WeatherMgr_v2
                                WeatherManager.set_soul_enable(True)
                                WeatherManager.set_avt_enable(True)
                                UIManager = UIManager
                                import ui.ui_manager.UIManager
                                UIManager.is_game_init_finish = True
                                init_montage_editor()
                                return None


def vehicle_init():
    translate_utility = translate_utility
    import translate
    translate_utility.sunshine_reset_translate_data()
    game_init.set_screen_resolution()
    game_init.init_shader_cache()
    game_init.init_quality_xml()
    game_init.init_log_level()
    game_init.init_asiocore()
    init_dcs_env()
    init_ui_manager()
    RotationCore = RotationCore
    import dcs_engine.camaster.core.RotationCore
    UIManager = UIManager
    import ui.ui_manager.UIManager
    Env = Env
    import dcs_core.Env
    Env.set_ui_proxy(UIManager)
    UIManager.init_logic_data_model()
    CppProxy = CppProxy
    import dcs_core.CppProxy
    CppProxy.check_cpp_dcs_enable()
    game_init.init_cpp_proxy()
    run_register_decorator()
    init_dcs()
    init_sdk()
    game_init.init_memory_warning()
    game_init.init_first_udid(False)
    MsgCoder = MsgCoder
    import game_common
    MsgCoder.init()


def vehicle_start():
    import sys
    VisualProxyMgr = VisualProxyMgr
    import dcs_core.proxy.VisualProxyMgr
    CameraCmd = CameraCmd
    import dcs_extend.const.visual_const
    VisualProxyMgr.camera_command(CameraCmd.CAM_ROTATE, {
        'is_rotate': False })
    import client_const
    GameWorldMgr = GameWorldMgr
    import game_world.GameWorldMgr
    DataMgr = DataMgr
    import game_common.helper.DataMgr
    gw_dict = dict()
    gw_dict['scene_file'] = DataMgr.common_data('scene_data').get('z_ai_test')['path']
    gw_dict['gw_type'] = client_const.GAME_WORLD_EDITOR
    GameWorldMgr.init_game_world_for_editor(gw_dict)
    EngineCmd = EngineCmd
    CameraCmd = CameraCmd
    import dcs_extend.const.visual_const
    camera_const = camera_const
    import dcs_extend.const
    VisualProxyMgr = VisualProxyMgr
    import dcs_core.proxy.VisualProxyMgr
    VisualProxyMgr.camera_command(CameraCmd.SWITCH_V_CAM, {
        'cam_type': camera_const.CamSt.FREE_VIEW })
    camaster = camaster
    import dcs_engine
    camaster.ROTATION_CORE.set_enable_rotate(False)
    VisualProxyMgr.engine_command(EngineCmd.CLOSE_EFFECT, {
        'effect_name': 'volumetric_fog' })
    VisualProxyMgr = VisualProxyMgr
    import dcs_core.proxy.VisualProxyMgr
    VisualProxyMgr.engine_flush()
    game_init.init_audio()
    init_data()
    game_init.start_log_console()
    import render
    import game3d
    render.set_texture_skip_level('', 0)
    render.set_texture_skip_level('ui.*', 0)
    render.set_texture_skip_level('effect.*', 0)
    render.set_texture_skip_level('char.*', 0)
    render.set_texture_skip_level('env.*', 0)
    render.set_texture_skip_level('common.*', 0)
    render.set_texture_skip_level('model.*', 0)
    render.set_texture_skip_level('scene.*', 0)
    render.set_texture_skip_level('shader.*', 0)
    game_init._create_fonts()
    set_global_callback = set_global_callback
    import mbs.common.mobile_common
    EngineCallback = EngineCallback
    import mbs.client.engine_callback
    set_global_callback(EngineCallback())
    SunshineGameLoop = SunshineGameLoop
    import dcs_engine.SunshineGameLoop
    render.logic = SunshineGameLoop.tick
    render.post_logic = SunshineGameLoop.post_tick
    SunshineGameLoop.set_async_net_poll(False)
    nxgui = nxgui
    import neox
    import client_utility
    if hasattr(nxgui.UICSVDataMgr.instance(), 'set_convert_font_path_cb'):
        nxgui.UICSVDataMgr.instance().set_convert_font_path_cb(client_utility.convert_font_path)
    nxgui.UICSVDataMgr.instance().font_file_path = 'ui/data/font_data.csv'
    nxgui.UICSVDataMgr.instance().load_font_csv()
    nxgui.UICSVDataMgr.instance().font_size_path = client_utility.get_font_size_data_csv_path()
    nxgui.UICSVDataMgr.instance().load_font_size_csv()
    import collision
    col_const = col_const
    import dcs_extend.const
    collision.set_default_group_and_filter(col_const.BLOCK_NORMAL, col_const.ALL)
    col_types = col_types
    import dcs_extend.const
    if col_const.COMBINE_GROUP_API_VALID:
        collision.set_all_combine_groups(col_types.ALL_COMBINE_GROUPS)
    game_init._start_debug_tool()
    import client_const
    if client_const.IS_PUBLISH_VERSION and client_const.FILE_RELOAD and game3d.get_platform() < game3d.PLATFORM_WIN32:
        script_reload = script_reload
        import helper
        import os
        for script_path in sys.path:
            script_reload.add_watch_path(os.path.normpath(script_path))
            game_init.init_formula_tree()
            game_init.init_hunter()
            game3d.show_render_info(False)
            init_vehicle_editor()
            return None


def init_vehicle_editor():
    SunshineClient = SunshineClient
    import SunshineSDK2.SunshineClient
    EDITOR_CLIENT = SunshineClient()
    EditorServerConnClient = EditorServerConnClient
    import sunshine2
    editor_server_client = EditorServerConnClient.EditorServerConnClient()
    EDITOR_CLIENT.RegisterPlugin(editor_server_client)
    VehicleEditorClient = VehicleEditorClient
    import sunshine2.VehicleEditor.VehicleEditorClient
    vehicleEditor = VehicleEditorClient()
    EDITOR_CLIENT.RegisterPlugin(vehicleEditor)
    (ip, port) = ('127.0.0.1', 29102)
    EDITOR_CLIENT.Connect((ip, port))
    SunshineGameLoop = SunshineGameLoop
    import dcs_engine.SunshineGameLoop
    SunshineGameLoop.TICKABLE_PLUGINS.append(vehicleEditor)
    SunshineGameLoop.editor_client = EDITOR_CLIENT
    SunshineGameLoop.editor_client.RegisterCloseCallback(_close_sunshine_callback)
    open_debug_type()


def material_mgr_init(arg):
    vehicle_init()


def material_mgr_start():
    import client_const
    GameWorldMgr = GameWorldMgr
    import game_world.GameWorldMgr
    DataMgr = DataMgr
    import game_common.helper.DataMgr
    gw_dict = dict()
    gw_dict['scene_file'] = DataMgr.common_data('scene_data').get('guns')['path']
    gw_dict['gw_type'] = client_const.GAME_WORLD_EDITOR
    GameWorldMgr.init_game_world_for_editor(gw_dict)
    EngineCmd = EngineCmd
    CameraCmd = CameraCmd
    import dcs_extend.const.visual_const
    camera_const = camera_const
    import dcs_extend.const
    VisualProxyMgr = VisualProxyMgr
    import dcs_core.proxy.VisualProxyMgr
    VisualProxyMgr.camera_command(CameraCmd.SWITCH_V_CAM, {
        'cam_type': camera_const.CamSt.FREE_VIEW })
    VisualProxyMgr.engine_command(EngineCmd.CLOSE_EFFECT, {
        'effect_name': 'volumetric_fog' })
    InputHelper = InputHelper
    import helper
    import game
    game.on_mouse_wheel = InputHelper.on_mouse_wheel
    game.add_key_handler(None, None, InputHelper.on_key_event)
    game.on_gamepad_msg = InputHelper.on_gamepad_msg_event
    game.on_exit = game_init.on_exit
    game_init.init_audio()
    init_data()
    game_init.start_log_console()
    import render
    import game3d
    render.set_texture_skip_level('', 0)
    render.set_texture_skip_level('ui.*', 0)
    render.set_texture_skip_level('effect.*', 0)
    render.set_texture_skip_level('char.*', 0)
    render.set_texture_skip_level('env.*', 0)
    render.set_texture_skip_level('common.*', 0)
    render.set_texture_skip_level('model.*', 0)
    render.set_texture_skip_level('scene.*', 0)
    render.set_texture_skip_level('shader.*', 0)
    game_init._create_fonts()
    set_global_callback = set_global_callback
    import mbs.common.mobile_common
    EngineCallback = EngineCallback
    import mbs.client.engine_callback
    set_global_callback(EngineCallback())
    SunshineGameLoop = SunshineGameLoop
    import dcs_engine.SunshineGameLoop
    render.logic = SunshineGameLoop.tick
    render.post_logic = SunshineGameLoop.post_tick
    SunshineGameLoop.set_async_net_poll(False)
    nxgui = nxgui
    import neox
    import client_utility
    if hasattr(nxgui.UICSVDataMgr.instance(), 'set_convert_font_path_cb'):
        nxgui.UICSVDataMgr.instance().set_convert_font_path_cb(client_utility.convert_font_path)
    nxgui.UICSVDataMgr.instance().font_file_path = 'ui/data/font_data.csv'
    nxgui.UICSVDataMgr.instance().load_font_csv()
    nxgui.UICSVDataMgr.instance().font_size_path = client_utility.get_font_size_data_csv_path()
    nxgui.UICSVDataMgr.instance().load_font_size_csv()
    import collision
    col_const = col_const
    import dcs_extend.const
    collision.set_default_group_and_filter(col_const.BLOCK_NORMAL, col_const.ALL)
    col_types = col_types
    import dcs_extend.const
    if col_const.COMBINE_GROUP_API_VALID:
        collision.set_all_combine_groups(col_types.ALL_COMBINE_GROUPS)
    game_init._start_debug_tool()
    import client_const
    import sys
    if client_const.IS_PUBLISH_VERSION and client_const.FILE_RELOAD and game3d.get_platform() < game3d.PLATFORM_WIN32:
        script_reload = script_reload
        import helper
        import os
        for script_path in sys.path:
            script_reload.add_watch_path(os.path.normpath(script_path))
            game_init.init_formula_tree()
            game_init.init_hunter()
            game3d.show_render_info(False)
            init_material_mgr_editor()
            return None


def init_material_mgr_editor():
    SunshineClient = SunshineClient
    import SunshineSDK2.SunshineClient
    import game
    EDITOR_CLIENT = SunshineClient()
    EditorServerConnClient = EditorServerConnClient
    import sunshine2
    editor_server_client = EditorServerConnClient.EditorServerConnClient()
    EDITOR_CLIENT.RegisterPlugin(editor_server_client)
    MaterialEditorClient = MaterialEditorClient
    import sunshine2
    material_editor = MaterialEditorClient.MaterialEditorClient()
    EDITOR_CLIENT.RegisterPlugin(material_editor)
    game.on_mouse_msg = material_editor.on_mouse_msg
    (ip, port) = ('127.0.0.1', 29102)
    for param in editor_arg.split(';'):
        if 'hunter_ip' in param:
            ip = param.split(':')[-1]
        if 'hunter_port' in param:
            port = int(param.split(':')[-1])
        EDITOR_CLIENT.Connect((ip, port))
        SunshineGameLoop = SunshineGameLoop
        import dcs_engine.SunshineGameLoop
        SunshineGameLoop.TICKABLE_PLUGINS.append(material_editor)
        SunshineGameLoop.editor_client = EDITOR_CLIENT
        SunshineGameLoop.editor_client.RegisterCloseCallback(_close_sunshine_callback)
        open_debug_type()
        return None


def workbench_init(arg):
    init_dcs_env()
    game_init._create_fonts()
    game_init.init_tick_once(arg, 0)


def workbench_start():
    global EDITOR_CLIENT
    import render
    SunshineGameLoop = SunshineGameLoop
    import dcs_engine.SunshineGameLoop
    render.logic = SunshineGameLoop.tick
    render.post_logic = SunshineGameLoop.post_tick
    SunshineGameLoop.set_async_net_poll(False)
    if EDITOR_CLIENT is not None:
        SunshineClient = SunshineClient
        import SunshineSDK2.SunshineClient
        EDITOR_CLIENT = SunshineClient()
    DevHelperPluginClient = DevHelperPluginClient
    import sunshine2.DevHelperPluginClient
    dev_helper = DevHelperPluginClient()
    EDITOR_CLIENT.RegisterPlugin(dev_helper)
    EditorServerConnClient = EditorServerConnClient
    import sunshine2
    editor_server_client = EditorServerConnClient.EditorServerConnClient()
    EDITOR_CLIENT.RegisterPlugin(editor_server_client)
    WorkbenchPluginClient = WorkbenchPluginClient
    import sunshine2.Workbench.PluginClient
    workbench = WorkbenchPluginClient()
    EDITOR_CLIENT.RegisterPlugin(workbench)
    (ip, port) = ('127.0.0.1', 29102)
    for param in editor_arg.split(';'):
        if 'hunter_ip' in param:
            ip = param.split(':')[-1]
        if 'hunter_port' in param:
            port = int(param.split(':')[-1])
        EDITOR_CLIENT.Connect((ip, port))
        SunshineGameLoop = SunshineGameLoop
        import dcs_engine.SunshineGameLoop
        SunshineGameLoop.TICKABLE_PLUGINS.append(workbench)
        SunshineGameLoop.editor_client = EDITOR_CLIENT
        SunshineGameLoop.editor_client.RegisterCloseCallback(_close_sunshine_callback)
        return None