Adds student login screen

This commit is contained in:
Dylan Sarrazyn
2024-01-23 16:55:27 +01:00
parent 0758d6f0fa
commit a0c1990ef4
60 changed files with 1212 additions and 51 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ce2dk2so7yo85"
path="res://.godot/imported/button_symbol01_down.png-6a637f4e323963480f35f75b8d9b21df.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/button_symbol01_down.png"
dest_files=["res://.godot/imported/button_symbol01_down.png-6a637f4e323963480f35f75b8d9b21df.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://de8087qre3hqd"
path="res://.godot/imported/button_symbol01_up.png-fc4e63118efa81329fa90d9f59c724e7.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/button_symbol01_up.png"
dest_files=["res://.godot/imported/button_symbol01_up.png-fc4e63118efa81329fa90d9f59c724e7.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cghxguj0vdhx7"
path="res://.godot/imported/button_symbol02_down.png-e368b7b3c6388780f373ebd468e634e0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/button_symbol02_down.png"
dest_files=["res://.godot/imported/button_symbol02_down.png-e368b7b3c6388780f373ebd468e634e0.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cq6ctjti7nroe"
path="res://.godot/imported/button_symbol02_up.png-469684a601c7346f07913cd101156a7d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/button_symbol02_up.png"
dest_files=["res://.godot/imported/button_symbol02_up.png-469684a601c7346f07913cd101156a7d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://da7g76llxx8t5"
path="res://.godot/imported/button_symbol03_down.png-6613094d878b584bffa14b4ab15dcc57.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/button_symbol03_down.png"
dest_files=["res://.godot/imported/button_symbol03_down.png-6613094d878b584bffa14b4ab15dcc57.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bxrtewrqlop6h"
path="res://.godot/imported/button_symbol03_up.png-901524e9d6d764140cf56b063e28ecc2.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/button_symbol03_up.png"
dest_files=["res://.godot/imported/button_symbol03_up.png-901524e9d6d764140cf56b063e28ecc2.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c6od4ikuean3f"
path="res://.godot/imported/button_symbol04_down.png-501ce2a0c449457ef762a0299795a5f0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/button_symbol04_down.png"
dest_files=["res://.godot/imported/button_symbol04_down.png-501ce2a0c449457ef762a0299795a5f0.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bh7toiwhvln0v"
path="res://.godot/imported/button_symbol04_up.png-c63028c9326efc438b914fde66fe4929.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/button_symbol04_up.png"
dest_files=["res://.godot/imported/button_symbol04_up.png-c63028c9326efc438b914fde66fe4929.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ch87nxu2c0vf8"
path="res://.godot/imported/button_symbol05_down.png-5cd0847755fe84c215f7a7407e29fe47.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/button_symbol05_down.png"
dest_files=["res://.godot/imported/button_symbol05_down.png-5cd0847755fe84c215f7a7407e29fe47.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d18rbiborhmow"
path="res://.godot/imported/button_symbol05_up.png-2e6961e430e0fd6bebe5c951139a81b0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/button_symbol05_up.png"
dest_files=["res://.godot/imported/button_symbol05_up.png-2e6961e430e0fd6bebe5c951139a81b0.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dce53jiyk6gy6"
path="res://.godot/imported/button_symbol06_down.png-f8773bcff4308b4dc57094938daeaab4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/button_symbol06_down.png"
dest_files=["res://.godot/imported/button_symbol06_down.png-f8773bcff4308b4dc57094938daeaab4.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://eg5jrfombxb8"
path="res://.godot/imported/button_symbol06_up.png-f8a3e511c2f0ae8ec428986a5e4dcd12.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/button_symbol06_up.png"
dest_files=["res://.godot/imported/button_symbol06_up.png-f8a3e511c2f0ae8ec428986a5e4dcd12.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://g2igusggq16s"
path="res://.godot/imported/button_teacher_0.png-57a64c880117d477bb7284ad1d9020ae.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/button_teacher_0.png"
dest_files=["res://.godot/imported/button_teacher_0.png-57a64c880117d477bb7284ad1d9020ae.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b4xm8a5y2lf3h"
path="res://.godot/imported/button_teacher_1.png-96a88964da2971d6834e2385474b021e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/button_teacher_1.png"
dest_files=["res://.godot/imported/button_teacher_1.png-96a88964da2971d6834e2385474b021e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d3rhl050u0ahl"
path="res://.godot/imported/password_background.png-6cae367f4dcff551398f76cfd245c9cc.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/password_background.png"
dest_files=["res://.godot/imported/password_background.png-6cae367f4dcff551398f76cfd245c9cc.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

+34
View File
@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b6vmq2e1krf6c"
path="res://.godot/imported/symbol01.png-06a805f5f175054ad40571eaeb0c829f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/symbol01.png"
dest_files=["res://.godot/imported/symbol01.png-06a805f5f175054ad40571eaeb0c829f.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

+34
View File
@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c1orskmogfiy1"
path="res://.godot/imported/symbol02.png-d08af7201f383a112fa04f2ae4cbc694.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/symbol02.png"
dest_files=["res://.godot/imported/symbol02.png-d08af7201f383a112fa04f2ae4cbc694.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

+34
View File
@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dgjpftdenxiws"
path="res://.godot/imported/symbol03.png-099345b780c50ea1452ffc753aeae618.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/symbol03.png"
dest_files=["res://.godot/imported/symbol03.png-099345b780c50ea1452ffc753aeae618.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

+34
View File
@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d0xbr0j3p8870"
path="res://.godot/imported/symbol04.png-9a22b232eb56dd33351907ec01d49b7f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/symbol04.png"
dest_files=["res://.godot/imported/symbol04.png-9a22b232eb56dd33351907ec01d49b7f.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

+34
View File
@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://co15ohrd680cp"
path="res://.godot/imported/symbol05.png-77b3ea153b016d0fcf8ea5dcd9c960d2.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/symbol05.png"
dest_files=["res://.godot/imported/symbol05.png-77b3ea153b016d0fcf8ea5dcd9c960d2.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

+34
View File
@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c7722ryyuihhr"
path="res://.godot/imported/symbol06.png-b0ea536779fcef916498888b7cccd0ca.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/menus/login/symbol06.png"
dest_files=["res://.godot/imported/symbol06.png-b0ea536779fcef916498888b7cccd0ca.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.
@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://cbxvt04wbuyh2"
path="res://.godot/imported/intro_title_card.mp3-3b83225f716b054a6c3c15692c7b6581.mp3str"
[deps]
source_file="res://assets/menus/main/intro_title_card.mp3"
dest_files=["res://.godot/imported/intro_title_card.mp3-3b83225f716b054a6c3c15692c7b6581.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://dc4a654slbfd"
path="res://.godot/imported/login_screen_feedback_right_password.mp3-b91044c450bf67b3ef249a7be27262eb.mp3str"
[deps]
source_file="res://language_resources/fr/main_menu/audio/login_screen_feedback_right_password.mp3"
dest_files=["res://.godot/imported/login_screen_feedback_right_password.mp3-b91044c450bf67b3ef249a7be27262eb.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://cejatrmdq5wg5"
path="res://.godot/imported/login_screen_feedback_wrong_password.mp3-9b0b53527c0df2baaa5b3a9235099152.mp3str"
[deps]
source_file="res://language_resources/fr/main_menu/audio/login_screen_feedback_wrong_password.mp3"
dest_files=["res://.godot/imported/login_screen_feedback_wrong_password.mp3-9b0b53527c0df2baaa5b3a9235099152.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://bu3iq5sp8r08s"
path="res://.godot/imported/login_screen_help_code.mp3-90628bf10f58c1d2e83e7981853e2416.mp3str"
[deps]
source_file="res://language_resources/fr/main_menu/audio/login_screen_help_code.mp3"
dest_files=["res://.godot/imported/login_screen_help_code.mp3-90628bf10f58c1d2e83e7981853e2416.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://dh4s43i5pmn2p"
path="res://.godot/imported/login_screen_tuto_code_oneshot.mp3-b6cda78e1baaf2a0be5df95a55d8a6df.mp3str"
[deps]
source_file="res://language_resources/fr/main_menu/audio/login_screen_tuto_code_oneshot.mp3"
dest_files=["res://.godot/imported/login_screen_tuto_code_oneshot.mp3-b6cda78e1baaf2a0be5df95a55d8a6df.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
+10 -4
View File
@@ -6,17 +6,17 @@ class_name DeviceSettings
language = value
Database.language = value
TranslationServer.set_locale(value)
@export var teacher : String
@export var device_id : String
@export var device_id : int
# List of current known logins for teachers
const possible_logins: = {
"kalulu" : "kalulu",
}
func _init():
# Gets the OS language and Checks if it is supported
var osLanguage = OS.get_locale_language();
if osLanguage and osLanguage in DirAccess.open("res://language_resources").get_directories():
@@ -26,4 +26,10 @@ func _init():
language = "fr"
teacher = ""
device_id = ""
device_id = 0
func get_folder_path() -> String:
var file_path := "user://" + teacher + "/" + str(device_id) + "/" + language + "/"
return file_path
+106
View File
@@ -0,0 +1,106 @@
extends Control
# [123, 124, 125, 126, 132, 134, 135, 136, 142, 143, 145, 146, 152, 153, 154, 213, 214, 215, 216, 231, 234, 235, 236, 241, 243, 245, 246, 251, 253, 254, 321, 324, 325, 326, 312, 314, 315, 316, 342, 341, 345, 346, 352, 351, 354, 423, 421, 425, 426, 432, 431, 435, 436, 412, 413, 415, 416, 452, 453, 451, 523, 524, 521, 526, 532, 534, 531, 536, 542, 543, 541, 546, 512, 513, 514, 623, 624, 625, 621, 632, 634, 635, 631, 642, 643, 645, 641, 652, 653, 654]
const back_scene_path: = "res://sources/menus/main/main_menu.tscn"
const next_scene_path: = "res://sources/menus/minigame_selection.tscn"
const icons_textures = [
preload("res://assets/menus/login/symbol01.png"),
preload("res://assets/menus/login/symbol02.png"),
preload("res://assets/menus/login/symbol03.png"),
preload("res://assets/menus/login/symbol04.png"),
preload("res://assets/menus/login/symbol05.png"),
preload("res://assets/menus/login/symbol06.png")
]
const help_speech_path : String = "main_menu/audio/login_screen_help_code.mp3"
const wrong_password_speech_path : String = "main_menu/audio/login_screen_feedback_wrong_password.mp3"
const right_password_speech_path : String = "main_menu/audio/login_screen_feedback_right_password.mp3"
@onready var kalulu: Control = $Kalulu
@onready var music_player : AudioStreamPlayer = $MusicStreamPlayer
@onready var buttons: GridContainer = $Buttons
@onready var icons : HBoxContainer = $Icons
@onready var teacher_timer : Timer = $InterfaceRight/TeacherButton/TeacherTimer
var password : Array = []
func _ready():
# Connect buttons
for button in buttons.get_children(false):
button.connect("pressed", _on_button_pressed.bind(button))
await kalulu.play_kalulu_speech(Database.get_audio_stream_for_path(help_speech_path))
# music_player.stream = load("res://assets/menus/main/intro_title_card.mp3")
# music_player.play()
func _reset_password():
password = []
for button in buttons.get_children(false):
button.set_modulate(Color(1,1,1))
button.set_disabled(false)
for icon in icons.get_children(false):
icon.texture = null
func _on_button_pressed(button : TextureButton):
var index : int = button.name.to_int()
password.append(button.name)
button.set_modulate(Color(0.5,0.5,0.5))
button.set_disabled(true)
var password_size = password.size()
var test = icons.get_node(str(password_size))
test.texture = icons_textures[index-1]
if password_size == 3:
_check_password()
func _check_password():
var test = ""
for char_ in password:
test += char_
if test == "123":
await kalulu.play_kalulu_speech(Database.get_audio_stream_for_path(right_password_speech_path))
UserDataManager.student = test
get_tree().change_scene_to_file(next_scene_path)
else:
await kalulu.play_kalulu_speech(Database.get_audio_stream_for_path(wrong_password_speech_path))
_reset_password()
func _on_back_button_pressed():
get_tree().change_scene_to_file(back_scene_path)
func _on_kalulu_button_pressed():
kalulu.play_kalulu_speech(Database.get_audio_stream_for_path(help_speech_path))
func _on_teacher_button_button_down():
teacher_timer.start()
func _on_teacher_button_button_up():
teacher_timer.stop()
func _on_teacher_timer_timeout():
# TODO
print("Teacher screen")
func _on_music_stream_player_finished():
music_player.stream_paused = false
music_player.play()
+212
View File
@@ -0,0 +1,212 @@
[gd_scene load_steps=25 format=3 uid="uid://2wab3q35ssta"]
[ext_resource type="Texture2D" uid="uid://d3rhl050u0ahl" path="res://assets/menus/login/password_background.png" id="1_mw5cp"]
[ext_resource type="Script" path="res://sources/menus/login/login.gd" id="1_spyuf"]
[ext_resource type="PackedScene" uid="uid://blos4rn53qkwg" path="res://sources/minigames/base/kalulu.tscn" id="3_5b1v0"]
[ext_resource type="Texture2D" uid="uid://wtx3wqs0l4si" path="res://assets/minigames/minigame_ui/graphic/button_back_up.png" id="4_3vuah"]
[ext_resource type="Texture2D" uid="uid://cbhip35yyqneg" path="res://assets/minigames/minigame_ui/graphic/button_back_down.png" id="5_vd33f"]
[ext_resource type="Texture2D" uid="uid://tcapan0mj64o" path="res://assets/minigames/minigame_ui/graphic/button_back_disabled.png" id="6_0dhup"]
[ext_resource type="Texture2D" uid="uid://iw84x6mx8h2g" path="res://assets/minigames/minigame_ui/graphic/button_kalulu_up.png" id="7_2wdoi"]
[ext_resource type="Texture2D" uid="uid://ub1dnysbojn8" path="res://assets/minigames/minigame_ui/graphic/button_kalulu_down.png" id="8_nxlxw"]
[ext_resource type="Texture2D" uid="uid://b4xm8a5y2lf3h" path="res://assets/menus/login/button_teacher_1.png" id="9_7lscf"]
[ext_resource type="Texture2D" uid="uid://crnxawhf68po3" path="res://assets/minigames/minigame_ui/graphic/button_kalulu_disabled.png" id="9_k74e3"]
[ext_resource type="Texture2D" uid="uid://de8087qre3hqd" path="res://assets/menus/login/button_symbol01_up.png" id="10_kigl0"]
[ext_resource type="Texture2D" uid="uid://g2igusggq16s" path="res://assets/menus/login/button_teacher_0.png" id="10_ro1l5"]
[ext_resource type="Texture2D" uid="uid://ce2dk2so7yo85" path="res://assets/menus/login/button_symbol01_down.png" id="11_fs1ex"]
[ext_resource type="Texture2D" uid="uid://cq6ctjti7nroe" path="res://assets/menus/login/button_symbol02_up.png" id="12_ygmrs"]
[ext_resource type="Texture2D" uid="uid://cghxguj0vdhx7" path="res://assets/menus/login/button_symbol02_down.png" id="13_ghp6c"]
[ext_resource type="Texture2D" uid="uid://bxrtewrqlop6h" path="res://assets/menus/login/button_symbol03_up.png" id="14_ap24d"]
[ext_resource type="Texture2D" uid="uid://da7g76llxx8t5" path="res://assets/menus/login/button_symbol03_down.png" id="15_wh2p6"]
[ext_resource type="Texture2D" uid="uid://bh7toiwhvln0v" path="res://assets/menus/login/button_symbol04_up.png" id="16_5ip8d"]
[ext_resource type="Texture2D" uid="uid://c6od4ikuean3f" path="res://assets/menus/login/button_symbol04_down.png" id="17_876tw"]
[ext_resource type="Texture2D" uid="uid://d18rbiborhmow" path="res://assets/menus/login/button_symbol05_up.png" id="18_6ncp7"]
[ext_resource type="Texture2D" uid="uid://ch87nxu2c0vf8" path="res://assets/menus/login/button_symbol05_down.png" id="19_ty7yo"]
[ext_resource type="Texture2D" uid="uid://eg5jrfombxb8" path="res://assets/menus/login/button_symbol06_up.png" id="20_xaifc"]
[ext_resource type="Texture2D" uid="uid://dce53jiyk6gy6" path="res://assets/menus/login/button_symbol06_down.png" id="21_banah"]
[ext_resource type="AudioStream" uid="uid://b8pn5vqgp6jlt" path="res://assets/menus/main/ui_title_card_music.mp3" id="22_w2yxs"]
[node name="Login" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_spyuf")
[node name="Background" type="TextureRect" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("1_mw5cp")
[node name="InterfaceLeft" type="MarginContainer" parent="."]
custom_minimum_size = Vector2(450, 0)
layout_mode = 1
anchors_preset = 9
anchor_bottom = 1.0
grow_vertical = 2
theme_override_constants/margin_left = 50
theme_override_constants/margin_top = 50
theme_override_constants/margin_right = 50
theme_override_constants/margin_bottom = 50
[node name="Container" type="VBoxContainer" parent="InterfaceLeft"]
layout_mode = 2
[node name="BackButton" type="TextureButton" parent="InterfaceLeft/Container"]
layout_mode = 2
size_flags_vertical = 3
size_flags_stretch_ratio = 4.0
texture_normal = ExtResource("4_3vuah")
texture_pressed = ExtResource("5_vd33f")
texture_disabled = ExtResource("6_0dhup")
stretch_mode = 4
[node name="KaluluButton" type="TextureButton" parent="InterfaceLeft/Container"]
layout_mode = 2
size_flags_vertical = 3
texture_normal = ExtResource("7_2wdoi")
texture_pressed = ExtResource("8_nxlxw")
texture_disabled = ExtResource("9_k74e3")
stretch_mode = 4
[node name="InterfaceRight" type="MarginContainer" parent="."]
custom_minimum_size = Vector2(450, 0)
layout_mode = 1
anchors_preset = 11
anchor_left = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -450.0
grow_horizontal = 0
grow_vertical = 2
theme_override_constants/margin_left = 50
theme_override_constants/margin_top = 50
theme_override_constants/margin_right = 50
theme_override_constants/margin_bottom = 50
[node name="TeacherButton" type="TextureButton" parent="InterfaceRight"]
custom_minimum_size = Vector2(0, 140)
layout_mode = 2
size_flags_vertical = 8
texture_normal = ExtResource("9_7lscf")
texture_pressed = ExtResource("10_ro1l5")
stretch_mode = 5
[node name="TeacherTimer" type="Timer" parent="InterfaceRight/TeacherButton"]
wait_time = 5.0
[node name="Icons" type="HBoxContainer" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -676.0
offset_top = -565.0
offset_right = 676.0
offset_bottom = -145.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/separation = 46
[node name="1" type="TextureRect" parent="Icons"]
custom_minimum_size = Vector2(420, 420)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
stretch_mode = 5
[node name="2" type="TextureRect" parent="Icons"]
custom_minimum_size = Vector2(420, 420)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
[node name="3" type="TextureRect" parent="Icons"]
custom_minimum_size = Vector2(420, 420)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
[node name="Buttons" type="GridContainer" parent="."]
layout_mode = 1
anchors_preset = -1
anchor_left = 0.203125
anchor_top = 0.573333
anchor_right = 0.796875
anchor_bottom = 0.96
grow_horizontal = 2
grow_vertical = 0
theme_override_constants/h_separation = 25
theme_override_constants/v_separation = 25
columns = 2
metadata/_edit_use_anchors_ = true
[node name="1" type="TextureButton" parent="Buttons"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
texture_normal = ExtResource("10_kigl0")
texture_pressed = ExtResource("11_fs1ex")
stretch_mode = 5
[node name="2" type="TextureButton" parent="Buttons"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
texture_normal = ExtResource("12_ygmrs")
texture_pressed = ExtResource("13_ghp6c")
stretch_mode = 5
[node name="3" type="TextureButton" parent="Buttons"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
texture_normal = ExtResource("14_ap24d")
texture_pressed = ExtResource("15_wh2p6")
stretch_mode = 5
[node name="4" type="TextureButton" parent="Buttons"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
texture_normal = ExtResource("16_5ip8d")
texture_pressed = ExtResource("17_876tw")
stretch_mode = 5
[node name="5" type="TextureButton" parent="Buttons"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
texture_normal = ExtResource("18_6ncp7")
texture_pressed = ExtResource("19_ty7yo")
stretch_mode = 5
[node name="6" type="TextureButton" parent="Buttons"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
texture_normal = ExtResource("20_xaifc")
texture_pressed = ExtResource("21_banah")
stretch_mode = 5
[node name="Kalulu" parent="." instance=ExtResource("3_5b1v0")]
visible = false
layout_mode = 1
[node name="MusicStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("22_w2yxs")
autoplay = true
[connection signal="pressed" from="InterfaceLeft/Container/BackButton" to="." method="_on_back_button_pressed"]
[connection signal="pressed" from="InterfaceLeft/Container/KaluluButton" to="." method="_on_kalulu_button_pressed"]
[connection signal="button_down" from="InterfaceRight/TeacherButton" to="." method="_on_teacher_button_button_down"]
[connection signal="button_up" from="InterfaceRight/TeacherButton" to="." method="_on_teacher_button_button_up"]
[connection signal="timeout" from="InterfaceRight/TeacherButton/TeacherTimer" to="." method="_on_teacher_timer_timeout"]
[connection signal="finished" from="MusicStreamPlayer" to="." method="_on_music_stream_player_finished"]
+3 -4
View File
@@ -14,7 +14,7 @@ var elapsedTime : float = 0.0
func _ready():
start_speech()
_play_speech(Database.get_audio_stream_for_path(tuto_speech_path))
func _process(delta):
@@ -24,8 +24,7 @@ func _process(delta):
if not isSpeaking:
elapsedTime += delta
if elapsedTime > 20:
_play_speech(Database.get_audio_stream_for_path(feedback_speech_path))
start_speech()
func _play_speech(speech : AudioStream):
isSpeaking = true
@@ -42,7 +41,7 @@ func _play_speech(speech : AudioStream):
func start_speech():
_play_speech(Database.get_audio_stream_for_path(tuto_speech_path))
_play_speech(Database.get_audio_stream_for_path(feedback_speech_path))
func stop_speech():
+14 -10
View File
@@ -1,22 +1,26 @@
extends Control
@onready var language_field : OptionButton = $LanguageField
@onready var email_field : LineEdit = $EmailField
@onready var password_field : LineEdit = $PasswordField
@onready var device_id_field : LineEdit = $DeviceIDField
signal logged_in
@onready var error_message : Label = $ErrorMessage
@onready var language_field : OptionButton = $Form/LanguageField
@onready var email_field : LineEdit = $Form/EmailField
@onready var password_field : LineEdit = $Form/PasswordField
@onready var device_id_field : SpinBox = $Form/DeviceIDField
@onready var field_missing_message : Label = $Form/FieldMissingError
@onready var login_message : Label = $Form/LoginError
func _on_validate_button_pressed() -> void:
# Check if all the values are given
if not email_field.text or not password_field.text or not device_id_field.text:
error_message.visible = true
if not email_field.text or not password_field.text or not device_id_field.value:
field_missing_message.visible = true
return
# TODO Check login and password
# Login
UserDataManager.login(language_field.get_selected_language(), email_field.text, device_id_field.text)
# TODO Load next scene
if UserDataManager.login(language_field.get_selected_language(), email_field.text, password_field.text, device_id_field.value):
logged_in.emit()
else:
login_message.visible = true
+2 -2
View File
@@ -1,6 +1,6 @@
extends Control
const next_scene_path: = "res://sources/menus/minigame_selection.tscn"
const next_scene_path: = "res://sources/menus/login/login.tscn"
@onready var music_player : AudioStreamPlayer = $MusicStreamPlayer
@onready var version_label : Label = $Informations/BuildVersionValue
@@ -13,7 +13,7 @@ const next_scene_path: = "res://sources/menus/minigame_selection.tscn"
func _ready():
version_label.text = ProjectSettings.get_setting("application/config/version")
teacher_label.text = UserDataManager.device_settings.teacher
device_id_label.text = UserDataManager.device_settings.device_id
device_id_label.text = str(UserDataManager.device_settings.device_id)
func _on_main_button_pressed():
+51 -26
View File
@@ -132,30 +132,51 @@ grow_vertical = 2
[node name="Login" type="Control" parent="."]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("12_6bu7q")
[node name="InterfaceLeft" type="MarginContainer" parent="Login"]
custom_minimum_size = Vector2(450, 0)
layout_mode = 1
anchors_preset = 9
anchor_bottom = 1.0
offset_right = 450.0
grow_vertical = 2
theme_override_constants/margin_left = 50
theme_override_constants/margin_top = 50
theme_override_constants/margin_right = 50
theme_override_constants/margin_bottom = 50
[node name="Container" type="VBoxContainer" parent="Login/InterfaceLeft"]
layout_mode = 2
[node name="BackButton" type="TextureButton" parent="Login/InterfaceLeft/Container"]
layout_mode = 2
size_flags_vertical = 3
texture_normal = ExtResource("13_j3nb7")
texture_pressed = ExtResource("14_3lr3g")
stretch_mode = 4
[node name="Form" type="Control" parent="Login"]
custom_minimum_size = Vector2(1350, 620)
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -649.0
offset_top = -308.0
offset_right = 649.0
offset_bottom = 308.0
offset_left = -675.0
offset_top = -310.0
offset_right = 675.0
offset_bottom = 310.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("12_6bu7q")
[node name="BackButton" type="TextureButton" parent="Login"]
layout_mode = 0
offset_left = -567.0
offset_top = -528.0
offset_right = -427.0
offset_bottom = -388.0
scale = Vector2(1.5, 1.5)
texture_normal = ExtResource("13_j3nb7")
texture_pressed = ExtResource("14_3lr3g")
[node name="EmailField" type="LineEdit" parent="Login"]
[node name="EmailField" type="LineEdit" parent="Login/Form"]
layout_mode = 1
offset_top = 80.0
offset_right = 800.0
@@ -165,14 +186,14 @@ theme_type_variation = &"1"
theme_override_font_sizes/font_size = 70
placeholder_text = "Email"
[node name="Label" type="Label" parent="Login/EmailField"]
[node name="Label" type="Label" parent="Login/Form/EmailField"]
layout_mode = 0
offset_top = -80.0
offset_right = 412.0
theme = ExtResource("15_pcmnw")
text = "Teacher login"
[node name="PasswordField" type="LineEdit" parent="Login"]
[node name="PasswordField" type="LineEdit" parent="Login/Form"]
layout_mode = 1
offset_top = 223.0
offset_right = 800.0
@@ -183,7 +204,7 @@ theme_override_constants/outline_size = 1
placeholder_text = "Password"
secret = true
[node name="DeviceIDField" type="LineEdit" parent="Login"]
[node name="DeviceIDField" type="SpinBox" parent="Login/Form"]
layout_mode = 1
anchors_preset = 1
anchor_left = 1.0
@@ -193,15 +214,19 @@ offset_top = 80.0
offset_bottom = 193.0
grow_horizontal = 0
theme = ExtResource("15_pcmnw")
min_value = 1.0
max_value = 6.0
value = 1.0
rounded = true
[node name="Label" type="Label" parent="Login/DeviceIDField"]
[node name="Label" type="Label" parent="Login/Form/DeviceIDField"]
layout_mode = 1
offset_top = -80.0
offset_right = 412.0
theme = ExtResource("15_pcmnw")
text = "Tablet number"
[node name="LanguageField" type="OptionButton" parent="Login"]
[node name="LanguageField" type="OptionButton" parent="Login/Form"]
layout_mode = 0
offset_top = 356.0
offset_right = 800.0
@@ -209,7 +234,7 @@ offset_bottom = 469.0
theme = ExtResource("15_pcmnw")
script = ExtResource("13_rs3hd")
[node name="ValidateButton" type="TextureButton" parent="Login"]
[node name="ValidateButton" type="TextureButton" parent="Login/Form"]
layout_mode = 1
anchors_preset = 3
anchor_left = 1.0
@@ -227,7 +252,7 @@ texture_normal = ExtResource("12_km7h0")
texture_pressed = ExtResource("13_oqjai")
texture_disabled = ExtResource("14_11c6x")
[node name="FieldMissingError" type="Label" parent="Login"]
[node name="FieldMissingError" type="Label" parent="Login/Form"]
visible = false
layout_mode = 1
anchors_preset = 12
@@ -239,7 +264,7 @@ grow_horizontal = 2
grow_vertical = 0
text = "Please fill all the fields"
[node name="LoginError" type="Label" parent="Login"]
[node name="LoginError" type="Label" parent="Login/Form"]
visible = false
layout_mode = 1
anchors_preset = 12
@@ -329,6 +354,6 @@ autoplay = true
[connection signal="pressed" from="Kalulu/PlayButton" to="." method="_on_main_button_pressed"]
[connection signal="logged_in" from="Login" to="." method="_on_login_in"]
[connection signal="pressed" from="Login/BackButton" to="." method="_on_back_button_pressed"]
[connection signal="pressed" from="Login/ValidateButton" to="Login" method="_on_validate_button_pressed"]
[connection signal="pressed" from="Login/InterfaceLeft/Container/BackButton" to="." method="_on_back_button_pressed"]
[connection signal="pressed" from="Login/Form/ValidateButton" to="Login" method="_on_validate_button_pressed"]
[connection signal="finished" from="MusicStreamPlayer" to="." method="_on_music_stream_player_finished"]
+5 -5
View File
@@ -4,10 +4,10 @@ extends Node
var student: String = "" :
set(student_name):
student = student_name
if student_settings:
_save_student_settings()
student = student_name
if student :
load_student_settings()
else :
@@ -50,7 +50,7 @@ func set_language(language : String) -> void:
_save_device_settings()
func login(language : String, teacher : String, password : String, device_id : String) -> bool:
func login(language : String, teacher : String, password : String, device_id : int) -> bool:
if teacher not in DeviceSettings.possible_logins or password != DeviceSettings.possible_logins[teacher]:
return false
@@ -100,12 +100,12 @@ func get_teacher_folder() -> String:
func get_student_folder() -> String:
var file_path: = get_teacher_folder() + student + "/"
var file_path: = device_settings.get_folder_path() + student + "/"
return file_path
func get_student_settings_path() -> String:
var file_path: = get_student_folder() + "settings.tres"
var file_path: = get_student_folder() + "settings.tres"
return file_path