adding loader msg.xml and correct message when login/register error are detected

This commit is contained in:
AleaJactaEst 2020-01-05 16:16:07 +01:00
parent d8ccda03c0
commit be7dbb08b6
16 changed files with 361 additions and 1341 deletions

6
.gitignore vendored
View file

@ -15,3 +15,9 @@ export_presets.cfg
# Ignore binary & package
*.bin
*.pck
# Ignore lib gdnaive
libgdnative.*.so
# Ignore temp
temp/

View file

@ -85,8 +85,11 @@ func _enter_tree():
background.name = "background"
if not background_texture:
var background_image = Image.new()
if not background_image.load( "res://addons/ui_window/background_default.jpg" ) == OK :
var stream_texture = load('res://addons/ui_window/background_default.jpg')
if not stream_texture :
print("Erreur lors du chargement de l'image: "+str("res://addons/ui_window/background_default.jpg") )
else:
background_image = stream_texture.get_data()
background.texture = ImageTexture.new()
background.texture.create_from_image( background_image )
else:
@ -108,6 +111,7 @@ func _enter_tree():
background.self_modulate = background_color
self.add_window_part( background )
print("[ui_window:3]")
# background.set_owner( self )
###
###
@ -165,7 +169,8 @@ func _enter_tree():
var tex_quit = ImageTexture.new()
var img_quit = Image.new()
img_quit.load( "res://assets/GUI/images/button_quit.png" )
var stream_texture = load( "res://assets/GUI/images/button_quit.png")
img_quit = stream_texture.get_data()
tex_quit.create_from_image( img_quit )
quit_button.texture_normal = tex_quit
@ -183,7 +188,8 @@ func _enter_tree():
var tex_close = ImageTexture.new()
var img_close = Image.new()
img_close.load( "res://assets/GUI/images/button_close.png" )
var stream_texture = load("res://assets/GUI/images/button_close.png")
img_close = stream_texture.get_data()
tex_close.create_from_image( img_close )
close_button.texture_normal = tex_close
@ -201,7 +207,8 @@ func _enter_tree():
var tex_open = ImageTexture.new()
var img_open = Image.new()
img_open.load( "res://assets/GUI/images/button_open.png" )
var stream_texture = load("res://assets/GUI/images/button_open.png")
img_open = stream_texture.get_data()
tex_open.create_from_image( img_open )
open_button.texture_normal = tex_open
open_button.visible = false
@ -311,7 +318,8 @@ func _enter_tree():
var tex_resize = ImageTexture.new()
var img_resize = Image.new()
img_resize.load( "res://assets/GUI/images/button_resize.png" )
var stream_texture = load("res://assets/GUI/images/button_resize.png")
img_resize = stream_texture.get_data()
tex_resize.create_from_image( img_resize )
resize_button.texture_normal = tex_resize
resize_button.mouse_default_cursor_shape = CURSOR_FDIAGSIZE
@ -487,4 +495,3 @@ func save_to_file( config_file ):
config_file.set_value(self.name, "opened", false)
config_file.set_value(self.name, "borderless", is_borderless)

View file

@ -6,6 +6,7 @@ extends Node
var _msg_xml = XMLParser.new()
var _msg_md5sum
var _msg_data = {}
func open_message_xml():
var file = File.new()
@ -31,28 +32,40 @@ func read_all_node():
#while i < _msg_xml.get_attribute_count():
# print(" -- Attribut Name:" + _msg_xml.get_attribute_name(i) + " Value:" + _msg_xml.get_attribute_value(i))
# i += 1
if _msg_xml.get_node_type() != XMLParser.NODE_ELEMENT:
ret = _msg_xml.read()
continue
match _msg_xml.get_node_name():
"branch":
i = 0
while i < _msg_xml.get_attribute_count() and _msg_xml.get_attribute_name(i) != "name":
i += 1
if i < _msg_xml.get_attribute_count():
print(_msg_xml.get_attribute_value(i))
branch = _msg_xml.get_attribute_value(i)
#print(branch + " " + str(_msg_xml.get_node_type()))
_msg_data[branch] = []
"leaf":
i = 0
while i < _msg_xml.get_attribute_count() and _msg_xml.get_attribute_name(i) != "name":
i += 1
if i < _msg_xml.get_attribute_count():
print(branch + ":" + _msg_xml.get_attribute_value(i))
leaf = _msg_xml.get_attribute_value(i)
#print(branch + ":" + leaf + str(_msg_xml.get_node_type()))
_msg_data[branch].append(leaf)
ret = _msg_xml.read()
print("Branch:" + str(_msg_data.size()))
for key in _msg_data:
print(" " + key + ":" + str(_msg_data[key].size()))
for leaf in _msg_data[key]:
print(" " + key + ":" + leaf)
# Called when the node enters the scene tree for the first time.
func _ready():
open_message_xml()
read_all_node()
print("[msg] ready")
# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):

