124 lines
2.8 KiB
GDScript
124 lines
2.8 KiB
GDScript
extends Button
|
|
|
|
|
|
signal input_validated(player)
|
|
|
|
|
|
func is_valid_name(name: String) -> bool:
|
|
if name.strip_edges() == "":
|
|
print_debug("Name is empty!")
|
|
return false
|
|
if name.split(" ").size() == 1:
|
|
print_debug("Doesn't contain at least a first and last name!")
|
|
return false
|
|
return true
|
|
|
|
|
|
func is_valid_rut(rut: String) -> bool:
|
|
var rut_node = get_node("%Rut")
|
|
rut = rut_node.clean_rut(rut)
|
|
if rut.length() < 8 or rut.length() > 9:
|
|
print_debug("RUT length is invalid!")
|
|
return false
|
|
|
|
var rut_temp: String = rut.substr(0, rut.length() - 1)
|
|
var verifier: String = rut.substr(rut.length() - 1, 1)
|
|
|
|
if not rut_temp.is_valid_integer():
|
|
print_debug("RUT isn't a valid integer!")
|
|
return false
|
|
|
|
if rut_temp.to_int() > 50000000:
|
|
print_debug("RUT is too large, that is a company!")
|
|
return false
|
|
|
|
if verifier != generate_verifier(rut_temp):
|
|
return false
|
|
|
|
return true
|
|
|
|
|
|
func generate_verifier(rut: String) -> String:
|
|
if not rut.is_valid_integer():
|
|
print_debug("RUT isn't a valid integer!")
|
|
return ""
|
|
|
|
var multiplier: int = 2
|
|
var sum: int = 0
|
|
var remainder: int = 0
|
|
var division: int = 0
|
|
var rut_length: int = rut.length()
|
|
|
|
var i: int = rut_length - 1
|
|
while i >= 0:
|
|
sum = sum + rut.substr(i, 1).to_int() * multiplier
|
|
multiplier = multiplier + 1
|
|
if multiplier == 8:
|
|
multiplier = 2
|
|
i = i - 1
|
|
|
|
var tempSum: float = sum
|
|
division = int(floor(tempSum / 11))
|
|
division = division * 11
|
|
remainder = sum - division
|
|
|
|
if remainder != 0:
|
|
remainder = 11 - remainder
|
|
|
|
if remainder == 10:
|
|
return "k"
|
|
else:
|
|
return String(remainder)
|
|
|
|
|
|
func is_valid_email(email: String) -> bool:
|
|
var regex = RegEx.new()
|
|
regex.compile("\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+")
|
|
if regex.search(email) == null:
|
|
print_debug("Isn't a valid email address!")
|
|
return false
|
|
return true
|
|
|
|
|
|
func _on_Button_pressed() -> void:
|
|
var name = get_node("%Name")
|
|
var rut = get_node("%Rut")
|
|
var email = get_node("%Email")
|
|
var player: Dictionary = {
|
|
"name" : name.text,
|
|
"rut" : get_node("%Rut").clean_rut(rut.text),
|
|
"email" : email.text
|
|
}
|
|
|
|
if not is_valid_name(player.name):
|
|
show_error_message("Ingresa un nombre completo valido por favor!")
|
|
return
|
|
|
|
if not is_valid_rut(player.rut):
|
|
show_error_message("Ingresa un RUT valido por favor!")
|
|
return
|
|
|
|
if not is_valid_email(player.email):
|
|
show_error_message("Ingresa un email valido por favor!")
|
|
return
|
|
|
|
emit_signal("input_validated", player)
|
|
|
|
|
|
func show_error_message(message: String) -> void:
|
|
var popup = get_node("%PopupDialog")
|
|
popup.get_node("ErrorMessage").text = message
|
|
popup.popup()
|
|
popup.focus_mode = Control.FOCUS_ALL
|
|
popup.grab_focus()
|
|
|
|
|
|
func _on_PopupDialog_gui_input(event: InputEvent) -> void:
|
|
var popup = get_node("%PopupDialog")
|
|
if popup.visible and event.is_pressed():
|
|
popup.call_deferred("hide")
|
|
|
|
|
|
func _on_text_entered(_new_text: String) -> void:
|
|
call_deferred("_on_Button_pressed")
|