extends Node2D var MenuScene; func _ready(): SettingsSingleton.CheckVideoSettings(); SettingsSingleton.CheckAudioSettings(); SettingsSingleton.CheckDLC(); if SettingsSingleton.GetFirstStartup(): FirstStartup(); InitMenu(); return ; Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) SettingsSingleton.CheckCurrentLanguage(); $Text.text = tr("ui_loading"); InitMenu(); func FirstStartup(): var _temp = SceneLoader.connect("on_scene_loaded", self, "LangLoaded") SceneLoader.load_scene("res://scenes/SelectLanguageScene.tscn"); func LangLoaded(obj): if obj.path == "res://scenes/SelectLanguageScene.tscn": visible = false; get_tree().root.add_child(obj.instance); SceneLoader.disconnect("on_scene_loaded", self, "LangLoaded"); func InitMenu(): var _temp = SceneLoader.connect("on_scene_loaded", self, "MenuLoaded") var scenes = [ "res://scenes/MainMenu.tscn", "res://scenes/SettingsScene.tscn", ] for i in scenes: SceneLoader.load_scene(i); var loadIndex = 0; func MenuLoaded(obj): loadIndex += 1; if obj.path == "res://scenes/MainMenu.tscn": MenuScene = obj.instance; if loadIndex == 2: visible = false; get_tree().root.add_child(MenuScene); SceneLoader.disconnect("on_scene_loaded", self, "MenuLoaded"); const commonScenes:Array = [ "res://scenes/BackgroundScenes/Scene2.tscn", "res://scenes/BackgroundScenes/Scene2_1.tscn", "res://scenes/BackgroundScenes/Panorama.tscn", "res://scenes/BackgroundScenes/Garaj.tscn", "res://scenes/BackgroundScenes/Kamin.tscn", "res://scenes/BackgroundScenes/Death_stairs_girl.tscn", "res://scenes/BackgroundScenes/Chernii_ekran.tscn", "res://scenes/GameEnd/WinScene.tscn", "res://scenes/GameEnd/LooseScene.tscn", ]; onready var commonScenesThread:Thread; var commonScenesLoaded:bool = false; func LoadCommonScenes(): if commonScenesLoaded: return ; commonScenesThread = Thread.new(); commonScenesThread.start(self, "PrepareCommonScenes", commonScenes, Thread.PRIORITY_LOW); func PrepareCommonScenes(scenes:Array): commonScenesLoaded = true; for i in scenes: if commonSceneLoadStop: return ; var _n = load(i); func _exit_tree(): commonScenesThread.wait_to_finish() func LoadBeginningScenes(): var beginningScenes = [ "res://scenes/BackgroundScenes/Scene0.tscn", "res://scenes/BackgroundScenes/Scene8.tscn", "res://scenes/BackgroundScenes/Train_video.tscn", "res://scenes/BackgroundScenes/Scene7.tscn", "res://scenes/BackgroundScenes/Scene6.tscn", "res://scenes/BackgroundScenes/Scene4.tscn", ]; for i in beginningScenes: SceneLoader.load_scene(i); func ShowLoader(): $Text.text = tr("ui_loading"); visible = true; var commonSceneLoadStop:bool = false; onready var exitLabel = $ExitLabel; func PrepareExit(): ShowLoader(); exitLabel.visible = true; SceneLoader.stop_scene_loader(); get_tree().root.get_node("MainMenu").queue_free(); commonSceneLoadStop = true; var temp; func BenchmarkScene(): var scenes = [ "res://scenes/Credits.tscn", ]; if false: SceneLoader.clear_cache(); temp = OS.get_ticks_msec(); for i in scenes: PrepareBackgroundAsync(i); else : for i in scenes: temp = OS.get_ticks_msec(); var _scene = load(i).instance(); _scene = null; print(str(i, " ", OS.get_ticks_msec() - temp, " ms")); func PrepareBackgroundAsync(sceneName:String): if not SceneLoader.is_connected("on_scene_loaded", self, "async_scene_loaded"): var _temp = SceneLoader.connect("on_scene_loaded", self, "async_scene_loaded") SceneLoader.load_scene(sceneName); func async_scene_loaded(_obj): print(OS.get_ticks_msec() - temp, " ms");