extends Control @onready var search_list := $ScrollContainer/VBoxContainer @onready var clear_button := $ClearButton @onready var close_button := $CloseButton @onready var search_bar := $Searchbar var games := [] # Called when the node enters the scene tree for the first time. func _ready(): get_list_of_games() clear_button.pressed.connect(clear) close_button.pressed.connect(close) search_bar.grab_focus() search_bar.text_changed.connect(search) visibility_changed.connect(focus) func focus(): if self.visible == true: search_bar.grab_focus() func close(): clear() self.visible = false func search(): print(search_bar.text) delete_children(search_list) for game in games: if is_match(search_bar.text, game): var label := Label.new() label.text = game label.autowrap_mode = TextServer.AUTOWRAP_WORD search_list.add_child(label) func is_match(search_term: String, game_name: String) -> bool: search_term = search_term.replace(" ", "").replace("é", "e").to_lower() game_name = game_name.replace(" ", "").replace("é", "e").to_lower() if search_term == "": return true elif compile_regex(search_term).search(game_name): return true else: return false func compile_regex(search_term: String) -> RegEx: var regex = RegEx.new() var regText: String = ".*" for letter in search_term: regText += letter + ".*" print(regText) regex.compile(regText) return regex func delete_children(node): for n in node.get_children(): node.remove_child(n) n.queue_free() func get_list_of_games() -> void: var http_request = HTTPRequest.new() add_child(http_request) http_request.request_completed.connect(self._http_request_completed) # Perform a GET request. The URL below returns JSON as of writing. var error = http_request.request(Settings.default_path + "/music/all/order") if error != OK: push_error("An error occurred in the HTTP request.") # Called when the HTTP request is completed. func _http_request_completed(_result, _response_code, _headers, body): var json = JSON.new() var error = json.parse(body.get_string_from_utf8()) if error == OK: var data_received = json.get_data() if typeof(data_received) == TYPE_ARRAY: games.append_array(data_received) for game in games: var label := Label.new() label.text = game label.autowrap_mode = TextServer.AUTOWRAP_WORD search_list.add_child(label) else: print("Unexpected data") func clear(): search_bar.text = "" search() search_bar.grab_focus()