127 lines
4.3 KiB
GDScript3
127 lines
4.3 KiB
GDScript3
|
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
|