How to make a keypad code "simpler?"

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By Zedespook

So, currently I feel like this code for the keypad is too… much… Any ideas how to make the code just a little bit shorter?

The node order:

extends Control

func _on_Nine_button_up() -> void:
	if $KeyHolder/TextHolder/InputText.text.length() == 4:
		return
	if $KeyHolder/TextHolder/InputText.text.length() > 4:
		$KeyHolder/TextHolder/InputText.text = ""
	$KeyHolder/TextHolder/InputText.text += "9"


func _on_Eight_button_up() -> void:
	if $KeyHolder/TextHolder/InputText.text.length() == 4:
		return
	if $KeyHolder/TextHolder/InputText.text.length() > 4:
		$KeyHolder/TextHolder/InputText.text = ""
	$KeyHolder/TextHolder/InputText.text += "8"


func _on_Seven_button_up() -> void:
	if $KeyHolder/TextHolder/InputText.text.length() == 4:
		return
	if $KeyHolder/TextHolder/InputText.text.length() > 4:
		$KeyHolder/TextHolder/InputText.text = ""
	$KeyHolder/TextHolder/InputText.text += "7"


func _on_Six_button_up() -> void:
	if $KeyHolder/TextHolder/InputText.text.length() == 4:
		return
	if $KeyHolder/TextHolder/InputText.text.length() > 4:
		$KeyHolder/TextHolder/InputText.text = ""
	$KeyHolder/TextHolder/InputText.text += "6"


func _on_Five_button_up() -> void:
	if $KeyHolder/TextHolder/InputText.text.length() == 4:
		return
	if $KeyHolder/TextHolder/InputText.text.length() > 4:
		$KeyHolder/TextHolder/InputText.text = ""
	$KeyHolder/TextHolder/InputText.text += "5"


func _on_Four_button_up() -> void:
	if $KeyHolder/TextHolder/InputText.text.length() == 4:
		return
	if $KeyHolder/TextHolder/InputText.text.length() > 4:
		$KeyHolder/TextHolder/InputText.text = ""
	$KeyHolder/TextHolder/InputText.text += "4"


func _on_Three_button_up() -> void:
	if $KeyHolder/TextHolder/InputText.text.length() == 4:
		return
	if $KeyHolder/TextHolder/InputText.text.length() > 4:
		$KeyHolder/TextHolder/InputText.text = ""
	$KeyHolder/TextHolder/InputText.text += "3"


func _on_Two_button_up() -> void:
	if $KeyHolder/TextHolder/InputText.text.length() == 4:
		return
	if $KeyHolder/TextHolder/InputText.text.length() > 4:
		$KeyHolder/TextHolder/InputText.text = ""
	$KeyHolder/TextHolder/InputText.text += "2"


func _on_One_button_up() -> void:
	if $KeyHolder/TextHolder/InputText.text.length() == 4:
		return
	if $KeyHolder/TextHolder/InputText.text.length() > 4:
		$KeyHolder/TextHolder/InputText.text = ""
	$KeyHolder/TextHolder/InputText.text += "1"


func _on_Enter_button_up() -> void:
	if $KeyHolder/TextHolder/InputText.text == "6969":
		$KeyHolder/TextHolder/InputText.text = ""
		$KeyHolder/TextHolder/InputText.text = "Success!"
	else:
		$KeyHolder/TextHolder/InputText.text = ""
		$KeyHolder/TextHolder/InputText.text = "Failed!"


func _on_Clear_button_up() -> void:
	$KeyHolder/TextHolder/InputText.text = ""
:bust_in_silhouette: Reply From: exuin

You've got a lot of repeated code here. gdsad That's a sign that you can just make one function and reuse the code from it. Additionally, you can connect all of your buttons to the that same function and pass what you add to the InputText as an argument. Also, you can store a reference to the InputText node in a variable so you don't have to get it with $ every time.

I don’t know any way to pass an argument to a signal.

Zedespook | 2021-03-14 07:41