extends Spatial var loader var wait_frames var time_max = 100 # msec var current_scene = null var creature_selected_slot = null var creature_selected_filename = null func _ready(): Connection.connect( "connection_ok", self, "_on_connexion_ok" ) Connection.connect( "connection_error", self, "_on_connection_error" ) func _process(_time): if loader == null: # no need to process anymore set_process(false) return if wait_frames > 0: # wait for frames to let the "loading" animation show up wait_frames -= 1 return var t = OS.get_ticks_msec() while OS.get_ticks_msec() < t + time_max: # use "time_max" to control for how long we block this thread # poll your loader var err = loader.poll() if err == ERR_FILE_EOF: # Finished loading. var resource = loader.get_resource() loader = null set_new_scene(resource) break elif err == OK: update_progress() else: # error during loading # show_error() printerr( "Loading errors." ) loader = null break func _input( event ): if event.is_action_released( "music_manager" ): MusicManager.toggle() func load_scene( path ): self.loader = ResourceLoader.load_interactive( path ) if self.loader == null: # show_error() printerr( "Loading errors." ) return set_process(true) if self.current_scene: self.current_scene.queue_free() # get rid of the old scene # start your "loading..." animation # get_node("animation").play("loading") $loading_screen.show() self.wait_frames = 1 func set_new_scene( scene_resource ): self.current_scene = scene_resource.instance() self.get_node("scene").add_child(current_scene) $loading_screen.hide() $main_menu.hide() if self.has_node( "scene/creatures_menu_ui" ): self.get_node( "scene/creatures_menu_ui" ).connect( "new_pressed", self, "_on_creatures_menu_ui_new_pressed" ) self.get_node( "scene/creatures_menu_ui" ).connect( "cancel_pressed", self, "_on_creatures_menu_ui_cancel_pressed" ) self.get_node( "scene/creatures_menu_ui" ).connect( "select_pressed", self, "_on_creatures_menu_ui_select_pressed" ) elif self.has_node( "scene/creatures_editor_ui" ): self.get_node( "scene/creatures_editor_ui" ).connect( "valid_pressed", self, "_on_creature_editor_ui_valid_pressed" ) self.get_node( "scene/creatures_editor_ui" ).connect( "cancel_pressed", self, "_on_creature_editor_ui_cencel_pressed" ) print( "slot: " + str( self.creature_selected_slot ) ) self.get_node( "scene/creatures_editor_ui" ).slot = self.creature_selected_slot elif self.has_node( "scene/game" ): self.get_node( "scene/game" ).load_player( self.creature_selected_filename ) func update_progress(): var progress = float(self.loader.get_stage()) / self.loader.get_stage_count() self.get_node("loading_screen").set_value( progress ) func _on_main_menu_play_pressed(): var username = $main_menu/screen_box/login_box/username.text; var password = $main_menu/screen_box/login_box/password.text; if username != null and username != "" and password != null and password != "": Connection.do_request(username, password) func _on_creatures_menu_ui_new_pressed( slot ): self.creature_selected_slot = slot self.load_scene( "res://scenes/interfaces/creatures_editor/creatures_editor_ui.tscn" ) func _on_creatures_menu_ui_cancel_pressed(): $main_menu.show() func _on_creatures_menu_ui_select_pressed( filename ): self.creature_selected_filename = filename self.load_scene( "res://scenes/game/game.tscn" ) func _on_creature_editor_ui_valid_pressed(): self.load_scene( "res://scenes/interfaces/creatures_menu/creatures_menu_ui.tscn" ) func _on_creature_editor_ui_cencel_pressed(): self.load_scene( "res://scenes/interfaces/creatures_menu/creatures_menu_ui.tscn" ) func _on_main_menu_quit_pressed(): get_tree().quit() func _on_connexion_ok(): self.load_scene( "res://scenes/interfaces/creatures_menu/creatures_menu_ui.tscn" ) func _on_connection_error( message ): $main_menu/screen_box/login_box/error.text = message