View file

@ -29,7 +29,7 @@ class nel_register:
self._confirmed = confirmed
self._email = email
self._tac = tac
self._url_encoding = load("res://assets/Scripts/Tools/url_encoding.gd").url_encoding.new()
self._url_encoding = preload("res://assets/Scripts/Tools/url_encoding.gd").url_encoding.new()
func get_request():
return "/ams/index.php?page=register"

View file

@ -76,6 +76,9 @@ var _queue_message_system
var _khaganat_host = "localhost"
var _khaganat_port = "47851"
onready var BitStream = preload("res://bitstream.gdns")
onready var BitSet = preload("res://bitset.gdns")
func _ready():
_current_received_number = 0
_last_received_number = 0
@ -85,7 +88,7 @@ func _ready():
_connection_state = TCONNECTIONSTATE.NOTINITIALISED
_socketUDP = PacketPeerUDP.new()
_queue_message_system = Array()
_long_ack_bit_field = preload("res://bitset.gdns").new()
_long_ack_bit_field = BitSet.new()
_long_ack_bit_field.resize(512)
_last_ack_in_long_ack = 0
_latest_sync = 0
@ -96,7 +99,7 @@ func _ready():
_quit_id = 0
func send_system_login(user_addr, user_key, user_id, lang):
var msgout = preload("res://bitstream.gdns").new()
var msgout = BitStream.new()
msgout.put_sint32(_current_received_number)
msgout.put_bool(true)
msgout.put_uint8(CLFECOMMON.SYSTEM_LOGIN_CODE)
@ -113,7 +116,7 @@ func send_system_login(user_addr, user_key, user_id, lang):
_connection_state = TCONNECTIONSTATE.CONNECTED
func send_system_sync():
var msgout = preload("res://bitstream.gdns").new()
var msgout = BitStream.new()
msgout.put_sint32(_current_received_number)
msgout.put_bool(true)
msgout.put_uint8(CLFECOMMON.SYSTEM_ACK_SYNC_CODE)
@ -124,7 +127,7 @@ func send_system_sync():
_queue_message_system.append(msgout)
func send_system_ack_probe():
var msgout = preload("res://bitstream.gdns").new()
var msgout = BitStream.new()
msgout.put_sint32(_current_received_number)
msgout.put_bool(true)
msgout.put_uint8(CLFECOMMON.SYSTEM_ACK_PROBE_CODE)
@ -140,7 +143,7 @@ func send_system_ack_probe():
func send_system_quit():
# TODO - check why we send quit_id
var msgout = preload("res://bitstream.gdns").new()
var msgout = BitStream.new()
_quit_id += 1
msgout.put_sint32(_current_received_number)
msgout.put_bool(true)
@ -154,7 +157,7 @@ func send_system_quit():
return
func send_systemm_disconnect():
var msgout = preload("res://bitstream.gdns").new()
var msgout = BitStream.new()
msgout.put_sint32(_current_received_number)
msgout.put_bool(true)
msgout.put_uint8(CLFECOMMON.SYSTEM_DISCONNECTION_CODE)
@ -166,10 +169,11 @@ func send_systemm_disconnect():
func disconnect_server():
print("[net_low_level:disconnect_server] Disconnect")
if _socketUDP:
if typeof(_socketUDP) != TYPE_NIL:
send_systemm_disconnect()
print("[net_low_level:disconnect_server] Send disconnect to server")
_socketUDP.close()
_socketUDP = null
func set_khaganat_server(host, port):
_khaganat_host = host
@ -179,6 +183,8 @@ func connect_to_server(user_addr, user_key, user_id):
var connexion = load("res://assets/Scripts/Config/connexion.gd").connexion.new()
var lang = connexion.get_language()
print("[net_low_level:connect_to_server] prepare:" + str(_khaganat_host) + ":" + str(_khaganat_port))
if typeof(_socketUDP) == TYPE_NIL:
_socketUDP = PacketPeerUDP.new()
_socketUDP.set_dest_address(_khaganat_host, _khaganat_port)
send_system_login(user_addr, user_key, user_id, lang)
@ -189,7 +195,7 @@ func decode_system_message(msgin):
CLFECOMMON.SYSTEM_LOGIN_CODE:
pass
CLFECOMMON.SYSTEM_SYNC_CODE:
var hexa = load("res://assets/Scripts/Tools/hexa.gd").new()
var hexa = preload("res://assets/Scripts/Tools/hexa.gd").new()
var synchronize = msgin.get_uint32()
var stime = msgin.get_sint64()
_latest_sync = msgin.get_uint32()
@ -229,10 +235,11 @@ func decode_normal_message(msgin):
func analyze_message_received(msgbytes):
# khanat-opennel-code/code/ryzom/server/src/frontend_service/fe_receive_sub.cpp:769 void CFeReceiveSub::handleReceivedMsg( CClientHost *clienthost )
_update_time = OS.get_ticks_msec()
var msgin = preload("res://bitstream.gdns").new()
var msgin = BitStream.new()
msgin.put_data(msgbytes)
_current_received_number = msgin.get_sint32()
var system_mode = msgin.get_bool()
if ProjectSettings.get_setting("khaganat/debug_mode"):
print("[net_low_level:analyze_message_received] Tick:" + str(_current_received_number) + ", Mode:" + str(system_mode) + ", Size:" + str(msgin.size()))
if system_mode:
print("[net_low_level:analyze_message_received] System Mode")
@ -277,6 +284,8 @@ func analyze_message_received(msgbytes):
decode_normal_message(msgin)
func _process(delta):
if typeof(_socketUDP) == TYPE_NIL:
return
var max_read = 10
if _connection_state == TCONNECTIONSTATE.NOTINITIALISED:
return
@ -286,6 +295,7 @@ func _process(delta):
return
if _queue_message_system.size() > 0:
var msgout = _queue_message_system.pop_front()
if ProjectSettings.get_setting("khaganat/debug_mode"):
print("[net_low_level:_process] Send data system (" + str(msgout.size()) + ", " + msgout.show() + ")" )
_socketUDP.put_packet(msgout.get_data())
@ -298,4 +308,5 @@ func _process(delta):
analyze_message_received(msgbytes)
func _exit_tree():
print("[net_low_level] End")
disconnect_server()

