From ae7b3cfeca8f584e9226cbcad5410704aef8c523 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Fri, 25 Apr 2025 15:52:07 +0200 Subject: [PATCH] Cleaning --- .../environment_switcher.gd | 8 +-- .../export_tool_manager_plugin.gd | 4 +- .../rules/not_empty_rule.gd | 2 +- project.godot | 2 + .../audio_buses/main_audio_bus_layout.tres | 7 ++- resources/gardens/garden.gd | 32 ++++++------ resources/gardens/garden_layout.gd | 6 +-- .../language_tool/fish_word_list_element.gd | 4 +- sources/language_tool/gp_list.gd | 22 ++++---- sources/language_tool/gp_list_element.gd | 1 + .../image_and_sound_gp_description.gd | 4 +- sources/language_tool/in_game_sounds.gd | 2 +- sources/language_tool/list_title.gd | 1 + sources/language_tool/prof_tool_menu.gd | 52 +++++++++---------- sources/language_tool/segment_build.gd | 2 +- .../language_tool/sentence_list_element.gd | 16 +++--- sources/language_tool/word_list.gd | 28 +++++----- .../language_selection/package_downloader.gd | 1 - sources/menus/register/register.gd | 12 ++--- sources/menus/register/steps/base_step.gd | 8 +-- .../menus/register/steps/credentials_step.gd | 2 +- sources/menus/register/steps/device_recap.gd | 2 +- .../register/steps/general_conditions_step.gd | 4 +- sources/menus/register/steps/recap_step.gd | 2 +- .../steps/validation/item_list_validator.gd | 2 +- sources/utils/autoloads/Database.gd | 2 +- sources/utils/autoloads/Logger.gd | 12 ++--- sources/utils/autoloads/lesson_logger.gd | 4 +- sources/utils/autoloads/music_manager.gd | 2 +- sources/utils/binder/control_binder.gd | 6 +-- sources/utils/binder/form_binder.gd | 2 +- sources/utils/dynamic_font_size_label.gd | 25 ++++----- sources/utils/minigame_resources/log.gd | 8 +-- 33 files changed, 144 insertions(+), 143 deletions(-) diff --git a/addons/EnvironmentSwitcher/environment_switcher.gd b/addons/EnvironmentSwitcher/environment_switcher.gd index feec9e3e..bdf415f2 100644 --- a/addons/EnvironmentSwitcher/environment_switcher.gd +++ b/addons/EnvironmentSwitcher/environment_switcher.gd @@ -8,7 +8,7 @@ const CONFIG_PATH := "user://environment.cfg" var env_selector: OptionButton var current_environment: EnvType = EnvType.DEV -func _enter_tree(): +func _enter_tree() -> void: # Create OptionButton env_selector = OptionButton.new() env_selector.name = "Env Selector" @@ -25,7 +25,7 @@ func _enter_tree(): # Reflect the current environment in UI env_selector.select(current_environment) -func _exit_tree(): +func _exit_tree() -> void: # Clean up the UI and save state remove_control_from_container(EditorPlugin.CONTAINER_TOOLBAR, env_selector) env_selector.queue_free() @@ -41,12 +41,12 @@ func _environment_to_string(env: EnvType) -> String: EnvType.PROD: return "PROD" _: return "Unknown" -func save_environment(): +func save_environment() -> void: var config = ConfigFile.new() config.set_value("environment", "current", str(current_environment)) config.save(CONFIG_PATH) -func load_environment(): +func load_environment() -> void: var config = ConfigFile.new() if config.load(CONFIG_PATH) == OK: var env = config.get_value("environment", "current", str(EnvType.DEV)) diff --git a/addons/export_tool_manager/export_tool_manager_plugin.gd b/addons/export_tool_manager/export_tool_manager_plugin.gd index dd3e4910..864aa35c 100644 --- a/addons/export_tool_manager/export_tool_manager_plugin.gd +++ b/addons/export_tool_manager/export_tool_manager_plugin.gd @@ -6,7 +6,7 @@ const EXPORTER_PATH: String = "res://addons/export_tool_manager/export_tool_expo var tool_selector: OptionButton var exporter_plugin: EditorExportPlugin -func _enter_tree(): +func _enter_tree() -> void: tool_selector = OptionButton.new() tool_selector.name = "Tool Exporter" tool_selector.add_item("Game") @@ -32,7 +32,7 @@ func _enter_tree(): exporter_plugin = load(EXPORTER_PATH).new() add_export_plugin(exporter_plugin) -func _exit_tree(): +func _exit_tree() -> void: remove_control_from_container(EditorPlugin.CONTAINER_TOOLBAR, tool_selector) if exporter_plugin: remove_export_plugin(exporter_plugin) diff --git a/addons/godot-form-validator/rules/not_empty_rule.gd b/addons/godot-form-validator/rules/not_empty_rule.gd index e8db0100..e673d88f 100644 --- a/addons/godot-form-validator/rules/not_empty_rule.gd +++ b/addons/godot-form-validator/rules/not_empty_rule.gd @@ -8,7 +8,7 @@ func _init() -> void: func apply(control: Control, value) -> RuleResult: - var result = RuleResult.new() + var result: RuleResult = RuleResult.new() if value is String: result.passed = ValidatorFunctions.not_empty(value) if not result.passed: diff --git a/project.godot b/project.godot index a7da413f..0d77990e 100644 --- a/project.godot +++ b/project.godot @@ -38,8 +38,10 @@ Logger="*res://sources/utils/autoloads/Logger.gd" [debug] gdscript/warnings/untyped_declaration=1 +gdscript/warnings/inferred_declaration=1 gdscript/warnings/unsafe_property_access=1 gdscript/warnings/unsafe_method_access=1 +gdscript/warnings/unsafe_cast=1 gdscript/warnings/unsafe_call_argument=1 [display] diff --git a/resources/audio_buses/main_audio_bus_layout.tres b/resources/audio_buses/main_audio_bus_layout.tres index 158983f7..4fc1605f 100644 --- a/resources/audio_buses/main_audio_bus_layout.tres +++ b/resources/audio_buses/main_audio_bus_layout.tres @@ -1,22 +1,21 @@ [gd_resource type="AudioBusLayout" format=3 uid="uid://crtt36bkguxm5"] [resource] -bus/0/volume_db = 0.0788927 bus/1/name = &"Music" bus/1/solo = false bus/1/mute = false bus/1/bypass_fx = false -bus/1/volume_db = -29.4736 +bus/1/volume_db = -5.0 bus/1/send = &"Master" bus/2/name = &"Voice" bus/2/solo = false bus/2/mute = false bus/2/bypass_fx = false -bus/2/volume_db = 0.0788927 +bus/2/volume_db = 0.0 bus/2/send = &"Master" bus/3/name = &"Effects" bus/3/solo = false bus/3/mute = false bus/3/bypass_fx = false -bus/3/volume_db = -3.41635 +bus/3/volume_db = -5.0 bus/3/send = &"Master" diff --git a/resources/gardens/garden.gd b/resources/gardens/garden.gd index b899117b..c64f522e 100644 --- a/resources/gardens/garden.gd +++ b/resources/gardens/garden.gd @@ -6,8 +6,8 @@ class_name Garden const GardenFlower: = preload("res://resources/gardens/garden_flower.gd") const LessonButton: = preload("res://sources/lesson_screen/lesson_button.gd") -const flower_path_model: = "res://assets/gardens/flowers/Plant_%02d_%02d_%s.png" -const background_path_model: = "res://assets/gardens/gardens/garden_%02d_open.png" +const flower_path_model: String = "res://assets/gardens/flowers/Plant_%02d_%02d_%s.png" +const background_path_model: String = "res://assets/gardens/gardens/garden_%02d_open.png" @export var garden_layout: GardenLayout: set = set_garden_layout @@ -41,8 +41,8 @@ var flowers: Array[GardenLayout.Flower] var flowers_sizes: Array[FlowerSizes] var color: Color -var current_progression: = 0.0 -var max_progression: = 0.0 +var current_progression: float = 0.0 +var max_progression: float = 0.0 var garden_index: int = -1 @@ -61,7 +61,7 @@ func set_flowers(p_flowers: Array[GardenLayout.Flower], default_size: FlowerSize flowers = p_flowers flowers_sizes = [] - for _i in range(flowers.size()): + for _i: int in range(flowers.size()): flowers_sizes.append(default_size) update_flowers() @@ -71,8 +71,8 @@ func update_flowers() -> void: for index: int in flowers.size(): if index >= flower_controls.size(): break - var flower: = flowers[index] - var flower_scene: = flower_controls[index] + var flower: GardenLayout.Flower = flowers[index] + var flower_scene: TextureRect = flower_controls[index] var flower_size: String = FlowerSizes.keys()[flowers_sizes[index]] flower_scene.texture = load(flower_path_model % [flower.color+1, flower.type+1, flower_size]) @@ -82,13 +82,13 @@ func update_flowers() -> void: func set_lesson_buttons(p_lesson_buttons: Array[GardenLayout.LessonButton]) -> void: - for lesson_button_control in lesson_button_controls: + for lesson_button_control: LessonButton in lesson_button_controls: lesson_button_control.visible = false for index: int in p_lesson_buttons.size(): if index >= lesson_button_controls.size(): break - var lesson_button: = p_lesson_buttons[index] - var lesson_button_control: = lesson_button_controls[index] + var lesson_button: GardenLayout.LessonButton = p_lesson_buttons[index] + var lesson_button_control: LessonButton = lesson_button_controls[index] lesson_button_control.position = Vector2(lesson_button.position) lesson_button_control.visible = true lesson_button_control.pivot_offset = lesson_button_control.size / 2 @@ -100,7 +100,7 @@ func set_background(p_color: int) -> void: background.texture = load(background_path_model % [p_color+1]) color = garden_colors[p_color] - for button in lesson_button_controls: + for button: LessonButton in lesson_button_controls: button.completed_color = color @@ -114,20 +114,20 @@ func set_lesson_label(ind: int, text: String) -> void: func pop_animation() -> void: - var tween: = create_tween() + var tween: Tween = create_tween() tween.set_parallel(true) - for flower_control in flower_controls: + for flower_control: TextureRect in flower_controls: tween.tween_property(flower_control, "scale", Vector2(0, 0), 0.1) - for lesson_button_control in lesson_button_controls: + for lesson_button_control: LessonButton in lesson_button_controls: tween.tween_property(lesson_button_control, "scale", Vector2(0.7, 0.7), 0.1) await tween.finished tween = create_tween() tween.set_parallel(true) tween.set_ease(Tween.EASE_OUT) tween.set_trans(Tween.TRANS_BOUNCE) - for flower_control in flower_controls: + for flower_control: TextureRect in flower_controls: tween.tween_property(flower_control, "scale", Vector2(1., 1.), 0.9) - for lesson_button_control in lesson_button_controls: + for lesson_button_control: LessonButton in lesson_button_controls: tween.tween_property(lesson_button_control, "scale", Vector2(1., 1.), 0.9) diff --git a/resources/gardens/garden_layout.gd b/resources/gardens/garden_layout.gd index 588b93de..1c57db83 100644 --- a/resources/gardens/garden_layout.gd +++ b/resources/gardens/garden_layout.gd @@ -4,9 +4,9 @@ class_name GardenLayout class Flower: - var color: = 0 - var type: = 0 - var position: = Vector2i.ZERO + var color: int = 0 + var type: int = 0 + var position: Vector2 = Vector2i.ZERO func _init(p_color: int = 0, p_type: int = 0, p_position: Vector2i = Vector2i.ZERO) -> void: color = p_color diff --git a/sources/language_tool/fish_word_list_element.gd b/sources/language_tool/fish_word_list_element.gd index c176dfcf..ec49d65f 100644 --- a/sources/language_tool/fish_word_list_element.gd +++ b/sources/language_tool/fish_word_list_element.gd @@ -39,8 +39,8 @@ func set_lesson_nb(p_lesson_nb: int) -> void: func set_word_list(word_list: Array) -> void: - for word: Dictionary in word_list: - option_button.add_item(word.Word as String, word.ID as int) + for word_dic: Dictionary in word_list: + option_button.add_item(word_dic.Word as String, word_dic.ID as int) func _on_option_button_item_selected(index: int) -> void: diff --git a/sources/language_tool/gp_list.gd b/sources/language_tool/gp_list.gd index 2564214f..190abb24 100644 --- a/sources/language_tool/gp_list.gd +++ b/sources/language_tool/gp_list.gd @@ -2,8 +2,8 @@ extends Control var element_scene: = preload("res://sources/language_tool/gp_list_element.tscn") -@onready var elements_container: = %ElementsContainer -@onready var error_label: = %ErrorLabel +@onready var elements_container: VBoxContainer = %ElementsContainer +@onready var error_label: Label = %ErrorLabel var undo_redo: = UndoRedo.new() @@ -13,7 +13,7 @@ func _ready() -> void: Database.db.query(query) var result: = Database.db.query_result for e in result: - var element: = element_scene.instantiate() + var element: GPListElement = element_scene.instantiate() element.grapheme = e.Grapheme element.phoneme = e.Phoneme element.type = e.Type @@ -23,7 +23,7 @@ func _ready() -> void: elements_container.add_child(element) element.delete_pressed.connect(_on_element_delete_pressed.bind(element)) - for pseudo_button in [%Grapheme, %Phoneme, %Type]: + for pseudo_button: Label in [%Grapheme, %Phoneme, %Type]: pseudo_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND @@ -36,10 +36,10 @@ func _input(event: InputEvent) -> void: func _on_plus_button_pressed() -> void: undo_redo.create_action("add") - var element: = element_scene.instantiate() + var element: GPListElement = element_scene.instantiate() element.grapheme = "" element.phoneme = "" - element.type = 0 + element.type = GPListElement.Type.Silent element.exception = false element.undo_redo = undo_redo element.delete_pressed.connect(_on_element_delete_pressed.bind(element)) @@ -51,14 +51,14 @@ func _on_plus_button_pressed() -> void: func _on_save_button_pressed() -> void: - for element in elements_container.get_children(): + for element: GPListElement in elements_container.get_children(): element.insert_in_database() var query: = "Select * FROM GPs" Database.db.query(query) var result: = Database.db.query_result for e in result: var found: = false - for element in elements_container.get_children(): + for element: GPListElement in elements_container.get_children(): if element.grapheme == e.Grapheme and element.phoneme == e.Phoneme and element.type == e.Type and element.exception == e.Exception: found = true break @@ -117,8 +117,8 @@ func _on_list_title_back_pressed() -> void: func _on_list_title_new_search(new_text: String) -> void: - for e in elements_container.get_children(): - e.visible = e.grapheme.begins_with(new_text) + for element: GPListElement in elements_container.get_children(): + element.visible = element.grapheme.begins_with(new_text) func _on_list_title_save_pressed() -> void: @@ -132,7 +132,6 @@ func _on_list_title_import_path_selected(path: String, match_to_file: bool) -> v error_label.text = "Column names should be Grapheme, Phoneme, Type, Exception" return var types_text: = ["Silent", "Vowel", "Consonant"] - var insert_count: = 0 var all_data: = {} while not file.eof_reached(): line = file.get_csv_line() @@ -151,7 +150,6 @@ func _on_list_title_import_path_selected(path: String, match_to_file: bool) -> v Type = type, Exception = line[3] }) - insert_count += 1 get_tree().reload_current_scene() if match_to_file: diff --git a/sources/language_tool/gp_list_element.gd b/sources/language_tool/gp_list_element.gd index c6b49297..a567e5ce 100644 --- a/sources/language_tool/gp_list_element.gd +++ b/sources/language_tool/gp_list_element.gd @@ -1,4 +1,5 @@ extends MarginContainer +class_name GPListElement signal delete_pressed() signal validated() diff --git a/sources/language_tool/image_and_sound_gp_description.gd b/sources/language_tool/image_and_sound_gp_description.gd index 772d8f4b..838e032e 100644 --- a/sources/language_tool/image_and_sound_gp_description.gd +++ b/sources/language_tool/image_and_sound_gp_description.gd @@ -125,7 +125,7 @@ func _on_sound_preview_pressed() -> void: sound_player.play() -func _on_image_clear_button_pressed(): +func _on_image_clear_button_pressed() -> void: var current_file: String = get_image_path.call(gp) if FileAccess.file_exists(current_file): DirAccess.remove_absolute(current_file) @@ -133,7 +133,7 @@ func _on_image_clear_button_pressed(): set_image_preview("") -func _on_sound_clear_button_pressed(): +func _on_sound_clear_button_pressed() -> void: var current_file: String = get_sound_path.call(gp) if FileAccess.file_exists(current_file): DirAccess.remove_absolute(current_file) diff --git a/sources/language_tool/in_game_sounds.gd b/sources/language_tool/in_game_sounds.gd index 0385aa9f..eff8f62b 100644 --- a/sources/language_tool/in_game_sounds.gd +++ b/sources/language_tool/in_game_sounds.gd @@ -2,7 +2,7 @@ extends GPImageAndSoundDescriptions -func _ready(): +func _ready() -> void: DirAccess.make_dir_recursive_absolute(Database.base_path + Database.language + Database.language_sounds) Database.db.query("SELECT * FROM GPs WHERE GPs.Exception=0") diff --git a/sources/language_tool/list_title.gd b/sources/language_tool/list_title.gd index 12db5c66..875972ee 100644 --- a/sources/language_tool/list_title.gd +++ b/sources/language_tool/list_title.gd @@ -1,4 +1,5 @@ extends MarginContainer +class_name ListTitle signal add_pressed() signal save_pressed() diff --git a/sources/language_tool/prof_tool_menu.gd b/sources/language_tool/prof_tool_menu.gd index 60eadc16..fa92af3c 100644 --- a/sources/language_tool/prof_tool_menu.gd +++ b/sources/language_tool/prof_tool_menu.gd @@ -403,22 +403,22 @@ func _create_words_csv() -> void: GROUP BY Words.ID" Database.db.query(query) var result: = Database.db.query_result - for e in result: + for element: Dictionary in result: var gpmatch: = "(" - var graphemes: PackedStringArray = (e.Graphemes as String).split(" ") - var phonemes: PackedStringArray = (e.Phonemes as String).split(" ") + var graphemes: PackedStringArray = (element.Graphemes as String).split(" ") + var phonemes: PackedStringArray = (element.Phonemes as String).split(" ") for index: int in graphemes.size() - 1: gpmatch += graphemes[index] + "-" + phonemes[index] + "." var index: int = graphemes.size() - 1 gpmatch += graphemes[index] + "-" + phonemes[index] + ")" var lesson: = -1 - for gp_id: String in e.GPIDs.split(' '): + for gp_id: String in element.GPIDs.split(' '): var gp_id_lesson: = Database.get_min_lesson_for_gp_id(int(gp_id)) if gp_id_lesson < 0: lesson = -1 break lesson = max(lesson, gp_id_lesson) - gp_list_file.store_csv_line([e.Word, gpmatch, lesson, e.Reading, e.Writing]) + gp_list_file.store_csv_line([element.Word, gpmatch, lesson, element.Reading, element.Writing]) func _create_syllable_csv() -> void: @@ -440,7 +440,7 @@ func _create_syllable_csv() -> void: var i: = graphemes.size() - 1 gpmatch += graphemes[i] + "-" + phonemes[i] + ")" var lesson: = -1 - for gp_id in e.GPIDs.split(' '): + for gp_id: String in e.GPIDs.split(' '): var gp_id_lesson: = Database.get_min_lesson_for_gp_id(int(gp_id)) if gp_id_lesson < 0: lesson = -1 @@ -458,16 +458,16 @@ func _create_sentence_csv() -> void: INNER JOIN Words ON Words.ID = WordsInSentences.WordID GROUP BY Sentences.ID" Database.db.query(query) - var result: = Database.db.query_result - for e in result: + var result: Array[Dictionary] = Database.db.query_result + for element: Dictionary in result: var lesson: = -1 - for word_id in e.WordIDs.split(' '): + for word_id: String in element.WordIDs.split(' '): var i: = Database.get_min_lesson_for_word_id(int(word_id)) if i < 0: lesson = -1 break lesson = max(lesson, i) - gp_list_file.store_csv_line([e.Sentence, lesson]) + gp_list_file.store_csv_line([element.Sentence, lesson]) func _on_open_folder_button_pressed() -> void: @@ -479,19 +479,19 @@ func _on_tab_container_tab_changed(tab: int) -> void: #region Book Generation -func create_book(): +func create_book() -> void: var lang_path: String = base_path.path_join(Database.language) - var file_names: Dictionary = { + var file_names: Dictionary[String, String] = { "word": "words_list.csv", "syllable": "syllables_list.csv", "sentence": "sentences_list.csv", } var columns: Dictionary[String, PackedStringArray] - var all_headers: Array = [] - var headers_seen: Dictionary = {} + var all_headers: Array[String] + var headers_seen: Dictionary[String, bool] - for category in file_names.keys(): + for category: String in file_names.keys(): var file_path: String = lang_path.path_join(file_names[category]) var file: FileAccess = FileAccess.open(file_path, FileAccess.READ) if file == null: @@ -504,14 +504,14 @@ func create_book(): var headers_line: String = read_csv_record(file) var raw_headers: PackedStringArray = parse_csv_line(headers_line) - var header_map = {} # Original -> Normalized + var header_map: Dictionary[String, String] # Original -> Normalized # On mesure combien de lignes ont déjà été ajoutées var current_row_count: int = 0 if columns.has("Categorie"): current_row_count = columns["Categorie"].size() - for header in raw_headers: + for header: String in raw_headers: var normalized: String = normalize_header(header) header_map[header] = normalized @@ -533,19 +533,19 @@ func create_book(): columns["Categorie"] = filler while not file.eof_reached(): - var line = read_csv_record(file) + var line: String = read_csv_record(file) if line.strip_edges() == "": continue - var values = parse_csv_line(line) + var values: PackedStringArray = parse_csv_line(line) if values.size() != raw_headers.size(): Logger.warn("ProfToolMenu: Ligne malformée ignorée : %s" % values) continue - var row_dict := {} + var row_dict: Dictionary[String, String] for index: int in range(values.size()): - var original = raw_headers[index] - var normalized = header_map.get(original, original) + var original: String = raw_headers[index] + var normalized: String = header_map.get(original, original) row_dict[normalized] = values[index] # Ligne principale @@ -560,7 +560,7 @@ func create_book(): file.close() # Forcer "Lesson" en tête - var ordered_headers = all_headers.duplicate() + var ordered_headers: Array[String] = all_headers.duplicate() if "Lesson" in ordered_headers: ordered_headers.erase("Lesson") ordered_headers = ["Lesson"] + ordered_headers @@ -577,7 +577,7 @@ func create_book(): output_file.store_line(escape_csv_line(PackedStringArray(ordered_headers))) - var row_count = (columns["Categorie"] as PackedStringArray).size() # Toutes les colonnes sont synchronisées + var row_count: int = (columns["Categorie"] as PackedStringArray).size() # Toutes les colonnes sont synchronisées for index in range(row_count): var row: PackedStringArray = [] for header: String in ordered_headers: @@ -590,7 +590,7 @@ func create_book(): Logger.debug("ProfToolMenu: " + error_label.text) # Fonction qui ajoute une ligne au dictionnaire -func add_row(dict: Dictionary, row_data: Dictionary, categorie: String, all_headers: Array) -> void: +func add_row(dict: Dictionary[String, PackedStringArray], row_data: Dictionary[String, String], categorie: String, all_headers: Array) -> void: # Nombre de lignes déjà enregistrées (doit être égal pour chaque colonne) var current_size := 0 if dict.has("Categorie"): @@ -604,7 +604,7 @@ func add_row(dict: Dictionary, row_data: Dictionary, categorie: String, all_head for index: int in range(current_size): filler[index] = "" dict[header] = filler - dict[header].append(row_data.get(header, "")) + dict[header].append(row_data.get(header, "") as String) # Colonne spéciale : Categorie if not dict.has("Categorie"): diff --git a/sources/language_tool/segment_build.gd b/sources/language_tool/segment_build.gd index 0d3d6e23..40343f55 100644 --- a/sources/language_tool/segment_build.gd +++ b/sources/language_tool/segment_build.gd @@ -15,7 +15,7 @@ func add_point(point: Vector2) -> void: func add_point_at(point: Vector2, ind: int) -> void: - var pts: = [] + var pts: Array[Vector2] for index: int in range(ind): pts.append(points[index]) pts.append(point) diff --git a/sources/language_tool/sentence_list_element.gd b/sources/language_tool/sentence_list_element.gd index a501e3ab..ff86b23a 100644 --- a/sources/language_tool/sentence_list_element.gd +++ b/sources/language_tool/sentence_list_element.gd @@ -4,7 +4,7 @@ signal not_found(text: String) const word_list_element_scene: = preload("res://sources/language_tool/word_list_element.tscn") -var words_not_founds: = [] +var words_not_founds: PackedStringArray func _ready() -> void: @@ -26,18 +26,18 @@ func update_lesson() -> void: func _add_from_additional_word_list(new_text: String) -> int: var punc: = "'!()[]{};:'\"\\,<>./?@#$%^&*_~" var new_text_clean: = new_text.to_lower() - for char in punc: - new_text_clean = new_text_clean.replace(char, " ") - var word_list_element: = word_list_element_scene.instantiate() + for chara in punc: + new_text_clean = new_text_clean.replace(chara, " ") + var word_list_element: WordListElement = word_list_element_scene.instantiate() var all_found: = true words_not_founds.clear() var word_ids: Array[int] = [] - for word in new_text_clean.split(" ", false): - var word_id: int = word_list_element._try_to_complete_from_word(word) + for word_element: String in new_text_clean.split(" ", false): + var word_id: int = word_list_element._try_to_complete_from_word(word_element) word_ids.append(word_id) if word_id < 0: all_found = false - words_not_founds.append(word) + words_not_founds.append(word_element) GPs_updated.emit() word_list_element.free() if all_found: @@ -57,7 +57,7 @@ func _add_from_additional_word_list(new_text: String) -> int: }) return id var not_found_text: = "Not found:" - for word_not_found in words_not_founds: + for word_not_found: String in words_not_founds: not_found_text += " " + word_not_found not_found.emit(not_found_text) return -1 diff --git a/sources/language_tool/word_list.gd b/sources/language_tool/word_list.gd index 346cd988..ba7552b6 100644 --- a/sources/language_tool/word_list.gd +++ b/sources/language_tool/word_list.gd @@ -2,21 +2,21 @@ extends Control @export var element_scene: PackedScene = preload("res://sources/language_tool/word_list_element.tscn") -@onready var elements_container: = %ElementsContainer -@onready var new_gp_layer: = $NewGPLayer -@onready var new_gp: = %NewGP -@onready var title: = %ListTitle -@onready var lesson_title: = %Lesson -@onready var word_title: = %Word -@onready var graphemes_title: = %Graphemes -@onready var error_label: = %ErrorLabel +@onready var elements_container: VBoxContainer = %ElementsContainer +@onready var new_gp_layer: CanvasLayer = $NewGPLayer +@onready var new_gp := %NewGP +@onready var title: ListTitle = %ListTitle +@onready var lesson_title: Label = %Lesson +@onready var word_title: Label = %Word +@onready var graphemes_title: Label = %Graphemes +@onready var error_label: Label = %ErrorLabel var undo_redo: = UndoRedo.new() var in_new_gp_mode: = false: set = set_in_new_gp_mode var _element: WordListElement var sub_elements_list: Dictionary = {} -var new_gp_asked_element +var new_gp_asked_element: WordListElement var new_gp_asked_ind: int @@ -49,7 +49,7 @@ func _ready() -> void: element.exception = elem.Exception element.reading = elem.Reading element.writing = elem.Writing - element.set_gp_ids_from_string(elem[_element.sub_table_id + "s"]) + element.set_gp_ids_from_string(elem[_element.sub_table_id + "s"] as String) elements_container.add_child(element) element.undo_redo = undo_redo element.delete_pressed.connect(_on_element_delete_pressed.bind(element)) @@ -82,15 +82,15 @@ func _get_query() -> String: func ensure_column_exists(table_name: String, column_name: String, default_value: String) -> void: Database.db.query("PRAGMA table_info(%s);" % table_name) - var column_exists = false + var column_exists: bool = false for row in Database.db.query_result: if row.has("name") and row["name"] == column_name: column_exists = true break if not column_exists: - var alter_sql = "ALTER TABLE %s ADD COLUMN %s INTEGER DEFAULT %s;" % [table_name, column_name, default_value] - var result = Database.db.query(alter_sql) + var alter_sql: String = "ALTER TABLE %s ADD COLUMN %s INTEGER DEFAULT %s;" % [table_name, column_name, default_value] + var result: bool = Database.db.query(alter_sql) if not result: Logger.error("WordList: Failed to add column '%s' to table '%s'" % [column_name, table_name]) @@ -126,7 +126,7 @@ func _on_plus_button_pressed() -> void: element.edit_mode() -func _on_element_new_GP_asked(ind: int, element) -> void: +func _on_element_new_GP_asked(ind: int, element: WordListElement) -> void: in_new_gp_mode = true new_gp_asked_element = element new_gp_asked_ind = ind diff --git a/sources/menus/language_selection/package_downloader.gd b/sources/menus/language_selection/package_downloader.gd index ae670277..2924fa66 100644 --- a/sources/menus/language_selection/package_downloader.gd +++ b/sources/menus/language_selection/package_downloader.gd @@ -215,7 +215,6 @@ func delete_directory_recursive(path: String) -> void: Logger.info("PackageDownloader: ✅ Folder deleted : %s" % path) - func _delete_dir(path: String) -> void: var dir: DirAccess = DirAccess.open(path) for file in dir.get_files(): diff --git a/sources/menus/register/register.gd b/sources/menus/register/register.gd index a8aa0ff5..812838ec 100644 --- a/sources/menus/register/register.gd +++ b/sources/menus/register/register.gd @@ -28,14 +28,14 @@ var current_steps : Array[Step] @onready var popup := %Popup @onready var popup_info_label : Label = %PopupInfo -func _ready(): +func _ready() -> void: current_steps = [account_type_step.instantiate()] _go_to_step(progress_bar.value) OpeningCurtain.open() -func _go_to_step(step_index: int): +func _go_to_step(step_index: int) -> void: # Clear the steps for step in steps.get_children(false): if step is Step: @@ -58,14 +58,14 @@ func _go_to_step(step_index: int): progress_bar.set_value_with_tween(step_index) -func _on_step_back(_step : Step): +func _on_step_back(_step : Step) -> void: if progress_bar.value == 0: get_tree().change_scene_to_file(main_menu_path) else: _go_to_step(progress_bar.value-1) -func _on_step_completed(step : Step): +func _on_step_completed(step : Step) -> void: match step.step_name: "type": # Adds teacher or parent steps @@ -123,7 +123,7 @@ func _on_step_completed(step : Step): _go_to_step(progress_bar.value+1) -func _remove_future_steps(): +func _remove_future_steps() -> void: # Free memory for index: int in range(progress_bar.value + 1, current_steps.size(), 1): current_steps[index].queue_free() @@ -131,5 +131,5 @@ func _remove_future_steps(): # Resize the array to remove unwanted steps current_steps.resize(progress_bar.value + 1) -func _on_popup_button_pressed(): +func _on_popup_button_pressed() -> void: popup.hide() diff --git a/sources/menus/register/steps/base_step.gd b/sources/menus/register/steps/base_step.gd index 7f7d933e..9b63aff8 100644 --- a/sources/menus/register/steps/base_step.gd +++ b/sources/menus/register/steps/base_step.gd @@ -33,8 +33,8 @@ func _on_next() -> bool: return true # Display error messages -func _on_form_validator_control_validated(control, passed, messages): - var label = find_child(control.name + "Error", true, false) as Label +func _on_form_validator_control_validated(control, passed, messages) -> void: + var label: Label = find_child(control.name as String + "Error", true, false) as Label if not label: return @@ -45,12 +45,12 @@ func _on_form_validator_control_validated(control, passed, messages): label.show() -func _on_back_button_pressed(): +func _on_back_button_pressed() -> void: if _on_back(): back.emit(self) -func _on_validate_button_pressed(): +func _on_validate_button_pressed() -> void: # Validate the fields if not form_validator.validate(): Logger.warn("BaseStep: Validation failed (" + str(self) + ")") diff --git a/sources/menus/register/steps/credentials_step.gd b/sources/menus/register/steps/credentials_step.gd index 564bb25c..8ef3bda2 100644 --- a/sources/menus/register/steps/credentials_step.gd +++ b/sources/menus/register/steps/credentials_step.gd @@ -2,7 +2,7 @@ extends Step @onready var api_email_field_error: Label = %APIEmailFieldError -func _on_validate_button_pressed(): +func _on_validate_button_pressed() -> void: api_email_field_error.visible = false # Validate the fields diff --git a/sources/menus/register/steps/device_recap.gd b/sources/menus/register/steps/device_recap.gd index acba5206..0f3aa19c 100644 --- a/sources/menus/register/steps/device_recap.gd +++ b/sources/menus/register/steps/device_recap.gd @@ -10,7 +10,7 @@ const student_panel_scene = preload("res://sources/menus/settings/student_panel. @onready var title_label : Label = %Title @onready var students_container : GridContainer = %StudentsContainer -func _ready(): +func _ready() -> void: if title: title_label.text = title diff --git a/sources/menus/register/steps/general_conditions_step.gd b/sources/menus/register/steps/general_conditions_step.gd index 1aaeb494..767cfa80 100644 --- a/sources/menus/register/steps/general_conditions_step.gd +++ b/sources/menus/register/steps/general_conditions_step.gd @@ -17,10 +17,10 @@ func _on_next() -> bool: return true -func _on_validate_button_pressed(): +func _on_validate_button_pressed() -> void: if _on_next(): next.emit(self) -func _on_accept_pressed(): +func _on_accept_pressed() -> void: accept_error.hide() diff --git a/sources/menus/register/steps/recap_step.gd b/sources/menus/register/steps/recap_step.gd index 319d91dc..c4954e19 100644 --- a/sources/menus/register/steps/recap_step.gd +++ b/sources/menus/register/steps/recap_step.gd @@ -10,7 +10,7 @@ const device_recap_scene : PackedScene = preload("res://sources/menus/register/s @onready var devices_count : Label = %DevicesCount @onready var students_count : Label = %StudentsCount -func on_enter(): +func on_enter() -> void: super.on_enter() var teacher_settings = data as TeacherSettings diff --git a/sources/menus/register/steps/validation/item_list_validator.gd b/sources/menus/register/steps/validation/item_list_validator.gd index 0148174c..f8c96fe3 100644 --- a/sources/menus/register/steps/validation/item_list_validator.gd +++ b/sources/menus/register/steps/validation/item_list_validator.gd @@ -3,7 +3,7 @@ extends Validator class_name ItemListValidator -func get_value(control: Control): +func get_value(control: Control) -> void: var item_list = control as ItemList if not item_list: return null diff --git a/sources/utils/autoloads/Database.gd b/sources/utils/autoloads/Database.gd index cf31a85f..80433ab1 100644 --- a/sources/utils/autoloads/Database.gd +++ b/sources/utils/autoloads/Database.gd @@ -61,7 +61,7 @@ func load_additional_word_list() -> String: additional_word_list.clear() var word_list_path: String = get_additional_word_list_path() if FileAccess.file_exists(word_list_path): - var file: = FileAccess.open(word_list_path, FileAccess.READ) + var file: FileAccess = FileAccess.open(word_list_path, FileAccess.READ) var title_line: PackedStringArray = file.get_csv_line() if (not "ORTHO" in title_line) or (not "PHON" in title_line) or (not "GPMATCH" in title_line): var msg: = "word list should have columns ORTHO, PHON and GPMATCH" diff --git a/sources/utils/autoloads/Logger.gd b/sources/utils/autoloads/Logger.gd index b7d435b3..27178299 100644 --- a/sources/utils/autoloads/Logger.gd +++ b/sources/utils/autoloads/Logger.gd @@ -26,8 +26,8 @@ func _ready() -> void: current_level = LogLevel.INFO # Exported: release mode _log_internal(LogLevel.INFO, "--- Logging started at " + Time.get_datetime_string_from_system() + " ---") -func delete_old_logs(days_threshold := 100) -> void: - var dir := DirAccess.open(logPath) +func delete_old_logs(days_threshold: float = 100) -> void: + var dir: DirAccess = DirAccess.open(logPath) if dir == null: push_warning("Logger: Could not open Logs directory for cleanup.") return @@ -39,7 +39,7 @@ func delete_old_logs(days_threshold := 100) -> void: if file_name.begins_with("Kalulu_Log_") and file_name.ends_with(".txt"): var parts: PackedStringArray = file_name.get_basename().replace("Kalulu_Log_", "").split("-") if parts.size() >= 6: - var date_dict := { + var date_dict: Dictionary = { "year": parts[0].to_int(), "month": parts[1].to_int(), "day": parts[2].to_int(), @@ -47,7 +47,7 @@ func delete_old_logs(days_threshold := 100) -> void: "minute": parts[4].to_int(), "second": parts[5].to_int() } - var file_time := Time.get_unix_time_from_datetime_dict(date_dict) + var file_time: int = Time.get_unix_time_from_datetime_dict(date_dict) var age_days: float = float(now - file_time) / (60.0 * 60.0 * 24.0) if age_days > days_threshold: var full_path: String = logPath + file_name @@ -61,7 +61,7 @@ func delete_old_logs(days_threshold := 100) -> void: func _init_log_file() -> void: # Ensure Logs directory exists - var logs_dir := DirAccess.open(logPath) + var logs_dir: DirAccess = DirAccess.open(logPath) if logs_dir == null: DirAccess.make_dir_recursive_absolute(logPath) @@ -81,7 +81,7 @@ func _log_internal(level: LogLevel, message: String) -> void: if level < current_level: return - var prefix := "[LOG]" + var prefix: String = "[LOG]" match level: LogLevel.TRACE: prefix = "[TRACE]" LogLevel.DEBUG: prefix = "[DEBUG]" diff --git a/sources/utils/autoloads/lesson_logger.gd b/sources/utils/autoloads/lesson_logger.gd index bf57434f..a9cbfc42 100644 --- a/sources/utils/autoloads/lesson_logger.gd +++ b/sources/utils/autoloads/lesson_logger.gd @@ -3,11 +3,11 @@ extends Node const Log: = preload("res://sources/utils/minigame_resources/log.gd") # Contains the current log resource -var log_resources: = {} +var log_resources: Dictionary = {} func save_logs(logs: Dictionary, folder_path: String, minigame_name: String, lesson_nb: int, time: String) -> void: - var file_path: = folder_path + minigame_name + ".tres" + var file_path: String = folder_path + minigame_name + ".tres" var log_resource: LogResource if not ResourceLoader.exists(file_path): diff --git a/sources/utils/autoloads/music_manager.gd b/sources/utils/autoloads/music_manager.gd index f0d12e2b..7b9fbb37 100644 --- a/sources/utils/autoloads/music_manager.gd +++ b/sources/utils/autoloads/music_manager.gd @@ -2,7 +2,7 @@ extends Node @onready var music_player : AudioStreamPlayer = $MusicPlayer -const tracks: = [ +const tracks: Array = [ preload("res://assets/music/title.mp3"), preload("res://assets/music/garden.mp3") ] diff --git a/sources/utils/binder/control_binder.gd b/sources/utils/binder/control_binder.gd index c86a9e56..edfcf30a 100644 --- a/sources/utils/binder/control_binder.gd +++ b/sources/utils/binder/control_binder.gd @@ -6,11 +6,11 @@ class_name ControlBinder var control : Control -func _ready(): +func _ready() -> void: control = get_parent() -func get_value(): +func get_value() -> void: if not control: return null @@ -29,7 +29,7 @@ func get_value(): return null -func set_value(value): +func set_value(value) -> void: if not control: return diff --git a/sources/utils/binder/form_binder.gd b/sources/utils/binder/form_binder.gd index 4a3ec041..e24f668f 100644 --- a/sources/utils/binder/form_binder.gd +++ b/sources/utils/binder/form_binder.gd @@ -6,7 +6,7 @@ class_name FormBinder var _control_binder_map: Dictionary = {} -func _ready(): +func _ready() -> void: _find_binders(self) diff --git a/sources/utils/dynamic_font_size_label.gd b/sources/utils/dynamic_font_size_label.gd index bef83432..b55d4f65 100644 --- a/sources/utils/dynamic_font_size_label.gd +++ b/sources/utils/dynamic_font_size_label.gd @@ -10,18 +10,18 @@ class_name DynamicFontSizeLabel var _current_font_size: int var _default_font_size: int -func _ready(): +func _ready() -> void: resized.connect(_on_resized) _initialize_default_font_size() _update_font_size() -func _initialize_default_font_size(): +func _initialize_default_font_size() -> void: _default_font_size = get_theme_font_size("font_size") -func _on_resized(): +func _on_resized() -> void: _update_font_size() -func _update_font_size(): +func _update_font_size() -> void: if not autosize_on: return @@ -34,17 +34,18 @@ func _update_font_size(): # Recherche binaire de la taille de police optimale func _calculate_best_font_size() -> int: - var available_width = size.x * font_size_width_percent - var available_height = size.y + var available_width: float = size.x * font_size_width_percent + var available_height: float = size.y - var font = get_theme_font("font") - var low = font_size_min - var high = font_size_max - var best_size = low + var font: Font = get_theme_font("font") + var low: int = font_size_min + var high: int = font_size_max + var best_size: int = low while low <= high: - var mid = int((low + high) / 2) - var text_size = font.get_string_size(text, HORIZONTAL_ALIGNMENT_LEFT, -1, mid) + @warning_ignore("integer_division") + var mid: int = int((low + high) / 2) + var text_size: Vector2 = font.get_string_size(text, HORIZONTAL_ALIGNMENT_LEFT, -1, mid) # Si le texte rentre, on essaie de l'augmenter if text_size.x <= available_width and text_size.y <= available_height: diff --git a/sources/utils/minigame_resources/log.gd b/sources/utils/minigame_resources/log.gd index a8e30a43..7d141cb5 100644 --- a/sources/utils/minigame_resources/log.gd +++ b/sources/utils/minigame_resources/log.gd @@ -12,7 +12,7 @@ func add_log(lesson_nb: int, new_log: Dictionary, time: String) -> void: if not lesson_logs.has(time): logs[lesson_nb][time] = new_log else: - var i: = 2 - while lesson_logs.has(time + "_" + str(i)): - i += 1 - logs[lesson_nb][time + "_" + str(i)] = new_log + var index: int = 2 + while lesson_logs.has(time + "_" + str(index)): + index += 1 + logs[lesson_nb][time + "_" + str(index)] = new_log