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() -> void: 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() -> void: if self.visible == true: search_bar.grab_focus() clear() func close() -> void: clear() self.visible = false func search() -> void: print(search_bar.text) Settings.delete_children(search_list) for game: String in games: if is_match_exact(search_bar.text, game): add_game(game) for game: String in games: if is_match_contains(clean_term(search_bar.text), clean_term(game)): add_game(game) for game: String in games: if is_match_regex(clean_term(search_bar.text), clean_term(game)): add_game(game) func clean_term(term: String) -> String: return term.replace(" ", "").replace("é", "e").replace("+", "plus").replace("&", "and").replace("'n", "and").to_lower() func is_match_exact(search_term: String, game_name: String) -> bool: search_term = search_term.to_lower() game_name = game_name.to_lower() if search_term == "": return true elif game_name.contains(search_term): return true else: return false func is_match_contains(search_term: String, game_name: String) -> bool: if search_term == "": return true elif game_name.contains(search_term): return true else: return false func is_match_regex(search_term: String, game_name: String) -> bool: if search_term == "": return true elif compile_regex(search_term).search(game_name): return true else: return false func add_game(game: String) -> void: var label := Label.new() label.text = game print("game: " + game) label.autowrap_mode = TextServer.AUTOWRAP_WORD if !check_if_game_exists(game): search_list.add_child(label) func check_if_game_exists(game: String) -> bool: var game_exists: bool = false for child: Label in search_list.get_children(): if child.text == game: game_exists = true return game_exists func compile_regex(search_term: String) -> RegEx: var regex = RegEx.new() var regText: String = ".*" for letter in search_term: regText += letter + ".*" regex.compile(regText) return regex func get_list_of_games() -> void: print("get_list_of_games") var handle_games = func handle_games(array): if typeof(array) == TYPE_ARRAY: games = [] Settings.delete_children(search_list) games.append_array(array) 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") Settings.make_request2("/music/all/order", handle_games, true) func clear() -> void: search_bar.text = "" search() search_bar.grab_focus()