View file

@ -27,7 +27,7 @@ custom_template/debug=""
name="khaganat.linux.32"
platform="Linux/X11"
runnable=true
runnable=false
custom_features=""
export_filter="all_resources"
include_filter=""

View file

@ -64,7 +64,6 @@ custom_colors/font_color = Color( 0.494118, 0.411765, 0.658824, 1 )
custom_colors/font_color_hover = Color( 0.863051, 0.203209, 1, 1 )
custom_colors/font_color_pressed = Color( 0.673295, 0.508021, 1, 1 )
text = "Stop"
[connection signal="item_selected" from="SongsSelector" to="." method="_on_SongsSelector_item_selected"]
[connection signal="toggled" from="Buttons/Pause" to="." method="_on_Pause_toggled"]
[connection signal="pressed" from="Buttons/Stop" to="." method="_on_Stop_pressed"]

View file

@ -11,8 +11,8 @@ func _on_login_button_pressed():
func _on_play_button_pressed():
var username = get_node("h_box_container/v_box_container/margin_container/login_box/email_box/email_edit").get_text();
var password = get_node("h_box_container/v_box_container/margin_container/login_box/password_box/password_edit").get_text();
var username = $h_box_container/v_box_container/margin_container/login_box/email_box/email_edit.get_text();
var password = $h_box_container/v_box_container/margin_container/login_box/password_box/password_edit.get_text();
if username != null and username != "" and password != null and password != "":
do_request_salt(username, password)
@ -24,11 +24,11 @@ func _on_play_without_connexion_pressed():
func do_request_salt(username, password):
#var message = load("res://assets/Scripts/Models/nel_login_message.gd")
var connexion = load("res://assets/Scripts/Config/connexion.gd").connexion.new()
var connexion = preload("res://assets/Scripts/Config/connexion.gd").connexion.new()
#if message:
_username = username
_password = password
var message = load("res://assets/Scripts/Models/nel_login_message.gd").nel_login_message.new("https-login", _username, _password, "Lirria", "2", "en")
var message = preload("res://assets/Scripts/Models/nel_login_message.gd").nel_login_message.new("https-login", _username, _password, "Lirria", "2", "en")
#message = message.nel_login_message.new("https-login", _username, _password, "Lirria", "2", "en")
var url_login = connexion.get_url_login();
$HTTPSalt.request(url_login + "?" + message.get_request_salt());
@ -37,28 +37,41 @@ func do_request_salt(username, password):
func _on_HTTPSalt_request_completed(result, response_code, headers, body):
if response_code != 200 || ProjectSettings.get_setting("kaghanat/debug_mode"):
emit_signal( "login_button_pressed" )
print("[login_menu:_on_HTTPSalt_request_completed] response_code:" + str(response_code))
if response_code != 200: # || ProjectSettings.get_setting("khaganat/debug_mode"):
print("[login_menu:_on_HTTPSalt_request_completed] Impossible to connect")
#emit_signal( "login_button_pressed" )
$error_dialog/v_box_container/label.text = "Impossible to connect"
$error_dialog.popup_centered()
else:
var text = str2var(body.get_string_from_utf8())
var s = body.get_string_from_utf8().split(":")
print("[login_menu:_on_HTTPSalt_request_completed] return:'" + str(text) + "'")
if(s[0] == "1"):
print("[login_menu] salt:'" + str(s[1]) + "'")
var message = load("res://assets/Scripts/Models/nel_login_message.gd").nel_login_message.new("https-login", _username, _password, "Lirria", "2", "en")
var connexion = load("res://assets/Scripts/Config/connexion.gd").connexion.new()
var message = preload("res://assets/Scripts/Models/nel_login_message.gd").nel_login_message.new("https-login", _username, _password, "Lirria", "2", "en")
var connexion = preload("res://assets/Scripts/Config/connexion.gd").connexion.new()
var url_login = connexion.get_url_login();
print("[login_menu] URL:" + url_login + "?" + message.get_request_string(str(s[1])));
$HTTPRequest.request(url_login + "?" + message.get_request_string(str(s[1])));
else:
get_node("error_dialog/v_box_container/label").text = "Impossible de se connecter"
get_node("error_dialog").popup_centered()
print("[login_menu:_on_HTTPSalt_request_completed] error to connect")
var regex = RegEx.new()
regex.compile("^(\\d+)[:](?<comment>.+)$")
var search = regex.search(s[0])
if search:
$error_dialog/v_box_container/label.text = "Impossible to connect\n" + search.get_string("comment")
$error_dialog.popup_centered()
else:
$error_dialog/v_box_container/label.text = "Impossible to connect\n" + str(s[0])
$error_dialog.popup_centered()
return
# Step Login
func do_request(username, password):
var message = load("res://assets/Scripts/Models/nel_login_message.gd")
var connexion = load("res://assets/Scripts/Config/connexion.gd").connexion.new()
var message = preload("res://assets/Scripts/Models/nel_login_message.gd")
var connexion = preload("res://assets/Scripts/Config/connexion.gd").connexion.new()
if message:
var url_login
message = message.nel_login_message.new("https-login", username, password, "Lirria", "2", "en")
@ -68,35 +81,46 @@ func do_request(username, password):
func _on_HTTPRequest_request_completed(result, response_code, headers, body):
if response_code != 200 || ProjectSettings.get_setting("kaghanat/debug_mode"):
emit_signal( "login_button_pressed" )
print("[login_menu:_on_HTTPRequest_request_completed] response_code:" + str(response_code))
if response_code != 200: # || ProjectSettings.get_setting("khaganat/debug_mode"):
# emit_signal( "login_button_pressed" )
print("[login_menu:_on_HTTPRequest_request_completed] Impossible to connect")
$error_dialog/v_box_container/label.text = "Impossible to connect"
$error_dialog.popup_centered()
else:
var text = str2var(body.get_string_from_utf8())
var lines = body.get_string_from_utf8().split("\n")
if lines.size() != 2:
print("[login_menu] Impossible to connect (bad return)")
get_node("error_dialog/v_box_container/label").text = "Impossible to connect (bad return)"
get_node("error_dialog").popup_centered()
$error_dialog/v_box_container/label.text = "Impossible to connect (bad return)"
$error_dialog.popup_centered()
return
var line1 = lines[0].split("#")
var line2 = lines[1].split("#")
#print("[login_menu:_on_HTTPRequest_request_completed] return:'" + str(text) + "'" + str(lines.size()) + "'" + str(line1.size()) + "'" + str(line2.size()))
if line1[0] != "1":
print("[login_menu] Impossible to connect (return" + line1[0] + ")")
get_node("error_dialog/v_box_container/label").text = "Impossible to connect (return :" + str(line1[0]) + ")"
get_node("error_dialog").popup_centered()
var regex = RegEx.new()
regex.compile("^(\\d+)[:](?<comment>.+)$")
var search = regex.search(line1[0])
if search:
$error_dialog/v_box_container/label.text = "Impossible to connect\n" + search.get_string("comment")
$error_dialog.popup_centered()
else:
$error_dialog/v_box_container/label.text = "Impossible to connect\n" + str(line1[0])
$error_dialog.popup_centered()
return
if line1.size() < 5:
print("[login_menu] Impossible to connect (bad return 1st line, size:" + str(line1.size()) + ")")
get_node("error_dialog/v_box_container/label").text = "Impossible to connect (bad return 1st line, size:" + str(line1.size()) + ")"
get_node("error_dialog").popup_centered()
$error_dialog/v_box_container/label.text = "Impossible to connect (bad return 1st line, size:" + str(line1.size()) + ")"
$error_dialog.popup_centered()
return
if line2.size() != 3:
print("[login_menu] Impossible to connect (bad return 2nd line, size:" + str(line2.size()) + ")")
get_node("error_dialog/v_box_container/label").text = "Impossible to connect (bad return 2nd line, size:" + str(line2.size()) + ")"
get_node("error_dialog").popup_centered()
$error_dialog/v_box_container/label.text = "Impossible to connect (bad return 2nd line, size:" + str(line2.size()) + ")"
$error_dialog.popup_centered()
return
var server_info_script = load("res://assets/Scripts/Models/nel_server_info.gd");
var server_info_script = preload("res://assets/Scripts/Models/nel_server_info.gd");
print("[login_menu] " + str(body.get_string_from_utf8()))
var state = line1[0]
var cookie = line1[1]
@ -115,8 +139,8 @@ func _on_HTTPRequest_request_completed(result, response_code, headers, body):
var cookieSplit = cookie.split("|")
if cookieSplit.size() != 3:
get_node("error_dialog/v_box_container/label").text = "Impossible de se connecter (bad cookies size:" + str(cookieSplit.size()) + ")"
get_node("error_dialog").popup_centered()
$error_dialog/v_box_container/label.text = "Impossible de se connecter (bad cookies size:" + str(cookieSplit.size()) + ")"
$error_dialog.popup_centered()
return
var UserAddr = cookieSplit[0]
var UserKey = cookieSplit[1]
@ -129,6 +153,7 @@ func _on_HTTPRequest_request_completed(result, response_code, headers, body):
emit_signal( "login_button_pressed" )
func _make_post_request(url, data_to_send, use_ssl):
# Convert data to json string:
var query = JSON.print(data_to_send)

