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 61a75546..2db12231 100644 Binary files a/kalulu_localization.es.translation and b/kalulu_localization.es.translation differ diff --git a/kalulu_localization.fr.translation b/kalulu_localization.fr.translation index cede7ecb..6f14b109 100644 Binary files a/kalulu_localization.fr.translation and b/kalulu_localization.fr.translation differ 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