From f3e8276a2c5e4e9b61687b0dea0dff8da653a51d Mon Sep 17 00:00:00 2001 From: Dylan Sarrazyn Date: Wed, 25 Sep 2024 16:12:49 +0200 Subject: [PATCH] Update the lesson unlocks in the teacher settings. Improve the tracing of the look and learn. Fix a bug in the words minigame Updates teacher settings. Removes Android folder --- export_presets.cfg | 8 +- kalulu_localization.csv | 10 +- kalulu_localization.es.translation | Bin 5368 -> 8449 bytes kalulu_localization.fr.translation | Bin 5912 -> 9205 bytes resources/themes/kalulu_theme.tres | 24 ++-- resources/user/teacher_settings.gd | 24 ++++ sources/look_and_learn/tracing_path.gd | 2 +- sources/menus/components/code_keyboard.tscn | 1 - .../menus/components/password_visualizer.tscn | 10 +- sources/menus/settings/device_tab.gd | 5 + sources/menus/settings/lesson_unlock.gd | 111 ++++++++++++++---- sources/menus/settings/lesson_unlock.tscn | 16 ++- sources/menus/settings/lesson_unlocks.gd | 50 ++++---- sources/menus/settings/lesson_unlocks.tscn | 47 ++------ sources/menus/settings/student_panel.gd | 5 +- sources/menus/settings/student_panel.tscn | 1 - sources/menus/settings/teacher_settings.gd | 17 ++- sources/menus/settings/teacher_settings.tscn | 14 +-- .../minigames/base/words/words_minigame.gd | 5 +- .../minigames/monkeys/monkeys_minigame.tscn | 8 +- sources/utils/autoloads/user_data_manager.gd | 25 +++- sources/utils/state_machine/state.gd | 34 ------ sources/utils/state_machine/state_machine.gd | 87 -------------- 23 files changed, 240 insertions(+), 264 deletions(-) delete mode 100644 sources/utils/state_machine/state.gd delete mode 100644 sources/utils/state_machine/state_machine.gd diff --git a/export_presets.cfg b/export_presets.cfg index 28fc3c43..909ecc65 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -555,7 +555,7 @@ custom_features="" export_filter="all_resources" include_filter="" exclude_filter="" -export_path="../Export/android/kalulu_app.apk" +export_path="../Export/android/kalulu_app.aab" encryption_include_filters="" encryption_exclude_filters="" encrypt_pck=false @@ -566,11 +566,11 @@ script_export_mode=2 custom_template/debug="" custom_template/release="" -gradle_build/use_gradle_build=false +gradle_build/use_gradle_build=true gradle_build/gradle_build_directory="" gradle_build/android_source_template="" gradle_build/compress_native_libraries=false -gradle_build/export_format=0 +gradle_build/export_format=1 gradle_build/min_sdk="" gradle_build/target_sdk="" architectures/armeabi-v7a=false @@ -579,7 +579,7 @@ architectures/x86=false architectures/x86_64=false version/code=1 version/name="" -package/unique_name="com.example.$genname" +package/unique_name="org.godotengine.kalulu" package/name="" package/signed=true package/app_category=2 diff --git a/kalulu_localization.csv b/kalulu_localization.csv index 781b1011..c2ec9a52 100644 --- a/kalulu_localization.csv +++ b/kalulu_localization.csv @@ -238,4 +238,12 @@ SETTINGS_LESSONS;Leçons;Lecciones CLOSE;Fermer;Cerrar REGISTER_FAILED;Une erreur est survenue;Se ha producido un error ERROR_DOWNLOADING;Impossible de télécharger les données de jeu;No se pueden descargar los datos del juego -EXTRACTING_DATA;Extraction des données;Extracción de datos \ No newline at end of file +EXTRACTING_DATA;Extraction des données;Extracción de datos +LESSON;Leçon;Lección +LOOKANDLEARN;Regarder et apprendre;Mira y aprende +EXERCISE1;Exercice 1;Ejercicio 1 +EXERCISE2;Exercice 2;Ejercicio 2 +EXERCISE3;Exercice 3;Ejercicio 3 +Locked;Verrouillé;Bloqueado +Unlocked;Déverrouillé;Desbloqueado +Completed;Terminé;Completado \ No newline at end of file diff --git a/kalulu_localization.es.translation b/kalulu_localization.es.translation index 61a75546d0224d35a94d631b9917821439fb18c1..2db12231f3b5f1bb226919bf766369d96ae85a0f 100644 GIT binary patch literal 8449 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 I$N&8Bf7cm9&Hw-a literal 5368 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 W00007000010000|Q&K}xQ$s@^xp|ZT diff --git a/kalulu_localization.fr.translation b/kalulu_localization.fr.translation index cede7ecb64911fc76654107a13538dd40e75bc7e..6f14b109ad6bf6a30e89ea93d18f8d0886380cb3 100644 GIT binary patch literal 9205 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 diff --git a/resources/themes/kalulu_theme.tres b/resources/themes/kalulu_theme.tres index 07f3a2e3..edabeaaf 100644 --- a/resources/themes/kalulu_theme.tres +++ b/resources/themes/kalulu_theme.tres @@ -234,7 +234,7 @@ corner_radius_bottom_left = 32 [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_unu58"] bg_color = Color(0.458824, 0.392157, 0.658824, 1) -[sub_resource type="Image" id="Image_pp0io"] +[sub_resource type="Image" id="Image_lc3sd"] data = { "data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 96, 255, 255, 255, 97, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 96, 255, 255, 255, 97, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 96, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 97, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 96, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 97, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 97, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 97, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 96, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 96, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 97, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 97, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 96, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 96, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 97, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 97, 255, 255, 255, 96, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 96, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 97, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 96, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 97, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 96, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 96, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 97, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 96, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 97, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 96, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 96, 255, 255, 255, 97, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 97, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 96, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 96, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 97, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 97, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 96, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 96, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 97, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 97, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 97, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 96, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 97, 255, 255, 255, 191, 255, 255, 255, 191, 255, 255, 255, 96, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 97, 255, 255, 255, 96, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 97, 255, 255, 255, 96, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), "format": "RGBA8", @@ -244,9 +244,9 @@ data = { } [sub_resource type="ImageTexture" id="ImageTexture_ur8jk"] -image = SubResource("Image_pp0io") +image = SubResource("Image_lc3sd") -[sub_resource type="Image" id="Image_1y8w3"] +[sub_resource type="Image" id="Image_oq4n8"] data = { "data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 2, 255, 255, 255, 78, 254, 255, 254, 136, 254, 255, 254, 173, 254, 255, 254, 173, 254, 255, 254, 135, 252, 255, 252, 77, 255, 255, 255, 2, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 21, 255, 255, 255, 144, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 143, 255, 255, 255, 20, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 2, 255, 255, 255, 144, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 238, 240, 238, 194, 123, 125, 123, 223, 134, 134, 134, 220, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 143, 255, 255, 255, 2, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 78, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 238, 240, 238, 194, 116, 117, 116, 226, 92, 92, 92, 233, 123, 125, 123, 223, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 252, 255, 252, 76, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 136, 254, 255, 254, 191, 254, 255, 254, 191, 238, 240, 238, 194, 116, 117, 116, 226, 92, 92, 92, 233, 116, 117, 116, 226, 238, 240, 238, 194, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 255, 255, 255, 133, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 173, 254, 255, 254, 191, 254, 255, 254, 191, 123, 125, 123, 223, 92, 92, 92, 233, 115, 116, 115, 226, 238, 240, 238, 194, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 173, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 173, 254, 255, 254, 191, 254, 255, 254, 191, 123, 125, 123, 223, 92, 92, 92, 233, 115, 116, 115, 226, 237, 238, 237, 195, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 172, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 135, 254, 255, 254, 191, 254, 255, 254, 191, 238, 240, 238, 194, 115, 116, 115, 226, 92, 92, 92, 233, 115, 116, 115, 226, 238, 240, 238, 194, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 255, 255, 255, 133, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 252, 255, 252, 77, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 238, 240, 238, 194, 115, 116, 115, 226, 92, 92, 92, 233, 125, 126, 125, 223, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 255, 255, 255, 75, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 2, 254, 255, 254, 143, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 238, 240, 238, 194, 125, 126, 125, 223, 133, 133, 133, 220, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 142, 255, 255, 255, 2, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 20, 254, 255, 254, 143, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 142, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 2, 252, 255, 252, 76, 255, 255, 255, 133, 254, 255, 254, 173, 254, 255, 254, 172, 255, 255, 255, 133, 255, 255, 255, 75, 255, 255, 255, 2, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), "format": "RGBA8", @@ -256,9 +256,9 @@ data = { } [sub_resource type="ImageTexture" id="ImageTexture_tmbq7"] -image = SubResource("Image_1y8w3") +image = SubResource("Image_oq4n8") -[sub_resource type="Image" id="Image_d2ju5"] +[sub_resource type="Image" id="Image_avgt1"] data = { "data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 2, 255, 255, 255, 104, 254, 255, 254, 181, 254, 255, 254, 231, 254, 255, 254, 231, 254, 255, 254, 180, 255, 255, 255, 102, 255, 255, 255, 2, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 27, 254, 255, 254, 193, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 191, 255, 255, 255, 26, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 2, 254, 255, 254, 193, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 236, 237, 236, 255, 80, 80, 80, 255, 96, 96, 96, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 191, 255, 255, 255, 2, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 104, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 236, 237, 236, 255, 66, 66, 66, 255, 26, 26, 26, 255, 80, 80, 80, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 255, 255, 255, 101, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 181, 254, 255, 254, 255, 254, 255, 254, 255, 236, 237, 236, 255, 66, 66, 66, 255, 26, 26, 26, 255, 66, 66, 66, 255, 236, 237, 236, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 178, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 231, 254, 255, 254, 255, 254, 255, 254, 255, 80, 80, 80, 255, 26, 26, 26, 255, 65, 65, 65, 255, 236, 237, 236, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 231, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 231, 254, 255, 254, 255, 254, 255, 254, 255, 80, 80, 80, 255, 26, 26, 26, 255, 65, 65, 65, 255, 235, 236, 235, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 230, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 180, 254, 255, 254, 255, 254, 255, 254, 255, 236, 237, 236, 255, 67, 67, 67, 255, 26, 26, 26, 255, 65, 65, 65, 255, 236, 237, 236, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 178, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 102, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 236, 237, 236, 255, 67, 67, 67, 255, 26, 26, 26, 255, 81, 81, 81, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 255, 255, 255, 100, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 2, 254, 255, 254, 191, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 236, 237, 236, 255, 81, 81, 81, 255, 95, 95, 95, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 189, 255, 255, 255, 2, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 26, 254, 255, 254, 191, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 189, 255, 255, 255, 25, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 2, 255, 255, 255, 101, 254, 255, 254, 178, 254, 255, 254, 231, 254, 255, 254, 230, 254, 255, 254, 178, 255, 255, 255, 100, 255, 255, 255, 2, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), "format": "RGBA8", @@ -268,9 +268,9 @@ data = { } [sub_resource type="ImageTexture" id="ImageTexture_5g8yh"] -image = SubResource("Image_d2ju5") +image = SubResource("Image_avgt1") -[sub_resource type="Image" id="Image_gyc5e"] +[sub_resource type="Image" id="Image_vxl8q"] data = { "data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 211, 211, 211, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), "format": "RGBA8", @@ -280,9 +280,9 @@ data = { } [sub_resource type="ImageTexture" id="ImageTexture_lwykn"] -image = SubResource("Image_gyc5e") +image = SubResource("Image_vxl8q") -[sub_resource type="Image" id="Image_xuk6j"] +[sub_resource type="Image" id="Image_b6pj3"] data = { "data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 2, 255, 255, 255, 78, 254, 255, 254, 136, 254, 255, 254, 173, 254, 255, 254, 173, 254, 255, 254, 135, 252, 255, 252, 77, 255, 255, 255, 2, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 21, 255, 255, 255, 144, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 143, 255, 255, 255, 20, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 2, 255, 255, 255, 144, 254, 255, 254, 191, 254, 255, 254, 191, 133, 133, 133, 220, 123, 125, 123, 223, 238, 240, 238, 194, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 143, 255, 255, 255, 2, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 78, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 123, 125, 123, 223, 92, 92, 92, 233, 115, 116, 115, 226, 238, 240, 238, 194, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 252, 255, 252, 76, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 136, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 238, 240, 238, 194, 115, 116, 115, 226, 92, 92, 92, 233, 115, 116, 115, 226, 238, 240, 238, 194, 254, 255, 254, 191, 254, 255, 254, 191, 255, 255, 255, 133, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 173, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 237, 238, 237, 195, 115, 116, 115, 226, 92, 92, 92, 233, 125, 126, 125, 223, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 173, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 173, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 237, 238, 237, 195, 115, 116, 115, 226, 92, 92, 92, 233, 125, 126, 125, 223, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 172, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 135, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 238, 240, 238, 194, 115, 116, 115, 226, 92, 92, 92, 233, 115, 116, 115, 226, 240, 241, 240, 194, 254, 255, 254, 191, 254, 255, 254, 191, 255, 255, 255, 133, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 252, 255, 252, 77, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 123, 125, 123, 223, 92, 92, 92, 233, 115, 116, 115, 226, 240, 241, 240, 194, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 255, 255, 255, 75, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 2, 254, 255, 254, 143, 254, 255, 254, 191, 254, 255, 254, 191, 134, 134, 134, 220, 125, 126, 125, 223, 240, 241, 240, 194, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 142, 255, 255, 255, 2, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 20, 254, 255, 254, 143, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 191, 254, 255, 254, 142, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 2, 252, 255, 252, 76, 255, 255, 255, 133, 254, 255, 254, 173, 254, 255, 254, 172, 255, 255, 255, 133, 255, 255, 255, 75, 255, 255, 255, 2, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), "format": "RGBA8", @@ -292,9 +292,9 @@ data = { } [sub_resource type="ImageTexture" id="ImageTexture_6twro"] -image = SubResource("Image_xuk6j") +image = SubResource("Image_b6pj3") -[sub_resource type="Image" id="Image_0ucnj"] +[sub_resource type="Image" id="Image_7uslq"] data = { "data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 2, 255, 255, 255, 104, 254, 255, 254, 181, 254, 255, 254, 231, 254, 255, 254, 231, 254, 255, 254, 180, 255, 255, 255, 102, 255, 255, 255, 2, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 27, 254, 255, 254, 193, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 191, 255, 255, 255, 26, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 2, 254, 255, 254, 193, 254, 255, 254, 255, 254, 255, 254, 255, 94, 94, 94, 255, 80, 80, 80, 255, 236, 237, 236, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 191, 255, 255, 255, 2, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 104, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 80, 80, 80, 255, 26, 26, 26, 255, 67, 67, 67, 255, 236, 237, 236, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 255, 255, 255, 101, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 181, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 236, 237, 236, 255, 65, 65, 65, 255, 26, 26, 26, 255, 67, 67, 67, 255, 236, 237, 236, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 178, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 231, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 235, 236, 235, 255, 65, 65, 65, 255, 26, 26, 26, 255, 81, 81, 81, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 231, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 231, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 235, 236, 235, 255, 65, 65, 65, 255, 26, 26, 26, 255, 81, 81, 81, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 230, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 254, 255, 254, 180, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 236, 237, 236, 255, 65, 65, 65, 255, 26, 26, 26, 255, 67, 67, 67, 255, 237, 238, 237, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 178, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 102, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 80, 80, 80, 255, 26, 26, 26, 255, 67, 67, 67, 255, 237, 238, 237, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 255, 255, 255, 100, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 2, 254, 255, 254, 191, 254, 255, 254, 255, 254, 255, 254, 255, 96, 96, 96, 255, 81, 81, 81, 255, 237, 238, 237, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 189, 255, 255, 255, 2, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 26, 254, 255, 254, 191, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 255, 254, 189, 255, 255, 255, 25, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 2, 255, 255, 255, 101, 254, 255, 254, 178, 254, 255, 254, 231, 254, 255, 254, 230, 254, 255, 254, 178, 255, 255, 255, 100, 255, 255, 255, 2, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), "format": "RGBA8", @@ -304,7 +304,7 @@ data = { } [sub_resource type="ImageTexture" id="ImageTexture_nu08a"] -image = SubResource("Image_0ucnj") +image = SubResource("Image_7uslq") [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_xsf7o"] content_margin_left = 4.0 diff --git a/resources/user/teacher_settings.gd b/resources/user/teacher_settings.gd index 1dd8dca7..0fa8567c 100644 --- a/resources/user/teacher_settings.gd +++ b/resources/user/teacher_settings.gd @@ -22,6 +22,30 @@ var password : String @export var token: String @export var last_modified: String +@export var master_volume: = 0.0 : + set(volume): + master_volume = volume + var ind: = AudioServer.get_bus_index("Master") + AudioServer.set_bus_volume_db(ind, volume) + +@export var music_volume: = 0.0 : + set(volume): + music_volume = volume + var ind: = AudioServer.get_bus_index("Music") + AudioServer.set_bus_volume_db(ind, volume) + +@export var voice_volume: = 0.0 : + set(volume): + voice_volume = volume + var ind: = AudioServer.get_bus_index("Voice") + AudioServer.set_bus_volume_db(ind, volume) + +@export var effects_volume: = 0.0 : + set(volume): + effects_volume = volume + var ind: = AudioServer.get_bus_index("Effects") + AudioServer.set_bus_volume_db(ind, volume) + func update_from_dict(dict: Dictionary) -> void: account_type = dict.account_type education_method = dict.education_method diff --git a/sources/look_and_learn/tracing_path.gd b/sources/look_and_learn/tracing_path.gd index 60d85a03..7aa46c8a 100644 --- a/sources/look_and_learn/tracing_path.gd +++ b/sources/look_and_learn/tracing_path.gd @@ -6,7 +6,7 @@ signal demo_finished @export var points_per_curve: = 25 @export var hand_min_travel_time: = 0.5 @export var hand_max_travel_time: = 2.0 -@export var distance: = 50.0 +@export var distance: = 100.0 @export var color_gradient: Gradient diff --git a/sources/menus/components/code_keyboard.tscn b/sources/menus/components/code_keyboard.tscn index c0ddaf0c..857c4f66 100644 --- a/sources/menus/components/code_keyboard.tscn +++ b/sources/menus/components/code_keyboard.tscn @@ -46,7 +46,6 @@ grow_vertical = 2 theme_override_constants/separation = 46 script = ExtResource("2_sr5ud") key_size = 420 -password = "123" metadata/_edit_use_anchors_ = true [node name="Panel1" type="PanelContainer" parent="PasswordVisualizer"] diff --git a/sources/menus/components/password_visualizer.tscn b/sources/menus/components/password_visualizer.tscn index bf81c3f7..40588d03 100644 --- a/sources/menus/components/password_visualizer.tscn +++ b/sources/menus/components/password_visualizer.tscn @@ -1,16 +1,12 @@ -[gd_scene load_steps=5 format=3 uid="uid://c5ey1jk06asiq"] +[gd_scene load_steps=2 format=3 uid="uid://c5ey1jk06asiq"] [ext_resource type="Script" path="res://sources/menus/components/password_visualizer.gd" id="1_mxw25"] -[ext_resource type="Texture2D" uid="uid://b6vmq2e1krf6c" path="res://assets/menus/login/symbol01.png" id="2_aefio"] -[ext_resource type="Texture2D" uid="uid://c1orskmogfiy1" path="res://assets/menus/login/symbol02.png" id="3_jg30f"] -[ext_resource type="Texture2D" uid="uid://dgjpftdenxiws" path="res://assets/menus/login/symbol03.png" id="4_kgy80"] [node name="PasswordVisualizer" type="HBoxContainer"] offset_right = 668.0 offset_bottom = 220.0 theme_override_constants/separation = 46 script = ExtResource("1_mxw25") -password = "123" [node name="Panel1" type="PanelContainer" parent="."] layout_mode = 2 @@ -20,8 +16,8 @@ metadata/_edit_use_anchors_ = true [node name="Icon1" type="TextureRect" parent="Panel1"] unique_name_in_owner = true +custom_minimum_size = Vector2(200, 200) layout_mode = 2 -texture = ExtResource("2_aefio") expand_mode = 2 stretch_mode = 4 @@ -35,7 +31,6 @@ metadata/_edit_use_anchors_ = true unique_name_in_owner = true custom_minimum_size = Vector2(200, 200) layout_mode = 2 -texture = ExtResource("3_jg30f") expand_mode = 2 stretch_mode = 4 @@ -49,6 +44,5 @@ metadata/_edit_use_anchors_ = true unique_name_in_owner = true custom_minimum_size = Vector2(200, 200) layout_mode = 2 -texture = ExtResource("4_kgy80") expand_mode = 2 stretch_mode = 4 diff --git a/sources/menus/settings/device_tab.gd b/sources/menus/settings/device_tab.gd index 12ef461e..a4d8cccd 100644 --- a/sources/menus/settings/device_tab.gd +++ b/sources/menus/settings/device_tab.gd @@ -1,6 +1,8 @@ extends TabBar class_name DeviceTab +signal student_pressed(code: String) + const student_panel_scene : PackedScene = preload("res://sources/menus/settings/student_panel.tscn") @onready var students_container : GridContainer = %StudentsContainer @@ -25,6 +27,9 @@ func refresh(): var student_panel := student_panel_scene.instantiate() student_panel.student_count = student_count student_panel.student_data = student + + student_panel.pressed.connect(func(): student_pressed.emit(student.code)) + students_container.add_child(student_panel) student_count += 1 diff --git a/sources/menus/settings/lesson_unlock.gd b/sources/menus/settings/lesson_unlock.gd index f520bff9..58038f88 100644 --- a/sources/menus/settings/lesson_unlock.gd +++ b/sources/menus/settings/lesson_unlock.gd @@ -1,9 +1,16 @@ extends MarginContainer +signal unlocks_changed @export var lesson_number: int: set = _set_lesson_number +@export var lesson_GPs: String: + set = _set_lesson_GPs + +@export var unlocks: Dictionary + @onready var lesson_label: Label = %LessonLabel +@onready var gps_label: Label = %GPsLabel @onready var look_and_learn_option_button: OptionButton = %LookAndLearnOptionButton @onready var exercise_option_button_1: OptionButton = %ExerciseOptionButton1 @onready var exercise_option_button_2: OptionButton = %ExerciseOptionButton2 @@ -12,16 +19,18 @@ extends MarginContainer func _ready() -> void: for status in UserProgression.Status: - look_and_learn_option_button.add_item(status) - exercise_option_button_1.add_item(status) - exercise_option_button_2.add_item(status) - exercise_option_button_3.add_item(status) + look_and_learn_option_button.add_item(tr(status)) + exercise_option_button_1.add_item(tr(status)) + exercise_option_button_2.add_item(tr(status)) + exercise_option_button_3.add_item(tr(status)) _set_lesson_number(lesson_number) + _set_lesson_GPs(lesson_GPs) func reload() -> void: _set_lesson_number(lesson_number) + _set_lesson_GPs(lesson_GPs) func _set_lesson_number(value: int) -> void: @@ -32,28 +41,78 @@ func _set_lesson_number(value: int) -> void: lesson_label.text = str(lesson_number) - var lesson_unlocks: Dictionary = UserDataManager.student_progression.unlocks[lesson_number] - look_and_learn_option_button.select(lesson_unlocks["look_and_learn"]) - exercise_option_button_1.select(lesson_unlocks["games"][0]) - exercise_option_button_2.select(lesson_unlocks["games"][1]) - exercise_option_button_3.select(lesson_unlocks["games"][2]) + look_and_learn_option_button.select(unlocks[lesson_number]["look_and_learn"]) + exercise_option_button_1.select(unlocks[lesson_number]["games"][0]) + exercise_option_button_2.select(unlocks[lesson_number]["games"][1]) + exercise_option_button_3.select(unlocks[lesson_number]["games"][2]) + + +func _set_lesson_GPs(value: String) -> void: + lesson_GPs = value + if not gps_label: + return + + gps_label.text = value func _on_look_and_learn_option_button_item_selected(index: int) -> void: - UserDataManager.student_progression.unlocks[lesson_number]["look_and_learn"] = index - UserDataManager._save_student_progression() - - -func _on_exercise_option_button_1_item_selected(index: int) -> void: - UserDataManager.student_progression.unlocks[lesson_number]["games"][0] = index - UserDataManager._save_student_progression() - - -func _on_exercise_option_button_2_item_selected(index: int) -> void: - UserDataManager.student_progression.unlocks[lesson_number]["games"][1] = index - UserDataManager._save_student_progression() - - -func _on_exercise_option_button_3_item_selected(index: int) -> void: - UserDataManager.student_progression.unlocks[lesson_number]["games"][2] = index - UserDataManager._save_student_progression() + unlocks[lesson_number]["look_and_learn"] = index + + if index == UserProgression.Status.Locked: + # First lesson look&learn can't be locked + if lesson_number == 1: + unlocks[lesson_number]["look_and_learn"] = UserProgression.Status.Unlocked + # Unlock the previous lesson + else: + unlocks[lesson_number-1]["look_and_learn"] = UserProgression.Status.Unlocked + unlocks[lesson_number-1]["games"][0] = UserProgression.Status.Locked + unlocks[lesson_number-1]["games"][1] = UserProgression.Status.Locked + unlocks[lesson_number-1]["games"][2] = UserProgression.Status.Locked + + unlocks[lesson_number]["games"][0] = UserProgression.Status.Locked + unlocks[lesson_number]["games"][1] = UserProgression.Status.Locked + unlocks[lesson_number]["games"][2] = UserProgression.Status.Locked + + for lesson in unlocks.keys(): + # Lock everything after + if lesson > lesson_number: + unlocks[lesson]["look_and_learn"] = UserProgression.Status.Locked + unlocks[lesson]["games"][0] = UserProgression.Status.Locked + unlocks[lesson]["games"][1] = UserProgression.Status.Locked + unlocks[lesson]["games"][2] = UserProgression.Status.Locked + + elif index == UserProgression.Status.Unlocked: + unlocks[lesson_number]["games"][0] = UserProgression.Status.Locked + unlocks[lesson_number]["games"][1] = UserProgression.Status.Locked + unlocks[lesson_number]["games"][2] = UserProgression.Status.Locked + for lesson in unlocks.keys(): + # Complete everything before + if lesson < lesson_number: + unlocks[lesson]["look_and_learn"] = UserProgression.Status.Completed + unlocks[lesson]["games"][0] = UserProgression.Status.Completed + unlocks[lesson]["games"][1] = UserProgression.Status.Completed + unlocks[lesson]["games"][2] = UserProgression.Status.Completed + # Lock everything after + elif lesson > lesson_number: + unlocks[lesson]["look_and_learn"] = UserProgression.Status.Locked + unlocks[lesson]["games"][0] = UserProgression.Status.Locked + unlocks[lesson]["games"][1] = UserProgression.Status.Locked + unlocks[lesson]["games"][2] = UserProgression.Status.Locked + elif index == UserProgression.Status.Completed: + unlocks[lesson_number]["games"][0] = UserProgression.Status.Unlocked + unlocks[lesson_number]["games"][1] = UserProgression.Status.Unlocked + unlocks[lesson_number]["games"][2] = UserProgression.Status.Unlocked + for lesson in unlocks.keys(): + # Complete everything before + if lesson < lesson_number: + unlocks[lesson]["look_and_learn"] = UserProgression.Status.Completed + unlocks[lesson]["games"][0] = UserProgression.Status.Completed + unlocks[lesson]["games"][1] = UserProgression.Status.Completed + unlocks[lesson]["games"][2] = UserProgression.Status.Completed + # Lock everything after + elif lesson > lesson_number: + unlocks[lesson]["look_and_learn"] = UserProgression.Status.Locked + unlocks[lesson]["games"][0] = UserProgression.Status.Locked + unlocks[lesson]["games"][1] = UserProgression.Status.Locked + unlocks[lesson]["games"][2] = UserProgression.Status.Locked + unlocks_changed.emit() diff --git a/sources/menus/settings/lesson_unlock.tscn b/sources/menus/settings/lesson_unlock.tscn index 8a747238..422b3ee4 100644 --- a/sources/menus/settings/lesson_unlock.tscn +++ b/sources/menus/settings/lesson_unlock.tscn @@ -9,17 +9,24 @@ script = ExtResource("1_rlnlh") [node name="HBoxContainer" type="HBoxContainer" parent="."] layout_mode = 2 +theme_override_constants/separation = 20 [node name="LessonLabel" type="Label" parent="HBoxContainer"] unique_name_in_owner = true +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +theme_override_font_sizes/font_size = 64 + +[node name="GPsLabel" type="Label" parent="HBoxContainer"] +unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 -theme_override_font_sizes/font_size = 64 +theme_override_font_sizes/font_size = 42 [node name="HBoxContainer" type="HBoxContainer" parent="HBoxContainer"] layout_mode = 2 size_flags_horizontal = 3 -theme_override_constants/separation = 20 +theme_override_constants/separation = 40 [node name="LookAndLearnOptionButton" type="OptionButton" parent="HBoxContainer/HBoxContainer"] unique_name_in_owner = true @@ -30,20 +37,23 @@ size_flags_horizontal = 3 unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 +disabled = true [node name="ExerciseOptionButton2" type="OptionButton" parent="HBoxContainer/HBoxContainer"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 +disabled = true [node name="ExerciseOptionButton3" type="OptionButton" parent="HBoxContainer/HBoxContainer"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 +disabled = true [node name="Pad" type="MarginContainer" parent="HBoxContainer"] layout_mode = 2 -theme_override_constants/margin_left = 350 +theme_override_constants/margin_left = 200 [connection signal="item_selected" from="HBoxContainer/HBoxContainer/LookAndLearnOptionButton" to="." method="_on_look_and_learn_option_button_item_selected"] [connection signal="item_selected" from="HBoxContainer/HBoxContainer/ExerciseOptionButton1" to="." method="_on_exercise_option_button_1_item_selected"] diff --git a/sources/menus/settings/lesson_unlocks.gd b/sources/menus/settings/lesson_unlocks.gd index b2424b0f..0e772a08 100644 --- a/sources/menus/settings/lesson_unlocks.gd +++ b/sources/menus/settings/lesson_unlocks.gd @@ -1,50 +1,42 @@ extends Control +class_name LessonUnlocks const StudentUnlock: = preload("res://sources/menus/settings/lesson_unlock.gd") const student_unlock_scene: = preload("res://sources/menus/settings/lesson_unlock.tscn") -@onready var device_option_button: OptionButton = %DeviceOptionButton -@onready var student_option_button: OptionButton = %StudentOptionButton @onready var lesson_container: VBoxContainer = %LessonContainer +@export var device: int +@export var student: String: + set= _on_student_changed -func _ready() -> void: - for device in UserDataManager.teacher_settings.students.keys(): - device_option_button.add_item(str(device), device) - - device_option_button.select(0) - _on_device_option_button_item_selected(0) - - _create_lessons() - +var progression: UserProgression func _create_lessons() -> void: for lesson_unlock in lesson_container.get_children(): lesson_unlock.queue_free() - for lesson_number in UserDataManager.student_progression.unlocks.keys(): + Database.db.query("SELECT LessonNb, group_concat(Grapheme || '-' ||Phoneme, ' ') GPs FROM Lessons +INNER JOIN GPsInLessons ON GPsInLessons.LessonID = Lessons.ID +INNER JOIN GPs ON GPsInLessons.GPID = GPs.ID +GROUP BY LessonNb +ORDER BY LessonNb") + for e in Database.db.query_result: var student_unlock: StudentUnlock = student_unlock_scene.instantiate() - student_unlock.lesson_number = lesson_number - + student_unlock.lesson_GPs = e.GPs + student_unlock.lesson_number = e.LessonNb + student_unlock.unlocks = progression.unlocks lesson_container.add_child(student_unlock) + + student_unlock.unlocks_changed.connect(_create_lessons) -func _on_device_option_button_item_selected(index: int) -> void: - var device_id: = device_option_button.get_item_id(index) - student_option_button.clear() - for student in UserDataManager.teacher_settings.students[device_id]: - student_option_button.add_item(student.name, int(student.code)) - student_option_button.select(0) - _on_student_option_button_item_selected(0) - - -func _on_student_option_button_item_selected(index: int) -> void: - var student_code: = str(student_option_button.get_item_id(index)) - if not UserDataManager.login_student(student_code): - return - +func _on_student_changed(value: String)-> void: + student = value + progression = UserDataManager.get_student_progression_for_code(device, student) _create_lessons() func _on_back_button_pressed() -> void: - get_tree().change_scene_to_file("res://sources/menus/settings/teacher_settings.tscn") + UserDataManager.save_student_progression_for_code(device, student, progression) + hide() diff --git a/sources/menus/settings/lesson_unlocks.tscn b/sources/menus/settings/lesson_unlocks.tscn index 45f382fd..9f127d89 100644 --- a/sources/menus/settings/lesson_unlocks.tscn +++ b/sources/menus/settings/lesson_unlocks.tscn @@ -1,6 +1,5 @@ -[gd_scene load_steps=5 format=3 uid="uid://qsvbq6ruc44v"] +[gd_scene load_steps=4 format=3 uid="uid://qsvbq6ruc44v"] -[ext_resource type="PackedScene" uid="uid://wdjp1sv55q4f" path="res://sources/menus/components/night_sky/night_sky.tscn" id="1_dkefm"] [ext_resource type="Script" path="res://sources/menus/settings/lesson_unlocks.gd" id="1_rlqp5"] [ext_resource type="PackedScene" uid="uid://dbl3r8426473v" path="res://sources/language_tool/plus_button.tscn" id="2_wiajt"] [ext_resource type="Texture2D" uid="uid://cw15lg6j37pvj" path="res://assets/menus/back_button.png" id="3_v7dp3"] @@ -14,9 +13,6 @@ grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_rlqp5") -[node name="Background" parent="." instance=ExtResource("1_dkefm")] -layout_mode = 1 - [node name="MarginContainer" type="MarginContainer" parent="."] layout_mode = 1 anchors_preset = 15 @@ -29,6 +25,9 @@ theme_override_constants/margin_top = 250 theme_override_constants/margin_right = 250 theme_override_constants/margin_bottom = 250 +[node name="TextureRect" type="ColorRect" parent="MarginContainer"] +layout_mode = 2 + [node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"] layout_mode = 2 @@ -49,7 +48,7 @@ layout_mode = 2 layout_mode = 2 size_flags_horizontal = 3 theme_override_font_sizes/font_size = 64 -text = "Lesson" +text = "LESSON" [node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer"] layout_mode = 2 @@ -59,48 +58,22 @@ theme_override_constants/separation = 20 [node name="Label" type="Label" parent="MarginContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 3 -text = "Look and Learn" +text = "LOOKANDLEARN" [node name="Label2" type="Label" parent="MarginContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 3 -text = "Exercise 1" +text = "EXERCISE1" [node name="Label3" type="Label" parent="MarginContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 3 -text = "Exercise 2" +text = "EXERCISE2" [node name="Label4" type="Label" parent="MarginContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 3 -text = "Exercise 3" - -[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer"] -layout_mode = 2 -theme_override_constants/separation = 25 - -[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/VBoxContainer"] -layout_mode = 2 - -[node name="Label" type="Label" parent="MarginContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/VBoxContainer/VBoxContainer"] -layout_mode = 2 -text = "Device :" - -[node name="DeviceOptionButton" type="OptionButton" parent="MarginContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/VBoxContainer/VBoxContainer"] -unique_name_in_owner = true -layout_mode = 2 - -[node name="VBoxContainer2" type="VBoxContainer" parent="MarginContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/VBoxContainer"] -layout_mode = 2 - -[node name="Label" type="Label" parent="MarginContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/VBoxContainer/VBoxContainer2"] -layout_mode = 2 -text = "Student :" - -[node name="StudentOptionButton" type="OptionButton" parent="MarginContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/VBoxContainer/VBoxContainer2"] -unique_name_in_owner = true -layout_mode = 2 +text = "EXERCISE3" [node name="BackButton" parent="MarginContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer" instance=ExtResource("2_wiajt")] layout_mode = 2 @@ -127,8 +100,6 @@ unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 -[connection signal="item_selected" from="MarginContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/VBoxContainer/VBoxContainer/DeviceOptionButton" to="." method="_on_device_option_button_item_selected"] -[connection signal="item_selected" from="MarginContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/VBoxContainer/VBoxContainer2/StudentOptionButton" to="." method="_on_student_option_button_item_selected"] [connection signal="pressed" from="MarginContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/BackButton" to="." method="_on_back_button_pressed"] [editable path="MarginContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/BackButton"] diff --git a/sources/menus/settings/student_panel.gd b/sources/menus/settings/student_panel.gd index 15600c90..684b97f3 100644 --- a/sources/menus/settings/student_panel.gd +++ b/sources/menus/settings/student_panel.gd @@ -1,6 +1,8 @@ extends Control class_name StudentPanel +signal pressed + @onready var name_label : Label = %NameLabel @onready var password_visualizer : PasswordVisualizer = %PasswordVisualizer @@ -21,5 +23,4 @@ func _ready(): func _on_details_button_pressed(): - # UserDataManager.delete_student(1, student_data.code) - print(student_data) + pressed.emit() diff --git a/sources/menus/settings/student_panel.tscn b/sources/menus/settings/student_panel.tscn index a5617382..1844de5b 100644 --- a/sources/menus/settings/student_panel.tscn +++ b/sources/menus/settings/student_panel.tscn @@ -49,7 +49,6 @@ vertical_alignment = 1 unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 4 -password = "123" [node name="DetailsButton" type="TextureButton" parent="StudentContainer"] layout_mode = 2 diff --git a/sources/menus/settings/teacher_settings.gd b/sources/menus/settings/teacher_settings.gd index 27df296b..2f5e5cc7 100644 --- a/sources/menus/settings/teacher_settings.gd +++ b/sources/menus/settings/teacher_settings.gd @@ -13,6 +13,8 @@ const device_tab_scene : PackedScene = preload("res://sources/menus/settings/dev @onready var effects_volume_slider: HSlider = %EffectsVolumeSlider @onready var devices_tab_container : TabContainer = %DevicesTabContainer +@onready var lesson_unlocks: LessonUnlocks = $LessonUnlocks + func _ready(): await _refresh_devices_tabs() @@ -39,6 +41,8 @@ func _refresh_devices_tabs() -> void: device_tab.device_id = device device_tab.students = UserDataManager.teacher_settings.students[device] devices_tab_container.add_child(device_tab) + + device_tab.student_pressed.connect(_on_student_pressed) func _on_back_button_pressed(): @@ -52,6 +56,15 @@ func _on_logout_button_pressed(): get_tree().change_scene_to_file(main_menu_path) +func _on_devices_tab_container_tab_changed(tab: int) -> void: + lesson_unlocks.device = tab + 1 + + +func _on_student_pressed(code: String): + lesson_unlocks.student = code + lesson_unlocks.show() + + func _on_add_student_button_pressed(): var current_tab = devices_tab_container.get_current_tab_control() as DeviceTab if not current_tab: @@ -69,10 +82,6 @@ func _on_add_device_button_pressed(): if UserDataManager.add_device(): _refresh_devices_tabs() - -func _on_lesson_unlocks_button_pressed() -> void: - get_tree().change_scene_to_file("res://sources/menus/settings/lesson_unlocks.tscn") - # ------------ Volume Menu ------------ func _on_volume_button_pressed() -> void: diff --git a/sources/menus/settings/teacher_settings.tscn b/sources/menus/settings/teacher_settings.tscn index d99ef562..a52b81af 100644 --- a/sources/menus/settings/teacher_settings.tscn +++ b/sources/menus/settings/teacher_settings.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=9 format=3 uid="uid://ci7ueo06f24k3"] +[gd_scene load_steps=10 format=3 uid="uid://ci7ueo06f24k3"] [ext_resource type="Script" path="res://sources/menus/settings/teacher_settings.gd" id="1_ojivk"] [ext_resource type="PackedScene" uid="uid://wdjp1sv55q4f" path="res://sources/menus/components/night_sky/night_sky.tscn" id="1_v06h8"] @@ -8,6 +8,7 @@ [ext_resource type="Texture2D" uid="uid://dkvf2b6b1keqf" path="res://assets/minigames/minigame_ui/graphic/volume_up.png" id="6_urri0"] [ext_resource type="Texture2D" uid="uid://blgoagm5j5jh2" path="res://assets/minigames/minigame_ui/graphic/volume_down.png" id="7_71of5"] [ext_resource type="Texture2D" uid="uid://cuxo6l6hmin1y" path="res://assets/minigames/minigame_ui/graphic/volume_disabled.png" id="8_tfdgw"] +[ext_resource type="PackedScene" uid="uid://qsvbq6ruc44v" path="res://sources/menus/settings/lesson_unlocks.tscn" id="9_mljfd"] [node name="TeacherSettings" type="Control"] layout_mode = 3 @@ -45,6 +46,7 @@ texture_disabled = ExtResource("5_e3piv") stretch_mode = 4 [node name="VolumeContainer" type="MarginContainer" parent="InterfaceLeft/Container"] +visible = false layout_mode = 2 size_flags_vertical = 3 size_flags_stretch_ratio = 3.0 @@ -54,7 +56,6 @@ theme_override_constants/margin_right = 100 [node name="VolumeButton" type="TextureButton" parent="InterfaceLeft/Container/VolumeContainer"] unique_name_in_owner = true -visible = false layout_mode = 2 texture_normal = ExtResource("6_urri0") texture_pressed = ExtResource("7_71of5") @@ -247,10 +248,9 @@ layout_mode = 2 theme_override_font_sizes/font_size = 70 text = "Delete device" -[node name="LessonUnlocksButton" type="Button" parent="VBoxContainer/InterfaceBottom/Container"] -layout_mode = 2 -theme_override_font_sizes/font_size = 70 -text = "SETTINGS_LESSONS" +[node name="LessonUnlocks" parent="." instance=ExtResource("9_mljfd")] +visible = false +layout_mode = 1 [connection signal="pressed" from="InterfaceLeft/Container/BackButton" to="." method="_on_back_button_pressed"] [connection signal="pressed" from="InterfaceLeft/Container/VolumeContainer/VolumeButton" to="." method="_on_volume_button_pressed"] @@ -259,6 +259,6 @@ text = "SETTINGS_LESSONS" [connection signal="value_changed" from="InterfaceLeft/Container/VolumeContainer/VolumeButton/VolumeMenu/VBoxContainer/VoiceVolumeMarginContainer/VBoxContainer/HBoxContainer/MarginContainer/VoiceVolumeSlider" to="." method="_on_voice_volume_slider_value_changed"] [connection signal="value_changed" from="InterfaceLeft/Container/VolumeContainer/VolumeButton/VolumeMenu/VBoxContainer/EffectsVolumeMarginContainer/VBoxContainer/HBoxContainer/MarginContainer/EffectsVolumeSlider" to="." method="_on_effects_volume_slider_value_changed"] [connection signal="pressed" from="InterfaceLeft/Container/LogoutButton" to="." method="_on_logout_button_pressed"] +[connection signal="tab_changed" from="VBoxContainer/DevicesTabContainer" to="." method="_on_devices_tab_container_tab_changed"] [connection signal="pressed" from="VBoxContainer/InterfaceBottom/Container/AddDeviceButton" to="." method="_on_add_device_button_pressed"] [connection signal="pressed" from="VBoxContainer/InterfaceBottom/Container/AddStudentButton" to="." method="_on_add_student_button_pressed"] -[connection signal="pressed" from="VBoxContainer/InterfaceBottom/Container/LessonUnlocksButton" to="." method="_on_lesson_unlocks_button_pressed"] diff --git a/sources/minigames/base/words/words_minigame.gd b/sources/minigames/base/words/words_minigame.gd index ea4df31b..df2de867 100644 --- a/sources/minigames/base/words/words_minigame.gd +++ b/sources/minigames/base/words/words_minigame.gd @@ -16,7 +16,7 @@ var current_gp_distractors_queue: Array[Dictionary] = [] # Find the stimuli and distractions of the minigame. func _find_stimuli_and_distractions() -> void: # Get the currently known words list - var words_list: = Database.get_words_for_lesson(lesson_nb, false, max_number_of_GPs) + var words_list: = Database.get_words_for_lesson(lesson_nb, false, 2, max_number_of_GPs) if words_list.is_empty(): return @@ -24,6 +24,9 @@ func _find_stimuli_and_distractions() -> void: var previous_lesson_words: = [] for word: Dictionary in words_list: + if not FileAccess.file_exists(Database.get_word_sound_path(word)): + continue + if word.LessonNb == lesson_nb: current_lesson_words.append(word) else: diff --git a/sources/minigames/monkeys/monkeys_minigame.tscn b/sources/minigames/monkeys/monkeys_minigame.tscn index 0d4d06d5..a48e3010 100644 --- a/sources/minigames/monkeys/monkeys_minigame.tscn +++ b/sources/minigames/monkeys/monkeys_minigame.tscn @@ -28,7 +28,7 @@ max_number_of_GPs = 6 distractors_queue_size = 6 time_between_words = 3.0 minigame_name = 3 -lesson_nb = 12 +lesson_nb = 8 max_number_of_lives = 5 max_progression = 5 @@ -120,11 +120,11 @@ theme_override_constants/margin_top = -10 [node name="Label" type="RichTextLabel" parent="GameRoot/TextPlank/MarginContainer" index="0"] layout_mode = 2 -theme_override_colors/font_shadow_color = Color(0, 0, 0, 0.568627) theme_override_colors/font_outline_color = Color(0, 0, 0, 1) -theme_override_constants/shadow_offset_x = 7 -theme_override_constants/shadow_offset_y = 7 +theme_override_colors/font_shadow_color = Color(0, 0, 0, 0.568627) theme_override_constants/outline_size = 7 +theme_override_constants/shadow_offset_y = 7 +theme_override_constants/shadow_offset_x = 7 theme_override_fonts/normal_font = SubResource("FontVariation_br573") theme_override_font_sizes/normal_font_size = 180 text = "fort" diff --git a/sources/utils/autoloads/user_data_manager.gd b/sources/utils/autoloads/user_data_manager.gd index 7b0ccde4..0fc04375 100644 --- a/sources/utils/autoloads/user_data_manager.gd +++ b/sources/utils/autoloads/user_data_manager.gd @@ -286,7 +286,7 @@ func _load_student_progression() -> void: _save_student_progression() if student_progression.init_unlocks(): - _save_student_progression() + _save_student_progression() student_progression.unlocks_changed.connect(_on_user_progression_unlocks_changed) func _save_student_progression() -> void: @@ -295,6 +295,29 @@ func _save_student_progression() -> void: func _on_user_progression_unlocks_changed() -> void: _save_student_progression() + +func get_student_progression_for_code(device: int, student: String) -> UserProgression: + if not teacher_settings or not teacher_settings.students.has(device): + return + + var student_path: String ="user://".path_join(_device_settings.teacher).path_join(str(device)).path_join(_device_settings.language).path_join(student) + var progression_path: String = student_path.path_join("progression.tres") + + var progression: UserProgression + + if FileAccess.file_exists(progression_path): + progression = load(progression_path) + else: + progression = UserProgression.new() + DirAccess.make_dir_recursive_absolute(student_path) + ResourceSaver.save(student_progression, progression_path) + + return progression + +func save_student_progression_for_code(device: int, student: String, progression: UserProgression) -> void: + var progression_path: String = "user://".path_join(_device_settings.teacher).path_join(str(device)).path_join(_device_settings.language).path_join(student).path_join("progression.tres") + ResourceSaver.save(progression, progression_path) + #endregion #region Student remediation diff --git a/sources/utils/state_machine/state.gd b/sources/utils/state_machine/state.gd deleted file mode 100644 index 3c59d175..00000000 --- a/sources/utils/state_machine/state.gd +++ /dev/null @@ -1,34 +0,0 @@ -extends Node -class_name State - -@export var can_be_previous: = true - -var state_machine: StateMachine - - -func _init() -> void: - add_to_group("state") - - -func enter_state(_msg: Dictionary = {}) -> void: - pass - - -func exit_state() -> void: - pass - - -func state_process(_delta: float) -> void: - pass - - -func state_physics_process(_delta: float) -> void: - pass - - -func state_unhandled_input(_event: InputEvent) -> void: - pass - - -func go_to_state(state_path: String, msg: Dictionary = {}) -> void: - state_machine.go_to_state(state_path, msg) diff --git a/sources/utils/state_machine/state_machine.gd b/sources/utils/state_machine/state_machine.gd deleted file mode 100644 index 75f9e489..00000000 --- a/sources/utils/state_machine/state_machine.gd +++ /dev/null @@ -1,87 +0,0 @@ -extends Node -class_name StateMachine - -signal state_changed(state_path, msg) - -@export_node_path(Node) var initial_state_path: NodePath - -var state: State = null -var current_msg: = {} -var previous_state: State = null -var previous_msg: = {} -var _is_active: = false -var is_active: = false: - get: return _get_is_active() - set(value): _set_is_active(value) - - -func _ready() -> void: - self.is_active = false - - var children: = get_children() - for node in children: - children.append_array(node.get_children()) - if node is State: - node.state_machine = self - - -func start() -> void: - go_to_state(initial_state_path) - self.is_active = true - - -func _process(delta: float) -> void: - if state: - state.state_process(delta) - - -func _physics_process(delta: float) -> void: - if state: - state.state_physics_process(delta) - - -func _unhandled_input(event: InputEvent) -> void: - if state: - state.state_unhandled_input(event) - - -func go_to_state(state_path: String, msg:= {}): - var new_state: State = null - if state_path == "Previous": - if previous_state == null: - push_error("No previous state at this point") - return - new_state = previous_state - for key in previous_msg.keys(): - if not msg.has(key): - msg[key] = previous_msg[key] - else: - if not has_node(state_path): - push_error("State not found :" + state_path) - return - new_state = get_node(state_path) - - if state and state.can_be_previous: - previous_msg = current_msg - previous_state = state - - if state: - state.exit_state() - - self.state = new_state - state.enter_state(msg) - current_msg = msg - - emit_signal("state_changed", state_path, msg) - - -func _set_is_active(value: bool) -> void: - _is_active = value - - set_process(value) - set_physics_process(value) - set_process_unhandled_input(value) - - -func _get_is_active() -> bool: - return _is_active