View file

@ -215,7 +215,6 @@ margin_bottom = 33.0
size_flags_horizontal = 4
size_flags_vertical = 4
text = "Ok"
[connection signal="request_completed" from="HTTPSalt" to="." method="_on_HTTPSalt_request_completed"]
[connection signal="request_completed" from="HTTPRequest" to="." method="_on_HTTPRequest_request_completed"]
[connection signal="pressed" from="h_box_container/v_box_container/margin_container/login_box/email_box/email_label_box/register_button" to="." method="_on_register_button_pressed"]

View file

@ -53,12 +53,12 @@ func do_enable_register_button():
func _on_play_button_pressed():
var username = get_node("h_box_container/v_box_container/center_container/register_box/login_box/login_edit").get_text();
var password = get_node("h_box_container/v_box_container/center_container/register_box/password_box/password_edit").get_text();
var confirmed = get_node("h_box_container/v_box_container/center_container/register_box/password_confirm_box/password_edit").get_text();
var email = get_node("h_box_container/v_box_container/center_container/register_box/email_box/email_edit").get_text();
var cur_state = get_node('h_box_container/v_box_container/center_container/register_box/license_box/check_box').is_pressed()
var enregister = get_node('h_box_container/v_box_container/center_container/register_box/h_box_container/register_button2')
var username = $h_box_container/v_box_container/center_container/register_box/login_box/login_edit.get_text();
var password = $h_box_container/v_box_container/center_container/register_box/password_box/password_edit.get_text();
var confirmed = $h_box_container/v_box_container/center_container/register_box/password_confirm_box/password_edit.get_text();
var email = $h_box_container/v_box_container/center_container/register_box/email_box/email_edit.get_text();
var cur_state = $h_box_container/v_box_container/center_container/register_box/license_box/check_box.is_pressed()
var enregister = $h_box_container/v_box_container/center_container/register_box/h_box_container/register_button2
var tac = "off";
if cur_state == true:
tac = "on";
@ -102,12 +102,12 @@ func do_request(username, password, confirmed, email, tac):
func _on_HTTPRequest_request_completed( result, response_code, headers, body ):
var pos
var search
var enregister = get_node('h_box_container/v_box_container/center_container/register_box/h_box_container/register_button2')
var comment_last = get_node('h_box_container/v_box_container/center_container/register_box/comment_last')
var comment_username = get_node('h_box_container/v_box_container/center_container/register_box/login_box/comment')
var comment_password = get_node('h_box_container/v_box_container/center_container/register_box/password_box/comment')
var comment_confirm_password = get_node('h_box_container/v_box_container/center_container/register_box/password_confirm_box/comment')
var comment_email = get_node('h_box_container/v_box_container/center_container/register_box/email_box/comment')
var enregister = $h_box_container/v_box_container/center_container/register_box/h_box_container/register_button2
var comment_last = $h_box_container/v_box_container/center_container/register_box/comment_last
var comment_username = $h_box_container/v_box_container/center_container/register_box/login_box/comment
var comment_password = $h_box_container/v_box_container/center_container/register_box/password_box/comment
var comment_confirm_password = $h_box_container/v_box_container/center_container/register_box/password_confirm_box/comment
var comment_email = $h_box_container/v_box_container/center_container/register_box/email_box/comment
var regex = RegEx.new()
comment_username.text = ""
@ -135,7 +135,7 @@ func _on_HTTPRequest_request_completed( result, response_code, headers, body ):
get_node("wait_dialog").hide()
var text = str2var(body.get_string_from_utf8())
regex.compile("(\\d+)")
regex.compile("^(\\d+)[:]")
var tab = text.split(":", true,2)
if tab.size() > 1 :
if regex.search(tab[0]):
@ -145,6 +145,7 @@ func _on_HTTPRequest_request_completed( result, response_code, headers, body ):
get_node("wait_dialog").hide()
get_node("error_dialog/v_box_container/label").text = "Serveur a renvoyé une erreur\nCode retour:" + str(tab[0]) + "\nMessage:" + tab[1]
get_node("error_dialog").popup_centered()
print("[Register] Failed to register (Code retour:" + str(tab[0]) + ", message:" + tab[1] +")")
return
tab = text.rsplit("\n")

View file

@ -28,7 +28,6 @@ expand = true
stretch_mode = 7
[node name="h_box_container" type="HBoxContainer" parent="."]
editor/display_folded = true
anchor_right = 1.0
anchor_bottom = 1.0
@ -342,7 +341,6 @@ margin_bottom = 114.0
size_flags_horizontal = 4
size_flags_vertical = 4
text = "Ok"
[connection signal="request_completed" from="HTTPRequest" to="." method="_on_HTTPRequest_request_completed"]
[connection signal="text_changed" from="h_box_container/v_box_container/center_container/register_box/login_box/login_edit" to="." method="_on_login_edit_text_changed"]
[connection signal="text_changed" from="h_box_container/v_box_container/center_container/register_box/password_box/password_edit" to="." method="_on_password_edit_text_changed"]

View file

@ -84,3 +84,7 @@ func _on_AlwaysOnTop_toggled(button_pressed):
func _on_SpinBox_value_changed(value):
OS.current_screen = value
func _on_FluteButton_pressed():
pass # Replace with function body.

File diff suppressed because it is too large Load diff