Minigames wheel version 2
|
After Width: | Height: | Size: 2.8 KiB |
@@ -2,16 +2,16 @@
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://rux5delnabp5"
|
||||
path="res://.godot/imported/top_right.png-a3fce06eb378a6a99fc8fd188e21fb8c.ctex"
|
||||
uid="uid://d1j23o6nq476v"
|
||||
path="res://.godot/imported/ant_body.png-dad00fa87392efb7e152045fa1f6b084.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/lesson_screen/top_right.png"
|
||||
dest_files=["res://.godot/imported/top_right.png-a3fce06eb378a6a99fc8fd188e21fb8c.ctex"]
|
||||
source_file="res://assets/gardens/animals/ant_body.png"
|
||||
dest_files=["res://.godot/imported/ant_body.png-dad00fa87392efb7e152045fa1f6b084.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
After Width: | Height: | Size: 953 B |
@@ -2,16 +2,16 @@
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dkomjpclxvmqf"
|
||||
path="res://.godot/imported/top_left.png-2ca3f2b1716a8a640fa40c3a481bc4d9.ctex"
|
||||
uid="uid://by3xfdin7jrsn"
|
||||
path="res://.godot/imported/ant_face.png-b00fa29a7fcfe1e19ec19735f3395466.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/lesson_screen/top_left.png"
|
||||
dest_files=["res://.godot/imported/top_left.png-2ca3f2b1716a8a640fa40c3a481bc4d9.ctex"]
|
||||
source_file="res://assets/gardens/animals/ant_face.png"
|
||||
dest_files=["res://.godot/imported/ant_face.png-b00fa29a7fcfe1e19ec19735f3395466.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b6nrx0dn0h3f2"
|
||||
path="res://.godot/imported/caterpillar_body.png-c691b990e51d372f5dfdafa881ea6750.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/caterpillar_body.png"
|
||||
dest_files=["res://.godot/imported/caterpillar_body.png-c691b990e51d372f5dfdafa881ea6750.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
|
||||
|
After Width: | Height: | Size: 806 B |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cnihbmks0piwi"
|
||||
path="res://.godot/imported/caterpillar_face.png-d383b965d4555da185ab647f352d95f3.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/caterpillar_face.png"
|
||||
dest_files=["res://.godot/imported/caterpillar_face.png-d383b965d4555da185ab647f352d95f3.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b2e61oot7ht35"
|
||||
path="res://.godot/imported/crab_body.png-d5ff5fcdad64e46336ef16b4a3fb00c7.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/crab_body.png"
|
||||
dest_files=["res://.godot/imported/crab_body.png-d5ff5fcdad64e46336ef16b4a3fb00c7.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
|
||||
|
After Width: | Height: | Size: 1005 B |
@@ -2,16 +2,16 @@
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cqhbpt3lk6f15"
|
||||
path="res://.godot/imported/bottom.png-3c7c71fa24e23ae34adb1d444da0b3db.ctex"
|
||||
uid="uid://ruclqu4dc13u"
|
||||
path="res://.godot/imported/crab_face.png-405026ec02e80559c79371d1bab55844.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/lesson_screen/bottom.png"
|
||||
dest_files=["res://.godot/imported/bottom.png-3c7c71fa24e23ae34adb1d444da0b3db.ctex"]
|
||||
source_file="res://assets/gardens/animals/crab_face.png"
|
||||
dest_files=["res://.godot/imported/crab_face.png-405026ec02e80559c79371d1bab55844.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
@@ -2,16 +2,16 @@
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cffuqacgb1jra"
|
||||
path="res://.godot/imported/branches.png-59c95c0c624c68eb2181d2b0fe6a5080.ctex"
|
||||
uid="uid://oagcnmxs0xx1"
|
||||
path="res://.godot/imported/frog_body.png-ac6c4a085cb17c6bc169773a464b64b6.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/lesson_screen/branches.png"
|
||||
dest_files=["res://.godot/imported/branches.png-59c95c0c624c68eb2181d2b0fe6a5080.ctex"]
|
||||
source_file="res://assets/gardens/animals/frog_body.png"
|
||||
dest_files=["res://.godot/imported/frog_body.png-ac6c4a085cb17c6bc169773a464b64b6.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b4243242f34g0"
|
||||
path="res://.godot/imported/frog_face.png-edba38b44d42deef80a709ade2e5e8f6.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/frog_face.png"
|
||||
dest_files=["res://.godot/imported/frog_face.png-edba38b44d42deef80a709ade2e5e8f6.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
|
||||
|
After Width: | Height: | Size: 5.2 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bb3we2it550v6"
|
||||
path="res://.godot/imported/jellyfish_body.png-a32700abbb41c080cba5614127a3edc3.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/jellyfish_body.png"
|
||||
dest_files=["res://.godot/imported/jellyfish_body.png-a32700abbb41c080cba5614127a3edc3.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dppmdv8u3cwl1"
|
||||
path="res://.godot/imported/jellyfish_face.png-5c0a129760def337aa729a02e1028153.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/jellyfish_face.png"
|
||||
dest_files=["res://.godot/imported/jellyfish_face.png-5c0a129760def337aa729a02e1028153.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
|
||||
|
After Width: | Height: | Size: 3.7 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dr12efhuotfgt"
|
||||
path="res://.godot/imported/monkey_body.png-b049cc78b0f6869945a1c7d6a1301ad4.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/monkey_body.png"
|
||||
dest_files=["res://.godot/imported/monkey_body.png-b049cc78b0f6869945a1c7d6a1301ad4.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dc52xvm4y6rir"
|
||||
path="res://.godot/imported/monkey_face.png-985109f289329f15999880cce0b5a16e.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/monkey_face.png"
|
||||
dest_files=["res://.godot/imported/monkey_face.png-985109f289329f15999880cce0b5a16e.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c2yalimkyunxi"
|
||||
path="res://.godot/imported/parakeet_body.png-9465060ca470033db7910f6ce2322a6d.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/parakeet_body.png"
|
||||
dest_files=["res://.godot/imported/parakeet_body.png-9465060ca470033db7910f6ce2322a6d.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://l52tfb7fdrpt"
|
||||
path="res://.godot/imported/parakeet_face.png-94d7bc7370d8ae647ca7d22a41893e3f.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/parakeet_face.png"
|
||||
dest_files=["res://.godot/imported/parakeet_face.png-94d7bc7370d8ae647ca7d22a41893e3f.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://noekve4gjudr"
|
||||
path="res://.godot/imported/penguin_body.png-72481c56dc380b551e94e0f413ef0cf8.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/penguin_body.png"
|
||||
dest_files=["res://.godot/imported/penguin_body.png-72481c56dc380b551e94e0f413ef0cf8.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dbg7mxg3x7vd4"
|
||||
path="res://.godot/imported/penguin_face.png-ea217ef7de954aee6edea62f83594216.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/penguin_face.png"
|
||||
dest_files=["res://.godot/imported/penguin_face.png-ea217ef7de954aee6edea62f83594216.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
|
||||
|
After Width: | Height: | Size: 5.4 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b7rqldqdft30a"
|
||||
path="res://.godot/imported/turtle_body.png-0f50da4036c6750167a288e6f006a813.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/turtle_body.png"
|
||||
dest_files=["res://.godot/imported/turtle_body.png-0f50da4036c6750167a288e6f006a813.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
|
||||
|
After Width: | Height: | Size: 917 B |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://nu4kpbywwpgn"
|
||||
path="res://.godot/imported/turtle_face.png-e570d8d931a8a1c99178dba731ef0fdb.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/turtle_face.png"
|
||||
dest_files=["res://.godot/imported/turtle_face.png-e570d8d931a8a1c99178dba731ef0fdb.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c1ml42sp1vqga"
|
||||
path="res://.godot/imported/movie_icon.png-3b93e2f2cfeeb8eec0332bbcd7cda143.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/buttons/movie_icon.png"
|
||||
dest_files=["res://.godot/imported/movie_icon.png-3b93e2f2cfeeb8eec0332bbcd7cda143.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
|
||||
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
@@ -3,15 +3,15 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cn0brlkbklxuu"
|
||||
path="res://.godot/imported/ant.png-a1470874074de10588ffd54aa0bc8a95.ctex"
|
||||
path="res://.godot/imported/ant.png-d3fdfb32e41ad1bbed889f9d21d54167.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/ant.png"
|
||||
dest_files=["res://.godot/imported/ant.png-a1470874074de10588ffd54aa0bc8a95.ctex"]
|
||||
source_file="res://assets/gardens/victory_assets/animals/ant.png"
|
||||
dest_files=["res://.godot/imported/ant.png-d3fdfb32e41ad1bbed889f9d21d54167.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
@@ -3,15 +3,15 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ixkyfsxu07qx"
|
||||
path="res://.godot/imported/caterpillar.png-03f6801670b49c8e0cea7190046ee5e8.ctex"
|
||||
path="res://.godot/imported/caterpillar.png-606aeb5ed693d22c4a80f41968e1d449.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/caterpillar.png"
|
||||
dest_files=["res://.godot/imported/caterpillar.png-03f6801670b49c8e0cea7190046ee5e8.ctex"]
|
||||
source_file="res://assets/gardens/victory_assets/animals/caterpillar.png"
|
||||
dest_files=["res://.godot/imported/caterpillar.png-606aeb5ed693d22c4a80f41968e1d449.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
@@ -3,15 +3,15 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://d3vt2qpngkkjs"
|
||||
path="res://.godot/imported/crab.png-0a38ba7f13130791be164b6db99b3bb7.ctex"
|
||||
path="res://.godot/imported/crab.png-6b9401bccc35a6e58de3bee1aa707608.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/crab.png"
|
||||
dest_files=["res://.godot/imported/crab.png-0a38ba7f13130791be164b6db99b3bb7.ctex"]
|
||||
source_file="res://assets/gardens/victory_assets/animals/crab.png"
|
||||
dest_files=["res://.godot/imported/crab.png-6b9401bccc35a6e58de3bee1aa707608.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
@@ -3,15 +3,15 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://yo3o4m6o7a0"
|
||||
path="res://.godot/imported/frog.png-dbd41735c012909d9c488ecbaa029907.ctex"
|
||||
path="res://.godot/imported/frog.png-50e8b0bcbd5c11e9fc83314d35821855.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/frog.png"
|
||||
dest_files=["res://.godot/imported/frog.png-dbd41735c012909d9c488ecbaa029907.ctex"]
|
||||
source_file="res://assets/gardens/victory_assets/animals/frog.png"
|
||||
dest_files=["res://.godot/imported/frog.png-50e8b0bcbd5c11e9fc83314d35821855.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
@@ -3,15 +3,15 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bfqwlmmliem8f"
|
||||
path="res://.godot/imported/jellyfish.png-354519775b79ac38eb7fb5b2e6d6f3a9.ctex"
|
||||
path="res://.godot/imported/jellyfish.png-fef4023badc953c6e37065baefef9dda.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/jellyfish.png"
|
||||
dest_files=["res://.godot/imported/jellyfish.png-354519775b79ac38eb7fb5b2e6d6f3a9.ctex"]
|
||||
source_file="res://assets/gardens/victory_assets/animals/jellyfish.png"
|
||||
dest_files=["res://.godot/imported/jellyfish.png-fef4023badc953c6e37065baefef9dda.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.7 KiB |
@@ -3,15 +3,15 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://6bosyi1wv8vu"
|
||||
path="res://.godot/imported/khaki_turtle.png-365be2d89ffda872bfafc7a90e7d6e36.ctex"
|
||||
path="res://.godot/imported/khaki_turtle.png-c9b0e5c5db5d16603c89e5aede131fd5.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/khaki_turtle.png"
|
||||
dest_files=["res://.godot/imported/khaki_turtle.png-365be2d89ffda872bfafc7a90e7d6e36.ctex"]
|
||||
source_file="res://assets/gardens/victory_assets/animals/khaki_turtle.png"
|
||||
dest_files=["res://.godot/imported/khaki_turtle.png-c9b0e5c5db5d16603c89e5aede131fd5.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
@@ -3,15 +3,15 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://kygm5ieixgne"
|
||||
path="res://.godot/imported/monkey.png-723d94951cc580ff3e0ae5233294daa2.ctex"
|
||||
path="res://.godot/imported/monkey.png-984367ba67c6aee1976b0b6e125be90d.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/monkey.png"
|
||||
dest_files=["res://.godot/imported/monkey.png-723d94951cc580ff3e0ae5233294daa2.ctex"]
|
||||
source_file="res://assets/gardens/victory_assets/animals/monkey.png"
|
||||
dest_files=["res://.godot/imported/monkey.png-984367ba67c6aee1976b0b6e125be90d.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
@@ -3,15 +3,15 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cy1nrnl520goj"
|
||||
path="res://.godot/imported/penguin.png-7b214b7f40894092c07f326efebcbe8d.ctex"
|
||||
path="res://.godot/imported/penguin.png-a3d9b15f5a490402f4093a86cd9fc481.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/penguin.png"
|
||||
dest_files=["res://.godot/imported/penguin.png-7b214b7f40894092c07f326efebcbe8d.ctex"]
|
||||
source_file="res://assets/gardens/victory_assets/animals/penguin.png"
|
||||
dest_files=["res://.godot/imported/penguin.png-a3d9b15f5a490402f4093a86cd9fc481.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
@@ -3,15 +3,15 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dcuobvoav863b"
|
||||
path="res://.godot/imported/pink_jellyfish.png-47ea6885f7ba9be8ff5f438c055bc4a1.ctex"
|
||||
path="res://.godot/imported/pink_jellyfish.png-99508b215ac7a943286e22be8a93bcd0.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/pink_jellyfish.png"
|
||||
dest_files=["res://.godot/imported/pink_jellyfish.png-47ea6885f7ba9be8ff5f438c055bc4a1.ctex"]
|
||||
source_file="res://assets/gardens/victory_assets/animals/pink_jellyfish.png"
|
||||
dest_files=["res://.godot/imported/pink_jellyfish.png-99508b215ac7a943286e22be8a93bcd0.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
@@ -3,15 +3,15 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://da7ppeamjqjpw"
|
||||
path="res://.godot/imported/red_parakeet.png-546f9c816968cb8f1bb25596ab769016.ctex"
|
||||
path="res://.godot/imported/red_parakeet.png-da45ba4c38e1e0997bf4da3dc9da41b8.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/red_parakeet.png"
|
||||
dest_files=["res://.godot/imported/red_parakeet.png-546f9c816968cb8f1bb25596ab769016.ctex"]
|
||||
source_file="res://assets/gardens/victory_assets/animals/red_parakeet.png"
|
||||
dest_files=["res://.godot/imported/red_parakeet.png-da45ba4c38e1e0997bf4da3dc9da41b8.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.0 KiB |
@@ -3,15 +3,15 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bsw6v8ix7bb2s"
|
||||
path="res://.godot/imported/turtle.png-b25459e1a6a7c121b59fc65afcb3f82e.ctex"
|
||||
path="res://.godot/imported/turtle.png-c250d2a66dd72bd5fa41354b999b1000.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/turtle.png"
|
||||
dest_files=["res://.godot/imported/turtle.png-b25459e1a6a7c121b59fc65afcb3f82e.ctex"]
|
||||
source_file="res://assets/gardens/victory_assets/animals/turtle.png"
|
||||
dest_files=["res://.godot/imported/turtle.png-c250d2a66dd72bd5fa41354b999b1000.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
@@ -3,15 +3,15 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bd5pxoufamqy"
|
||||
path="res://.godot/imported/yellow_parakeet.png-ce114f4bc0be41f81a9d2e24bceb2fcf.ctex"
|
||||
path="res://.godot/imported/yellow_parakeet.png-3b1b7946f714148f55147e3efdf195ad.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/gardens/animals/yellow_parakeet.png"
|
||||
dest_files=["res://.godot/imported/yellow_parakeet.png-ce114f4bc0be41f81a9d2e24bceb2fcf.ctex"]
|
||||
source_file="res://assets/gardens/victory_assets/animals/yellow_parakeet.png"
|
||||
dest_files=["res://.godot/imported/yellow_parakeet.png-3b1b7946f714148f55147e3efdf195ad.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 12 KiB |
@@ -12,6 +12,9 @@ const SLOT_SELECTION: Dictionary = {
|
||||
4: [0, 1, 3, 4],
|
||||
5: [0, 1, 2, 3, 4],
|
||||
}
|
||||
const WHEEL_WEDGE_LOCKED: Color = Color("e6e6e6")
|
||||
const ANIMAL_LOCKED_COLOR: Color = Color("c9c9c9")
|
||||
const WHEEL_HIGHLIGHT: Color = Color("fbb03b")
|
||||
|
||||
@export var garden_layout: GardenLayout:
|
||||
set = set_garden_layout
|
||||
@@ -21,6 +24,11 @@ const SLOT_SELECTION: Dictionary = {
|
||||
@export var unlocked_lesson_text: Color = Color("9be3ea")
|
||||
@export var completed_lesson: Color = Color("9be3ea")
|
||||
@export var completed_lesson_text: Color = Color("0a555b")
|
||||
@export_group("Wheel Colors")
|
||||
@export var wheel_wedge_unlocked: Color = Color("9be3ea")
|
||||
@export var wheel_background: Color = Color("0a555b")
|
||||
## Outline color flagging the next step to play.
|
||||
@export var animal_unlocked_color: Color = Color.WHITE
|
||||
|
||||
var color: Color
|
||||
var current_progression: float = 0.0
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
[ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"]
|
||||
[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"]
|
||||
[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"]
|
||||
[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/animals/jellyfish.png" id="jellyfish_tex"]
|
||||
[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/victory_assets/animals/jellyfish.png" id="jellyfish_tex"]
|
||||
[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/victory_assets/victory_asset_plant_01.png" id="plant_01"]
|
||||
[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/victory_assets/victory_asset_plant_02.png" id="plant_02"]
|
||||
[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/victory_assets/victory_asset_fish_01.png" id="plant_03"]
|
||||
@@ -13,7 +13,7 @@
|
||||
[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/victory_assets/victory_asset_plant_05.png" id="plant_07"]
|
||||
[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/victory_assets/victory_asset_fish_02.png" id="plant_08"]
|
||||
|
||||
[node name="Garden" type="Control" unique_id=229113687]
|
||||
[node name="GardenRoot" type="Control" unique_id=229113687]
|
||||
custom_minimum_size = Vector2(2400, 2.08165e-12)
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
@@ -28,6 +28,9 @@ unlocked_lesson = Color(0.0392157, 0.333333, 0.356863, 1)
|
||||
unlocked_lesson_text = Color(0.607843, 0.890196, 0.917647, 1)
|
||||
completed_lesson = Color(0.607843, 0.890196, 0.917647, 1)
|
||||
completed_lesson_text = Color(0.0392157, 0.333333, 0.356863, 1)
|
||||
wheel_wedge_unlocked = Color(0.607843, 0.890196, 0.917647, 1)
|
||||
wheel_background = Color(0.09019608, 0.42745098, 0.47058824, 1)
|
||||
animal_unlocked_color = Color(0.26666668, 0.7607843, 0.8235294, 1)
|
||||
|
||||
[node name="Background" type="TextureRect" parent="." unique_id=1905044868]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -10,10 +10,10 @@
|
||||
[ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_dragon_flies_01.png" id="8_556ma"]
|
||||
[ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_vwhyb"]
|
||||
[ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl.png" id="10_v4g1g"]
|
||||
[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/animals/turtle.png" id="12_v4g1g"]
|
||||
[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/victory_assets/animals/turtle.png" id="12_v4g1g"]
|
||||
[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles.png" id="plant_05"]
|
||||
|
||||
[node name="Garden" type="Control" unique_id=167073905]
|
||||
[node name="GardenRoot" type="Control" unique_id=167073905]
|
||||
custom_minimum_size = Vector2(2400, 2.08165e-12)
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
@@ -28,6 +28,9 @@ unlocked_lesson = Color(0.345098, 0.266667, 0.490196, 1)
|
||||
unlocked_lesson_text = Color(0.894118, 0.827451, 0.937255, 1)
|
||||
completed_lesson = Color(0.894118, 0.827451, 0.937255, 1)
|
||||
completed_lesson_text = Color(0.345098, 0.266667, 0.490196, 1)
|
||||
wheel_wedge_unlocked = Color(0.894118, 0.827451, 0.937255, 1)
|
||||
wheel_background = Color(0.45490196, 0.3529412, 0.64705884, 1)
|
||||
animal_unlocked_color = Color(0.68235296, 0.54509807, 0.8392157, 1)
|
||||
|
||||
[node name="Background" type="TextureRect" parent="." unique_id=1058030897]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
[ext_resource type="Texture2D" uid="uid://dw3qhu03gxfi7" path="res://assets/gardens/victory_assets/victory_asset_bees.png" id="9_ec7px"]
|
||||
[ext_resource type="Texture2D" uid="uid://its5dfr0ipak" path="res://assets/gardens/victory_assets/victory_asset_butterfly_01.png" id="10_j3ks8"]
|
||||
[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="11_odjw4"]
|
||||
[ext_resource type="Texture2D" uid="uid://cn0brlkbklxuu" path="res://assets/gardens/animals/ant.png" id="12_j3ks8"]
|
||||
[ext_resource type="Texture2D" uid="uid://cn0brlkbklxuu" path="res://assets/gardens/victory_assets/animals/ant.png" id="12_j3ks8"]
|
||||
|
||||
[node name="Garden" type="Control" unique_id=167073905]
|
||||
[node name="GardenRoot" type="Control" unique_id=167073905]
|
||||
custom_minimum_size = Vector2(2400, 2.08165e-12)
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
@@ -28,6 +28,9 @@ unlocked_lesson = Color(0.52156866, 0.03137255, 0.40392157, 1)
|
||||
unlocked_lesson_text = Color(0.92156863, 0.7529412, 0.87058824, 1)
|
||||
completed_lesson = Color(0.92156863, 0.7529412, 0.87058824, 1)
|
||||
completed_lesson_text = Color(0.52156866, 0.03137255, 0.40392157, 1)
|
||||
wheel_wedge_unlocked = Color(0.92156863, 0.7529412, 0.87058824, 1)
|
||||
wheel_background = Color(0.83137256, 0.2901961, 0.7019608, 1)
|
||||
animal_unlocked_color = Color(0.9490196, 0.36078432, 0.6784314, 1)
|
||||
|
||||
[node name="Background" type="TextureRect" parent="." unique_id=1058030897]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
[ext_resource type="Texture2D" uid="uid://b2xj4qqvalwar" path="res://assets/gardens/victory_assets/victory_asset_sun.png" id="8_tf7gm"]
|
||||
[ext_resource type="Texture2D" uid="uid://qhs2fydvrnhk" path="res://assets/gardens/victory_assets/victory_asset_sea_stars.png" id="9_nt0kr"]
|
||||
[ext_resource type="Texture2D" uid="uid://ddneerabvuyoe" path="res://assets/gardens/victory_assets/victory_asset_birds.png" id="10_0vwua"]
|
||||
[ext_resource type="Texture2D" uid="uid://d3vt2qpngkkjs" path="res://assets/gardens/animals/crab.png" id="12_2bwv2"]
|
||||
[ext_resource type="Texture2D" uid="uid://d3vt2qpngkkjs" path="res://assets/gardens/victory_assets/animals/crab.png" id="12_2bwv2"]
|
||||
|
||||
[node name="Garden" type="Control" unique_id=167073905]
|
||||
[node name="GardenRoot" type="Control" unique_id=167073905]
|
||||
custom_minimum_size = Vector2(2400, 2.08165e-12)
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
@@ -28,6 +28,9 @@ unlocked_lesson = Color(0.7490196, 0.2784314, 0, 1)
|
||||
unlocked_lesson_text = Color(1, 0.7921569, 0.6901961, 1)
|
||||
completed_lesson = Color(1, 0.7921569, 0.6901961, 1)
|
||||
completed_lesson_text = Color(0.7490196, 0.2784314, 0, 1)
|
||||
wheel_wedge_unlocked = Color(1, 0.7921569, 0.6901961, 1)
|
||||
wheel_background = Color(1, 0.49803922, 0.2, 1)
|
||||
animal_unlocked_color = Color(1, 0.41960785, 0.2509804, 1)
|
||||
|
||||
[node name="Background" type="TextureRect" parent="." unique_id=1058030897]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
[ext_resource type="Texture2D" uid="uid://x0skor7vxadl" path="res://assets/gardens/victory_assets/victory_asset_plant_16.png" id="4_0y47p"]
|
||||
[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"]
|
||||
[ext_resource type="Texture2D" uid="uid://bqafuj82xbdqm" path="res://assets/gardens/victory_assets/victory_asset_bird_treehouse.png" id="5_fja20"]
|
||||
[ext_resource type="Texture2D" uid="uid://bd5pxoufamqy" path="res://assets/gardens/animals/yellow_parakeet.png" id="5_l6rp4"]
|
||||
[ext_resource type="Texture2D" uid="uid://bd5pxoufamqy" path="res://assets/gardens/victory_assets/animals/yellow_parakeet.png" id="5_l6rp4"]
|
||||
[ext_resource type="Texture2D" uid="uid://bg02dhcrwf5nx" path="res://assets/gardens/victory_assets/victory_asset_plant_17.png" id="6_oapcv"]
|
||||
[ext_resource type="Texture2D" uid="uid://chtr4d0a80s61" path="res://assets/gardens/victory_assets/victory_asset_plant_18.png" id="7_sjfs7"]
|
||||
[ext_resource type="Texture2D" uid="uid://c784fmd7v5wkt" path="res://assets/gardens/victory_assets/victory_asset_tumbleweeds.png" id="8_se3av"]
|
||||
[ext_resource type="Texture2D" uid="uid://bpqo8maufc3gr" path="res://assets/gardens/victory_assets/victory_asset_ladybugs.png" id="9_r7c56"]
|
||||
[ext_resource type="Texture2D" uid="uid://its5dfr0ipak" path="res://assets/gardens/victory_assets/victory_asset_butterfly_01.png" id="10_s6qsy"]
|
||||
|
||||
[node name="Garden" type="Control" unique_id=167073905]
|
||||
[node name="GardenRoot" type="Control" unique_id=167073905]
|
||||
custom_minimum_size = Vector2(2400, 2.08165e-12)
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
@@ -28,6 +28,9 @@ unlocked_lesson = Color(0.7019608, 0.44313726, 0, 1)
|
||||
unlocked_lesson_text = Color(1, 0.9411765, 0.78039217, 1)
|
||||
completed_lesson = Color(1, 0.9411765, 0.78039217, 1)
|
||||
completed_lesson_text = Color(0.7019608, 0.44313726, 0, 1)
|
||||
wheel_wedge_unlocked = Color(1, 0.9411765, 0.78039217, 1)
|
||||
wheel_background = Color(0.92156863, 0.6431373, 0, 1)
|
||||
animal_unlocked_color = Color(1, 0.7607843, 0.10980392, 1)
|
||||
|
||||
[node name="Background" type="TextureRect" parent="." unique_id=1058030897]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
[ext_resource type="Texture2D" uid="uid://c0lcx7x0naofl" path="res://assets/gardens/victory_assets/victory_asset_clouds.png" id="3_c82qa"]
|
||||
[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"]
|
||||
[ext_resource type="Texture2D" uid="uid://ctc6i4o6rtj2m" path="res://assets/gardens/victory_assets/victory_asset_plant_19.png" id="4_o7idj"]
|
||||
[ext_resource type="Texture2D" uid="uid://ixkyfsxu07qx" path="res://assets/gardens/animals/caterpillar.png" id="5_c82qa"]
|
||||
[ext_resource type="Texture2D" uid="uid://ixkyfsxu07qx" path="res://assets/gardens/victory_assets/animals/caterpillar.png" id="5_c82qa"]
|
||||
[ext_resource type="Texture2D" uid="uid://d1jhhus8v37ik" path="res://assets/gardens/victory_assets/victory_asset_plant_20.png" id="5_rqhnb"]
|
||||
[ext_resource type="Texture2D" uid="uid://dbxswqqflg4n0" path="res://assets/gardens/victory_assets/victory_asset_snail.png" id="6_o1130"]
|
||||
[ext_resource type="Texture2D" uid="uid://dw3qhu03gxfi7" path="res://assets/gardens/victory_assets/victory_asset_bees.png" id="7_diva3"]
|
||||
@@ -13,7 +13,7 @@
|
||||
[ext_resource type="Texture2D" uid="uid://coxmj8uwyu6vd" path="res://assets/gardens/victory_assets/victory_asset_mushroom.png" id="9_1053v"]
|
||||
[ext_resource type="Texture2D" uid="uid://db6cwc8crw6wo" path="res://assets/gardens/victory_assets/victory_asset_butterfly_02.png" id="10_rqhnb"]
|
||||
|
||||
[node name="Garden" type="Control" unique_id=167073905]
|
||||
[node name="GardenRoot" type="Control" unique_id=167073905]
|
||||
custom_minimum_size = Vector2(2400, 2.08165e-12)
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
@@ -28,6 +28,9 @@ unlocked_lesson = Color(0.30588236, 0.38039216, 0.03529412, 1)
|
||||
unlocked_lesson_text = Color(0.96862745, 1, 0.7529412, 1)
|
||||
completed_lesson = Color(0.96862745, 1, 0.7529412, 1)
|
||||
completed_lesson_text = Color(0.30588236, 0.38039216, 0.03529412, 1)
|
||||
wheel_wedge_unlocked = Color(0.96862745, 1, 0.7529412, 1)
|
||||
wheel_background = Color(0.43529412, 0.50980395, 0.16078432, 1)
|
||||
animal_unlocked_color = Color(0.7882353, 0.85882354, 0.26666668, 1)
|
||||
|
||||
[node name="Background" type="TextureRect" parent="." unique_id=1058030897]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
[ext_resource type="Texture2D" uid="uid://n4pv6f7bbtiy" path="res://assets/gardens/victory_assets/victory_asset_plant_21.png" id="3_qm42s"]
|
||||
[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"]
|
||||
[ext_resource type="Texture2D" uid="uid://vjani6ctt7hc" path="res://assets/gardens/victory_assets/victory_asset_plant_22.png" id="5_4e8bi"]
|
||||
[ext_resource type="Texture2D" uid="uid://yo3o4m6o7a0" path="res://assets/gardens/animals/frog.png" id="5_qm42s"]
|
||||
[ext_resource type="Texture2D" uid="uid://yo3o4m6o7a0" path="res://assets/gardens/victory_assets/animals/frog.png" id="5_qm42s"]
|
||||
[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/victory_assets/victory_asset_fish_01.png" id="6_qltia"]
|
||||
[ext_resource type="Texture2D" uid="uid://bf77plws02i6k" path="res://assets/gardens/victory_assets/victory_asset_flies.png" id="7_vspma"]
|
||||
[ext_resource type="Texture2D" uid="uid://crkysknynt38e" path="res://assets/gardens/victory_assets/victory_asset_frog.png" id="8_68wn2"]
|
||||
[ext_resource type="Texture2D" uid="uid://o1af03kn2mcg" path="res://assets/gardens/victory_assets/victory_asset_dragon_flies_02.png" id="9_3oqd6"]
|
||||
[ext_resource type="Texture2D" uid="uid://ckmw2sfht4bq5" path="res://assets/gardens/victory_assets/victory_asset_hearts.png" id="10_pobi3"]
|
||||
|
||||
[node name="Garden" type="Control" unique_id=167073905]
|
||||
[node name="GardenRoot" type="Control" unique_id=167073905]
|
||||
custom_minimum_size = Vector2(2400, 2.08165e-12)
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
@@ -28,6 +28,9 @@ unlocked_lesson = Color(0, 0.45882353, 0.25882354, 1)
|
||||
unlocked_lesson_text = Color(0.7019608, 1, 0.87058824, 1)
|
||||
completed_lesson = Color(0.7019608, 1, 0.87058824, 1)
|
||||
completed_lesson_text = Color(0, 0.45882353, 0.25882354, 1)
|
||||
wheel_wedge_unlocked = Color(0.7019608, 1, 0.87058824, 1)
|
||||
wheel_background = Color(0.078431375, 0.7607843, 0.4627451, 1)
|
||||
animal_unlocked_color = Color(0.078431375, 0.7607843, 0.4627451, 1)
|
||||
|
||||
[node name="Background" type="TextureRect" parent="." unique_id=1058030897]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
[ext_resource type="Texture2D" uid="uid://br5gguush2y12" path="res://assets/gardens/victory_assets/victory_asset_plant_14.png" id="3_6wkbm"]
|
||||
[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"]
|
||||
[ext_resource type="Texture2D" uid="uid://yag8afxcasm1" path="res://assets/gardens/victory_assets/victory_asset_torch.png" id="4_xgdw6"]
|
||||
[ext_resource type="Texture2D" uid="uid://kygm5ieixgne" path="res://assets/gardens/animals/monkey.png" id="5_fd7lh"]
|
||||
[ext_resource type="Texture2D" uid="uid://kygm5ieixgne" path="res://assets/gardens/victory_assets/animals/monkey.png" id="5_fd7lh"]
|
||||
[ext_resource type="Texture2D" uid="uid://8kmojsnwp657" path="res://assets/gardens/victory_assets/victory_asset_plant_23.png" id="5_sqwgp"]
|
||||
[ext_resource type="Texture2D" uid="uid://dlxljmb4wnx2o" path="res://assets/gardens/victory_assets/victory_asset_monkey.png" id="6_04ydh"]
|
||||
[ext_resource type="Texture2D" uid="uid://dyau6e65xdsb8" path="res://assets/gardens/victory_assets/victory_asset_plant_24.png" id="7_xgdw6"]
|
||||
@@ -13,7 +13,7 @@
|
||||
[ext_resource type="Texture2D" uid="uid://c7lgiyapshr23" path="res://assets/gardens/victory_assets/victory_asset_plant_25.png" id="9_08dq4"]
|
||||
[ext_resource type="Texture2D" uid="uid://uepox6kvky5" path="res://assets/gardens/victory_assets/victory_asset_crown.png" id="10_7g80l"]
|
||||
|
||||
[node name="Garden" type="Control" unique_id=167073905]
|
||||
[node name="GardenRoot" type="Control" unique_id=167073905]
|
||||
custom_minimum_size = Vector2(2400, 2.08165e-12)
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
@@ -28,6 +28,9 @@ unlocked_lesson = Color(0.36078432, 0.19607843, 0.03137255, 1)
|
||||
unlocked_lesson_text = Color(1, 0.8784314, 0.7607843, 1)
|
||||
completed_lesson = Color(1, 0.8784314, 0.7607843, 1)
|
||||
completed_lesson_text = Color(0.36078432, 0.19607843, 0.03137255, 1)
|
||||
wheel_wedge_unlocked = Color(1, 0.8784314, 0.7607843, 1)
|
||||
wheel_background = Color(0.54901963, 0.40784314, 0.26666668, 1)
|
||||
animal_unlocked_color = Color(0.8509804, 0.6, 0.33333334, 1)
|
||||
|
||||
[node name="Background" type="TextureRect" parent="." unique_id=1058030897]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
[ext_resource type="Texture2D" uid="uid://c0lcx7x0naofl" path="res://assets/gardens/victory_assets/victory_asset_clouds.png" id="3_30y1d"]
|
||||
[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"]
|
||||
[ext_resource type="Texture2D" uid="uid://x0skor7vxadl" path="res://assets/gardens/victory_assets/victory_asset_plant_16.png" id="4_pac6c"]
|
||||
[ext_resource type="Texture2D" uid="uid://da7ppeamjqjpw" path="res://assets/gardens/animals/red_parakeet.png" id="5_30y1d"]
|
||||
[ext_resource type="Texture2D" uid="uid://da7ppeamjqjpw" path="res://assets/gardens/victory_assets/animals/red_parakeet.png" id="5_30y1d"]
|
||||
[ext_resource type="Texture2D" uid="uid://bqafuj82xbdqm" path="res://assets/gardens/victory_assets/victory_asset_bird_treehouse.png" id="5_j4wf1"]
|
||||
[ext_resource type="Texture2D" uid="uid://bg02dhcrwf5nx" path="res://assets/gardens/victory_assets/victory_asset_plant_17.png" id="6_ym7nb"]
|
||||
[ext_resource type="Texture2D" uid="uid://chtr4d0a80s61" path="res://assets/gardens/victory_assets/victory_asset_plant_18.png" id="7_6bl1j"]
|
||||
@@ -13,7 +13,7 @@
|
||||
[ext_resource type="Texture2D" uid="uid://bpqo8maufc3gr" path="res://assets/gardens/victory_assets/victory_asset_ladybugs.png" id="9_2xyhj"]
|
||||
[ext_resource type="Texture2D" uid="uid://its5dfr0ipak" path="res://assets/gardens/victory_assets/victory_asset_butterfly_01.png" id="10_cr4yr"]
|
||||
|
||||
[node name="Garden" type="Control" unique_id=167073905]
|
||||
[node name="GardenRoot" type="Control" unique_id=167073905]
|
||||
custom_minimum_size = Vector2(2400, 2.08165e-12)
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
@@ -28,6 +28,9 @@ unlocked_lesson = Color(0.6, 0, 0, 1)
|
||||
unlocked_lesson_text = Color(1, 0.7254902, 0.7019608, 1)
|
||||
completed_lesson = Color(1, 0.7254902, 0.7019608, 1)
|
||||
completed_lesson_text = Color(0.6, 0, 0, 1)
|
||||
wheel_wedge_unlocked = Color(1, 0.7607843, 0.7411765, 1)
|
||||
wheel_background = Color(0.92156863, 0.3882353, 0.3882353, 1)
|
||||
animal_unlocked_color = Color(1, 0.4, 0.4117647, 1)
|
||||
|
||||
[node name="Background" type="TextureRect" parent="." unique_id=1058030897]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/victory_assets/victory_asset_plant_05.png" id="6_ipdnh"]
|
||||
[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/victory_assets/victory_asset_fish_02.png" id="7_xkwcf"]
|
||||
[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/victory_assets/victory_asset_plant_03.png" id="8_w51id"]
|
||||
[ext_resource type="Texture2D" uid="uid://dcuobvoav863b" path="res://assets/gardens/animals/pink_jellyfish.png" id="8_xkwcf"]
|
||||
[ext_resource type="Texture2D" uid="uid://dcuobvoav863b" path="res://assets/gardens/victory_assets/animals/pink_jellyfish.png" id="8_xkwcf"]
|
||||
[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles.png" id="9_knmfc"]
|
||||
[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/victory_assets/victory_asset_plant_04.png" id="10_83oc2"]
|
||||
|
||||
[node name="Garden" type="Control" unique_id=167073905]
|
||||
[node name="GardenRoot" type="Control" unique_id=167073905]
|
||||
custom_minimum_size = Vector2(2400, 2.08165e-12)
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
@@ -28,6 +28,9 @@ unlocked_lesson = Color(0.6509804, 0.2901961, 0.5019608, 1)
|
||||
unlocked_lesson_text = Color(1, 0.81960785, 0.9254902, 1)
|
||||
completed_lesson = Color(1, 0.81960785, 0.9254902, 1)
|
||||
completed_lesson_text = Color(0.6509804, 0.2901961, 0.5019608, 1)
|
||||
wheel_wedge_unlocked = Color(1, 0.81960785, 0.9254902, 1)
|
||||
wheel_background = Color(0.87058824, 0.3882353, 0.67058825, 1)
|
||||
animal_unlocked_color = Color(1, 0.49019608, 0.76862746, 1)
|
||||
|
||||
[node name="Background" type="TextureRect" parent="." unique_id=1058030897]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
[ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="3_13gkf"]
|
||||
[ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_th10l"]
|
||||
[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"]
|
||||
[ext_resource type="Texture2D" uid="uid://6bosyi1wv8vu" path="res://assets/gardens/animals/khaki_turtle.png" id="5_13gkf"]
|
||||
[ext_resource type="Texture2D" uid="uid://6bosyi1wv8vu" path="res://assets/gardens/victory_assets/animals/khaki_turtle.png" id="5_13gkf"]
|
||||
[ext_resource type="Texture2D" uid="uid://blaltndbcv2yq" path="res://assets/gardens/victory_assets/victory_asset_plant_08.png" id="5_m2rr7"]
|
||||
[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/victory_assets/victory_asset_fish_01.png" id="6_th10l"]
|
||||
[ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_dragon_flies_01.png" id="7_t2ok3"]
|
||||
@@ -13,7 +13,7 @@
|
||||
[ext_resource type="Texture2D" uid="uid://co6vu63bybpnc" path="res://assets/gardens/victory_assets/victory_asset_plant_09.png" id="9_lswb8"]
|
||||
[ext_resource type="Texture2D" uid="uid://gm5x5p2f07rh" path="res://assets/gardens/victory_assets/victory_asset_plant_10.png" id="10_m37ct"]
|
||||
|
||||
[node name="Garden" type="Control" unique_id=167073905]
|
||||
[node name="GardenRoot" type="Control" unique_id=167073905]
|
||||
custom_minimum_size = Vector2(2400, 2.08165e-12)
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
@@ -28,6 +28,9 @@ unlocked_lesson = Color(0.3372549, 0.29803923, 0.16470589, 1)
|
||||
unlocked_lesson_text = Color(0.9490196, 0.8901961, 0.72156864, 1)
|
||||
completed_lesson = Color(0.9490196, 0.8901961, 0.72156864, 1)
|
||||
completed_lesson_text = Color(0.3372549, 0.29803923, 0.16470589, 1)
|
||||
wheel_wedge_unlocked = Color(0.9490196, 0.8901961, 0.72156864, 1)
|
||||
wheel_background = Color(0.6117647, 0.5176471, 0.23137255, 1)
|
||||
animal_unlocked_color = Color(0.7882353, 0.70980394, 0.43529412, 1)
|
||||
|
||||
[node name="Background" type="TextureRect" parent="." unique_id=1058030897]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"]
|
||||
[ext_resource type="Texture2D" uid="uid://cjb3ygn2iycj4" path="res://assets/gardens/victory_assets/victory_asset_plant_26.png" id="4_go3so"]
|
||||
[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/victory_assets/victory_asset_fish_01.png" id="5_88yjd"]
|
||||
[ext_resource type="Texture2D" uid="uid://cy1nrnl520goj" path="res://assets/gardens/animals/penguin.png" id="5_xmsgp"]
|
||||
[ext_resource type="Texture2D" uid="uid://cy1nrnl520goj" path="res://assets/gardens/victory_assets/animals/penguin.png" id="5_xmsgp"]
|
||||
[ext_resource type="Texture2D" uid="uid://d0je2xrnu1gem" path="res://assets/gardens/victory_assets/victory_asset_snowman.png" id="6_4h4hf"]
|
||||
[ext_resource type="Texture2D" uid="uid://bcjk0l771ugvq" path="res://assets/gardens/victory_assets/victory_asset_snowpile.png" id="7_wf34p"]
|
||||
[ext_resource type="Texture2D" uid="uid://0g80o48ewp7d" path="res://assets/gardens/victory_assets/victory_asset_cloud_snow.png" id="8_4h4hf"]
|
||||
[ext_resource type="Texture2D" uid="uid://28wjedoatx7c" path="res://assets/gardens/victory_assets/victory_asset_whale.png" id="9_m7voh"]
|
||||
[ext_resource type="Texture2D" uid="uid://bqxwflyxhcdvw" path="res://assets/gardens/victory_assets/victory_asset_snowflakes.png" id="10_g51bh"]
|
||||
|
||||
[node name="Garden" type="Control" unique_id=167073905]
|
||||
[node name="GardenRoot" type="Control" unique_id=167073905]
|
||||
custom_minimum_size = Vector2(2400, 2.08165e-12)
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
@@ -28,6 +28,9 @@ unlocked_lesson = Color(0, 0.5529412, 0.76862746, 1)
|
||||
unlocked_lesson_text = Color(0.78431374, 0.9019608, 0.9529412, 1)
|
||||
completed_lesson = Color(0.78431374, 0.9019608, 0.9529412, 1)
|
||||
completed_lesson_text = Color(0, 0.5529412, 0.76862746, 1)
|
||||
wheel_wedge_unlocked = Color(0.78431374, 0.9019608, 0.9529412, 1)
|
||||
wheel_background = Color(0.3372549, 0.76862746, 0.9372549, 1)
|
||||
animal_unlocked_color = Color(0.34901962, 0.84705883, 1, 1)
|
||||
|
||||
[node name="Background" type="TextureRect" parent="." unique_id=1058030897]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
shader_type canvas_item;
|
||||
|
||||
void fragment() {
|
||||
vec4 tex = texture(TEXTURE, UV);
|
||||
float gray = dot(tex.rgb, vec3(0.299, 0.587, 0.114));
|
||||
COLOR = vec4(gray, gray, gray, tex.a);
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://bulhmeqr1cvlx
|
||||
@@ -28,6 +28,33 @@ func _init() -> void:
|
||||
init_unlocks()
|
||||
|
||||
|
||||
static func get_minigame_count_for_lesson(lesson_number: int) -> int:
|
||||
return Database.get_exercise_for_lesson(lesson_number).size()
|
||||
|
||||
|
||||
static func _build_default_lesson_unlock(lesson_number: int) -> Dictionary:
|
||||
var minigame_count: int = get_minigame_count_for_lesson(lesson_number)
|
||||
return {
|
||||
"look_and_learn": Status.LOCKED,
|
||||
"games": _make_locked_games_array(minigame_count),
|
||||
"last_duration": _make_zero_durations(minigame_count),
|
||||
"total_duration": _make_zero_durations(minigame_count),
|
||||
}
|
||||
|
||||
|
||||
static func _make_locked_games_array(minigame_count: int) -> Array:
|
||||
var games: Array = []
|
||||
for _index: int in range(minigame_count):
|
||||
games.append(Status.LOCKED)
|
||||
return games
|
||||
|
||||
|
||||
static func _make_zero_durations(minigame_count: int) -> PackedInt32Array:
|
||||
var durations: PackedInt32Array = PackedInt32Array()
|
||||
durations.resize(minigame_count)
|
||||
return durations
|
||||
|
||||
|
||||
# Make sure the unlocks are correct
|
||||
func init_unlocks() -> void:
|
||||
if not unlocks:
|
||||
@@ -35,22 +62,13 @@ func init_unlocks() -> void:
|
||||
else:
|
||||
unlocks = unlocks # Force ensure_data_integrity()
|
||||
_sanitize_boss_progression()
|
||||
|
||||
|
||||
# Verify the lessons
|
||||
var number_of_lessons: int = Database.get_lessons_count()
|
||||
if unlocks.size() != number_of_lessons:
|
||||
for index: int in range(number_of_lessons):
|
||||
if not unlocks.has(index+1):
|
||||
unlocks[index + 1] = {
|
||||
"look_and_learn": Status.LOCKED,
|
||||
"games": [
|
||||
Status.LOCKED,
|
||||
Status.LOCKED,
|
||||
Status.LOCKED,
|
||||
],
|
||||
"last_duration": PackedInt32Array([0, 0, 0]),
|
||||
"total_duration": PackedInt32Array([0, 0, 0])
|
||||
}
|
||||
unlocks[index + 1] = _build_default_lesson_unlock(index + 1)
|
||||
|
||||
# Make sure that the first garden is always accessible
|
||||
if unlocks.has(1):
|
||||
@@ -74,37 +92,39 @@ func ensure_data_integrity(data: Dictionary[int, Dictionary]) -> Dictionary:
|
||||
if not result.has(index):
|
||||
if not is_init:
|
||||
Log.warn("StudentProgression: Garden %d missing → added with default values." % index)
|
||||
result[index] = {
|
||||
"games": [Status.LOCKED, Status.LOCKED, Status.LOCKED],
|
||||
"look_and_learn": Status.LOCKED,
|
||||
"last_duration": PackedInt32Array([0, 0, 0]),
|
||||
"total_duration": PackedInt32Array([0, 0, 0])
|
||||
}
|
||||
result[index] = _build_default_lesson_unlock(index)
|
||||
# Check internal structure
|
||||
for index: int in result.keys():
|
||||
var garden: Dictionary = result[index]
|
||||
var minigame_count: int = get_minigame_count_for_lesson(index)
|
||||
# Check missing keys
|
||||
if not garden.has("games"):
|
||||
if not is_init:
|
||||
Log.warn("StudentProgression: Garden %d: Add missing key 'games'." % index)
|
||||
garden["games"] = [Status.LOCKED, Status.LOCKED, Status.LOCKED]
|
||||
garden["games"] = _make_locked_games_array(minigame_count)
|
||||
if not garden.has("look_and_learn"):
|
||||
if not is_init:
|
||||
Log.warn("StudentProgression: Garden %d: Add missing key 'look_and_learn'." % index)
|
||||
garden["look_and_learn"] = Status.LOCKED
|
||||
if not garden.has("last_duration"):
|
||||
garden["last_duration"] = PackedInt32Array([0, 0, 0])
|
||||
garden["last_duration"] = _make_zero_durations(minigame_count)
|
||||
if not garden.has("total_duration"):
|
||||
garden["total_duration"] = PackedInt32Array([0, 0, 0])
|
||||
garden["total_duration"] = _make_zero_durations(minigame_count)
|
||||
|
||||
# Check array "games"
|
||||
if typeof(garden["games"]) != TYPE_ARRAY or (garden["games"] as Array).size() != 3:
|
||||
if typeof(garden["games"]) != TYPE_ARRAY or (garden["games"] as Array).size() != minigame_count:
|
||||
if not is_init:
|
||||
Log.warn("StudentProgression: Garden %d: invalid format for 'games' → reset." % index)
|
||||
garden["games"] = [Status.LOCKED, Status.LOCKED, Status.LOCKED]
|
||||
garden["games"] = _make_locked_games_array(minigame_count)
|
||||
|
||||
# Make sure duration arrays match the minigame count
|
||||
if (garden["last_duration"] as PackedInt32Array).size() != minigame_count:
|
||||
garden["last_duration"] = _make_zero_durations(minigame_count)
|
||||
if (garden["total_duration"] as PackedInt32Array).size() != minigame_count:
|
||||
garden["total_duration"] = _make_zero_durations(minigame_count)
|
||||
|
||||
# Check value outside of possible enum values
|
||||
for game_index: int in range(3):
|
||||
for game_index: int in range((garden["games"] as Array).size()):
|
||||
if garden["games"][game_index] not in [Status.LOCKED, Status.UNLOCKED, Status.COMPLETED]:
|
||||
garden["games"][game_index] = Status.LOCKED
|
||||
if garden["look_and_learn"] not in [Status.LOCKED, Status.UNLOCKED, Status.COMPLETED]:
|
||||
@@ -126,30 +146,57 @@ func ensure_data_integrity(data: Dictionary[int, Dictionary]) -> Dictionary:
|
||||
# First garden (key 1) is always unlocked
|
||||
prev_completed = true
|
||||
|
||||
var minigame_count: int = (garden["games"] as Array).size()
|
||||
|
||||
# Case: previous garden not completed
|
||||
if not prev_completed:
|
||||
for game_index: int in range(3):
|
||||
if garden["games"][game_index] != Status.LOCKED or garden["look_and_learn"] != Status.LOCKED:
|
||||
if not is_init:
|
||||
Log.warn("StudentProgression: Garden %d: invalid progression (previous not finished) → reset." % index)
|
||||
garden["games"] = [Status.LOCKED, Status.LOCKED, Status.LOCKED]
|
||||
garden["look_and_learn"] = Status.LOCKED
|
||||
break
|
||||
var needs_reset: bool = garden["look_and_learn"] != Status.LOCKED
|
||||
if not needs_reset:
|
||||
for game_index: int in range(minigame_count):
|
||||
if garden["games"][game_index] != Status.LOCKED:
|
||||
needs_reset = true
|
||||
break
|
||||
if needs_reset:
|
||||
if not is_init:
|
||||
Log.warn("StudentProgression: Garden %d: invalid progression (previous not finished) → reset." % index)
|
||||
garden["games"] = _make_locked_games_array(minigame_count)
|
||||
garden["look_and_learn"] = Status.LOCKED
|
||||
continue
|
||||
|
||||
# Case: lesson completed → unlock games if needed
|
||||
# Enforce sequential unlock: first non-COMPLETED game → UNLOCKED, everything
|
||||
# after it → LOCKED (including out-of-order COMPLETED in old saves).
|
||||
if garden["look_and_learn"] == Status.COMPLETED:
|
||||
for game_index: int in range(3):
|
||||
if garden["games"][game_index] == Status.LOCKED:
|
||||
garden["games"][game_index] = Status.UNLOCKED
|
||||
var next_to_play: int = -1
|
||||
for game_index: int in range(minigame_count):
|
||||
if garden["games"][game_index] != Status.COMPLETED:
|
||||
next_to_play = game_index
|
||||
break
|
||||
if next_to_play >= 0:
|
||||
if garden["games"][next_to_play] == Status.LOCKED:
|
||||
garden["games"][next_to_play] = Status.UNLOCKED
|
||||
if not is_init:
|
||||
Log.warn("StudentProgression: Garden %d: game %d unlocked because lesson is completed" % [index, game_index + 1])
|
||||
|
||||
# Case: previous garden completed → unlock lesson if needed
|
||||
elif garden["look_and_learn"] == Status.LOCKED:
|
||||
garden["look_and_learn"] = Status.UNLOCKED
|
||||
if not is_init:
|
||||
Log.warn("StudentProgression: Garden %d: lesson unlocked because previous garden is completed" % index)
|
||||
Log.warn("StudentProgression: Garden %d: minigame %d unlocked because it is next to play" % [index, next_to_play])
|
||||
for game_index: int in range(next_to_play + 1, minigame_count):
|
||||
if garden["games"][game_index] != Status.LOCKED:
|
||||
var was_completed: bool = garden["games"][game_index] == Status.COMPLETED
|
||||
garden["games"][game_index] = Status.LOCKED
|
||||
if not is_init:
|
||||
if was_completed:
|
||||
Log.warn("StudentProgression: Garden %d: minigame %d demoted from COMPLETED to LOCKED (out of play order — minigame %d not yet completed)" % [index, game_index, next_to_play])
|
||||
else:
|
||||
Log.warn("StudentProgression: Garden %d: minigame %d re-locked (waits for minigame %d to be completed)" % [index, game_index, game_index - 1])
|
||||
else:
|
||||
# L&L not completed → no game may be UNLOCKED (COMPLETED preserved).
|
||||
for game_index: int in range(minigame_count):
|
||||
if garden["games"][game_index] == Status.UNLOCKED:
|
||||
garden["games"][game_index] = Status.LOCKED
|
||||
if not is_init:
|
||||
Log.warn("StudentProgression: Garden %d: minigame %d re-locked (look-and-learn not completed)" % [index, game_index])
|
||||
# Case: previous garden completed → unlock lesson if needed
|
||||
if garden["look_and_learn"] == Status.LOCKED:
|
||||
garden["look_and_learn"] = Status.UNLOCKED
|
||||
if not is_init:
|
||||
Log.warn("StudentProgression: Garden %d: lesson unlocked because previous garden is completed" % index)
|
||||
|
||||
_sanitize_boss_progression()
|
||||
return result
|
||||
@@ -238,19 +285,25 @@ func get_max_unlocked_lesson_index() -> int:
|
||||
|
||||
|
||||
func is_lesson_completed(lesson_number: int) -> bool:
|
||||
return unlocks[lesson_number]["look_and_learn"] == Status.COMPLETED and unlocks[lesson_number]["games"][0] == Status.COMPLETED and unlocks[lesson_number]["games"][1] == Status.COMPLETED and unlocks[lesson_number]["games"][2] == Status.COMPLETED
|
||||
if unlocks[lesson_number]["look_and_learn"] != Status.COMPLETED:
|
||||
return false
|
||||
for game_status: int in unlocks[lesson_number]["games"]:
|
||||
if game_status != Status.COMPLETED:
|
||||
return false
|
||||
return true
|
||||
|
||||
|
||||
# Return true if the progression is saved or false if the look and learn was already completed
|
||||
func look_and_learn_completed(lesson_number: int) -> bool:
|
||||
if unlocks[lesson_number]["look_and_learn"] == Status.COMPLETED:
|
||||
return false
|
||||
|
||||
|
||||
unlocks[lesson_number]["look_and_learn"] = Status.COMPLETED
|
||||
|
||||
for index: int in range(3):
|
||||
unlocks[lesson_number]["games"][index] = Status.UNLOCKED
|
||||
|
||||
|
||||
var games: Array = unlocks[lesson_number]["games"]
|
||||
if games.size() > 0 and games[0] == Status.LOCKED:
|
||||
games[0] = Status.UNLOCKED
|
||||
|
||||
last_modified = Time.get_datetime_string_from_system(true)
|
||||
progression_changed.emit()
|
||||
return true
|
||||
@@ -258,20 +311,27 @@ func look_and_learn_completed(lesson_number: int) -> bool:
|
||||
|
||||
# Return true if the progression is saved or false if the game was already completed
|
||||
func game_completed(lesson_number: int, game_number: int) -> bool:
|
||||
# If the game is already completed, do nothing
|
||||
if unlocks[lesson_number]["games"][game_number] == Status.COMPLETED:
|
||||
var games: Array = unlocks[lesson_number]["games"]
|
||||
|
||||
if games[game_number] == Status.COMPLETED:
|
||||
return false
|
||||
|
||||
unlocks[lesson_number]["games"][game_number] = Status.COMPLETED
|
||||
|
||||
|
||||
games[game_number] = Status.COMPLETED
|
||||
|
||||
var next_game_index: int = game_number + 1
|
||||
if next_game_index < games.size() and games[next_game_index] == Status.LOCKED:
|
||||
games[next_game_index] = Status.UNLOCKED
|
||||
|
||||
var all_completed: bool = true
|
||||
for index: int in range(3):
|
||||
all_completed = all_completed and unlocks[lesson_number]["games"][index] == Status.COMPLETED
|
||||
|
||||
for game_status: int in games:
|
||||
if game_status != Status.COMPLETED:
|
||||
all_completed = false
|
||||
break
|
||||
|
||||
if all_completed:
|
||||
if unlocks.has(lesson_number + 1):
|
||||
unlocks[lesson_number + 1]["look_and_learn"] = Status.UNLOCKED
|
||||
|
||||
|
||||
last_modified = Time.get_datetime_string_from_system(true)
|
||||
progression_changed.emit()
|
||||
return true
|
||||
@@ -320,13 +380,14 @@ func clear_boss_block() -> void:
|
||||
|
||||
func add_level_time(lesson_number: int, game_number: int, time_spent: int) -> void:
|
||||
Log.trace("StudentProgression: Add time to level %d, minigame %d. Time added: %s" % [lesson_number, game_number, time_spent])
|
||||
if game_number > 2:
|
||||
Log.error("StudentProgression: Cannot log a level time for a minigame number superior to 2")
|
||||
return
|
||||
|
||||
if not unlocks.has(lesson_number):
|
||||
Log.error("StudentProgression: Cannot log a level time for lesson %d because it does not exists in progression data" % lesson_number)
|
||||
return
|
||||
|
||||
var minigame_count: int = (unlocks[lesson_number]["games"] as Array).size()
|
||||
if game_number < 0 or game_number >= minigame_count:
|
||||
Log.error("StudentProgression: Cannot log a level time for minigame %d in lesson %d (lesson has %d minigame(s))" % [game_number, lesson_number, minigame_count])
|
||||
return
|
||||
|
||||
if not (unlocks[lesson_number] as Dictionary).has("last_duration") or not (unlocks[lesson_number]["last_duration"] as PackedInt32Array).size() > game_number:
|
||||
Log.error("StudentProgression: Cannot log a last_duration for lesson %d, game %d, because it does not exists" % [lesson_number, game_number])
|
||||
|
||||
@@ -14,6 +14,7 @@ offset_bottom = 512.0
|
||||
pivot_offset = Vector2(180, 180)
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
mouse_filter = 1
|
||||
texture_normal = ExtResource("lesson_circle")
|
||||
texture_pressed = ExtResource("lesson_circle")
|
||||
texture_hover = ExtResource("lesson_circle")
|
||||
@@ -35,6 +36,7 @@ anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 1
|
||||
|
||||
[node name="Border" type="TextureRect" parent="." unique_id=758604924]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -4,6 +4,22 @@ extends Control
|
||||
signal minigame_layout_opened()
|
||||
|
||||
const KALULU: GDScript = preload("res://sources/minigames/base/kalulu_ingame.gd")
|
||||
const MINIGAME_WEDGE_SCENE: PackedScene = preload("res://sources/gardens/minigame_wedge.tscn")
|
||||
# Wheel geometry, in MinigameSelection-local coords (canvas 2560×1800).
|
||||
const WHEEL_CENTER: Vector2 = Vector2(1280, 900)
|
||||
# Matches the inner edge of big_button.png; past this the gray ring hides everything.
|
||||
const WHEEL_RADIUS: float = 815.0
|
||||
const WHEEL_ARC_SEGMENTS: int = 48
|
||||
const WHEEL_ICON_DISTANCE_RATIO: float = 0.55
|
||||
const WHEEL_DIVIDER_WIDTH: float = 12.0
|
||||
const WHEEL_HIGHLIGHT_WIDTH: float = 12.0
|
||||
# Outline around the central Look-and-Learn button. Drawn at the button's visible
|
||||
# edge. Colored dark by default, gold when L&L is the next-to-play step.
|
||||
const LESSON_BUTTON_OUTLINE_RADIUS: float = 192.0
|
||||
# Top inset of the wheel's central label so the grapheme text sits just below the
|
||||
# button center, mirroring the movie icon just above it. The 384x384 button has
|
||||
# its center at y=192; the label (vertical-centered) then centers at y=(this+384)/2.
|
||||
const LESSON_BUTTON_LABEL_TOP_OFFSET: float = 104.0
|
||||
const GARDEN_SCENES: Array[PackedScene] = [
|
||||
preload("res://resources/gardens/garden_01.tscn"),
|
||||
preload("res://resources/gardens/garden_02.tscn"),
|
||||
@@ -48,12 +64,12 @@ static var cached_layout_lessons: int = 0
|
||||
get:
|
||||
return _gardens_layout
|
||||
@export var starting_garden: int = -1
|
||||
@export_category("Colors")
|
||||
@export var unlocked_color: Color = Color("1c2662")
|
||||
@export var locked_color: Color = Color("1d2229")
|
||||
@export_group("Minigames")
|
||||
@export_category("Minigames")
|
||||
@export var minigame_scene_paths: PackedStringArray = PackedStringArray()
|
||||
@export var minigames_icons: Array[Texture] = []
|
||||
## Animal body (colored by the garden) and face (kept as-is for eyes/mouth details).
|
||||
## Both arrays must be the same length and aligned with `minigame_scene_paths`.
|
||||
@export var minigames_body_icons: Array[Texture] = []
|
||||
@export var minigames_face_icons: Array[Texture] = []
|
||||
|
||||
var _minigame_scene_cache: Dictionary = {}
|
||||
var lessons: Dictionary = {}
|
||||
@@ -84,17 +100,16 @@ var is_back_button_hold_active: bool = false
|
||||
@onready var boss_buttons_container: Control = %BossButtons
|
||||
@onready var minigame_selection: Control = %MinigameSelection
|
||||
@onready var lesson_button: LessonButton = %LessonButton
|
||||
@onready var lesson_button_outline: Line2D = %LessonButtonOutline
|
||||
@onready var lesson_button_movie_icon: TextureRect = %MovieIcon
|
||||
@onready var lesson_button_particles: GPUParticles2D = %LessonButtonParticles
|
||||
@onready var back_button: BackButton = %BackButton
|
||||
@onready var right_audio_stream_player: AudioStreamPlayer = $RightAudioStreamPlayer
|
||||
@onready var left_audio_stream_player: AudioStreamPlayer = $LeftAudioStreamPlayer
|
||||
@onready var feedback_audio_stream_player: AudioStreamPlayer = $FeedBackAudioStreamPlayer
|
||||
@onready var feedback_audio_stream_player2: AudioStreamPlayer = $FeedBackAudioStreamPlayer2
|
||||
@onready var minigame_layout_1: MinigameLayout = %MinigameBackground1
|
||||
@onready var minigame_layout_2: MinigameLayout = %MinigameBackground2
|
||||
@onready var minigame_layout_3: MinigameLayout = %MinigameBackground3
|
||||
@onready var minigame_background: TextureRect = %MinigameBackground
|
||||
@onready var minigame_background_center: TextureRect = %MinigameBackgroundCenter
|
||||
@onready var wedges_container: Control = %WedgesContainer
|
||||
@onready var background_rect: ColorRect = %BackgroundRect
|
||||
@onready var lock: Control = %Lock
|
||||
@onready var kalulu: KALULU = %Kalulu
|
||||
@onready var kalulu_button: CanvasItem = %KaluluButton
|
||||
@@ -669,7 +684,6 @@ func _process(_delta: float) -> void:
|
||||
_process_back_button_hold(_delta)
|
||||
locked_line.position.x = - scroll_container.scroll_horizontal
|
||||
unlocked_line.position.x = - scroll_container.scroll_horizontal
|
||||
boss_buttons_container.position.x = - scroll_container.scroll_horizontal
|
||||
parallax_background.scroll_offset.x = - scroll_container.scroll_horizontal
|
||||
clouds.scroll_offset = scroll_container.scroll_horizontal
|
||||
|
||||
@@ -688,17 +702,191 @@ func _process_back_button_hold(delta: float) -> void:
|
||||
_confirm_back_button_pressed()
|
||||
|
||||
|
||||
func _get_minigame_layouts() -> Array[MinigameLayout]:
|
||||
return [minigame_layout_1, minigame_layout_2, minigame_layout_3]
|
||||
# Single source of truth for wedge geometry. Returns the pie-slice's start/end
|
||||
# angles and the bisector angle along which the icon sits, for wedge `wedge_index`
|
||||
# of a wheel showing `minigame_count` wedges (1..3).
|
||||
# N=1: full disc, icon to the left of the L&L button.
|
||||
# N=2: game 0 left half, game 1 right half.
|
||||
# N=3: game 0 top-right, game 1 bottom, game 2 top-left.
|
||||
static func _get_wedge_angles(minigame_count: int, wedge_index: int) -> Dictionary:
|
||||
if minigame_count == 1:
|
||||
return {start = 0.0, end = TAU, icon = PI}
|
||||
if minigame_count == 2:
|
||||
if wedge_index == 0:
|
||||
return {start = PI / 2.0, end = 3.0 * PI / 2.0, icon = PI}
|
||||
return {start = -PI / 2.0, end = PI / 2.0, icon = 0.0}
|
||||
if wedge_index == 0:
|
||||
return {start = -PI / 2.0, end = PI / 6.0, icon = -PI / 6.0}
|
||||
if wedge_index == 1:
|
||||
return {start = PI / 6.0, end = 5.0 * PI / 6.0, icon = PI / 2.0}
|
||||
return {start = 5.0 * PI / 6.0, end = 3.0 * PI / 2.0, icon = 7.0 * PI / 6.0}
|
||||
|
||||
|
||||
static func _get_wedge_layout(minigame_count: int, wedge_index: int) -> Dictionary:
|
||||
var angles: Dictionary = _get_wedge_angles(minigame_count, wedge_index)
|
||||
var polygon: PackedVector2Array = _generate_full_disc_polygon() if minigame_count == 1 \
|
||||
else _generate_pie_slice_polygon(angles.start as float, angles.end as float)
|
||||
return {polygon = polygon, icon_center = _wedge_icon_position(angles.icon as float)}
|
||||
|
||||
|
||||
static func _generate_pie_slice_polygon(start_angle: float, end_angle: float, radius: float = WHEEL_RADIUS) -> PackedVector2Array:
|
||||
var wheel_points: PackedVector2Array = PackedVector2Array()
|
||||
wheel_points.append(WHEEL_CENTER)
|
||||
var span: float = end_angle - start_angle
|
||||
for index: int in range(WHEEL_ARC_SEGMENTS + 1):
|
||||
var angle: float = start_angle + span * (float(index) / float(WHEEL_ARC_SEGMENTS))
|
||||
wheel_points.append(WHEEL_CENTER + Vector2(cos(angle), sin(angle)) * radius)
|
||||
return wheel_points
|
||||
|
||||
|
||||
static func _generate_full_disc_polygon(radius: float = WHEEL_RADIUS) -> PackedVector2Array:
|
||||
var wheel_points: PackedVector2Array = PackedVector2Array()
|
||||
for index: int in range(WHEEL_ARC_SEGMENTS):
|
||||
var angle: float = TAU * float(index) / float(WHEEL_ARC_SEGMENTS)
|
||||
wheel_points.append(WHEEL_CENTER + Vector2(cos(angle), sin(angle)) * radius)
|
||||
return wheel_points
|
||||
|
||||
|
||||
# Wedge polygon with outer arc inset by half the stroke width so the gold line
|
||||
# stays inside the wedge. Radial edges keep their angles (fall on the dividers).
|
||||
static func _generate_wedge_highlight_polygon(minigame_count: int, wedge_index: int) -> PackedVector2Array:
|
||||
var inset_radius: float = WHEEL_RADIUS - WHEEL_HIGHLIGHT_WIDTH * 0.5
|
||||
if minigame_count == 1:
|
||||
return _generate_full_disc_polygon(inset_radius)
|
||||
var angles: Dictionary = _get_wedge_angles(minigame_count, wedge_index)
|
||||
return _generate_pie_slice_polygon(angles.start as float, angles.end as float, inset_radius)
|
||||
|
||||
|
||||
static func _wedge_icon_position(angle_rad: float) -> Vector2:
|
||||
return WHEEL_CENTER + Vector2(cos(angle_rad), sin(angle_rad)) * (WHEEL_RADIUS * WHEEL_ICON_DISTANCE_RATIO)
|
||||
|
||||
|
||||
static func _get_divider_segments(minigame_count: int) -> Array[PackedVector2Array]:
|
||||
var segments: Array[PackedVector2Array] = []
|
||||
if minigame_count < 2:
|
||||
return segments
|
||||
for wedge_index: int in range(minigame_count):
|
||||
var start_angle: float = _get_wedge_angles(minigame_count, wedge_index).start as float
|
||||
var edge: Vector2 = WHEEL_CENTER + Vector2(cos(start_angle), sin(start_angle)) * WHEEL_RADIUS
|
||||
segments.append(PackedVector2Array([WHEEL_CENTER, edge]))
|
||||
return segments
|
||||
|
||||
|
||||
func _clear_wheel() -> void:
|
||||
for child: Node in wedges_container.get_children():
|
||||
child.queue_free()
|
||||
|
||||
|
||||
func _build_wheel(exercises: Array[int], lesson_unlocks: Dictionary) -> void:
|
||||
_clear_wheel()
|
||||
var minigame_count: int = exercises.size()
|
||||
for wedge_index: int in range(minigame_count):
|
||||
var layout: Dictionary = _get_wedge_layout(minigame_count, wedge_index)
|
||||
var exercise_type: int = exercises[wedge_index]
|
||||
var icon_index: int = exercise_type - 1
|
||||
var status: StudentProgression.Status = lesson_unlocks["games"][wedge_index] as StudentProgression.Status
|
||||
var wedge: MinigameWedge = MINIGAME_WEDGE_SCENE.instantiate()
|
||||
wedges_container.add_child(wedge)
|
||||
var is_wedge_locked: bool = status == StudentProgression.Status.LOCKED
|
||||
wedge.configure(
|
||||
layout.polygon as PackedVector2Array,
|
||||
layout.icon_center as Vector2,
|
||||
minigames_body_icons[icon_index],
|
||||
minigames_face_icons[icon_index],
|
||||
_wedge_color_for_status(status),
|
||||
_body_color_for_status(status),
|
||||
is_wedge_locked,
|
||||
)
|
||||
wedge.is_disabled = is_wedge_locked
|
||||
wedge.pressed.connect(_on_minigame_button_pressed.bind(icon_index, wedge_index))
|
||||
_apply_wedge_status_effects(wedge, status, wedge_index)
|
||||
|
||||
for line_points: PackedVector2Array in _get_divider_segments(minigame_count):
|
||||
var divider: Line2D = Line2D.new()
|
||||
divider.width = WHEEL_DIVIDER_WIDTH
|
||||
divider.default_color = current_garden.wheel_background
|
||||
divider.points = line_points
|
||||
wedges_container.add_child(divider)
|
||||
|
||||
_draw_next_to_play_highlight(lesson_unlocks, minigame_count)
|
||||
|
||||
|
||||
func _next_to_play_wedge_index(lesson_unlocks: Dictionary) -> int:
|
||||
if lesson_unlocks["look_and_learn"] != StudentProgression.Status.COMPLETED:
|
||||
return -1
|
||||
var games: Array = lesson_unlocks["games"]
|
||||
for index: int in range(games.size()):
|
||||
if games[index] == StudentProgression.Status.UNLOCKED:
|
||||
return index
|
||||
return -1
|
||||
|
||||
|
||||
func _draw_next_to_play_highlight(lesson_unlocks: Dictionary, minigame_count: int) -> void:
|
||||
# L&L's "next to play" cue is the lesson-button outline color swap, handled
|
||||
# in _configure_lesson_button_outline(). Wedges get a separate gold ring here.
|
||||
var wedge_index: int = _next_to_play_wedge_index(lesson_unlocks)
|
||||
if wedge_index < 0:
|
||||
return
|
||||
_draw_wedge_highlight(minigame_count, wedge_index)
|
||||
|
||||
|
||||
func _draw_wedge_highlight(minigame_count: int, wedge_index: int) -> void:
|
||||
_add_highlight_line(_generate_wedge_highlight_polygon(minigame_count, wedge_index))
|
||||
|
||||
|
||||
# Adds a gold outline tracing the given polygon to the wheel. The polyline is
|
||||
# closed automatically. z_index lifts the line above Branches; LessonButton's
|
||||
# higher z_index keeps it on top in turn.
|
||||
func _add_highlight_line(polygon_points: PackedVector2Array) -> void:
|
||||
if polygon_points.is_empty():
|
||||
return
|
||||
var outline: PackedVector2Array = PackedVector2Array(polygon_points)
|
||||
outline.append(polygon_points[0])
|
||||
var line: Line2D = Line2D.new()
|
||||
line.width = WHEEL_HIGHLIGHT_WIDTH
|
||||
line.default_color = Garden.WHEEL_HIGHLIGHT
|
||||
line.joint_mode = Line2D.LINE_JOINT_ROUND
|
||||
line.begin_cap_mode = Line2D.LINE_CAP_ROUND
|
||||
line.end_cap_mode = Line2D.LINE_CAP_ROUND
|
||||
line.points = outline
|
||||
line.z_index = 5
|
||||
wedges_container.add_child(line)
|
||||
|
||||
|
||||
func _wedge_color_for_status(status: StudentProgression.Status) -> Color:
|
||||
match status:
|
||||
StudentProgression.Status.LOCKED:
|
||||
return Garden.WHEEL_WEDGE_LOCKED
|
||||
_:
|
||||
return current_garden.wheel_wedge_unlocked
|
||||
|
||||
|
||||
# Animal body tint: gray when locked, garden's signature color otherwise.
|
||||
func _body_color_for_status(status: StudentProgression.Status) -> Color:
|
||||
if status == StudentProgression.Status.LOCKED:
|
||||
return Garden.ANIMAL_LOCKED_COLOR
|
||||
return current_garden.animal_unlocked_color
|
||||
|
||||
|
||||
func _apply_wedge_status_effects(wedge: MinigameWedge, status: StudentProgression.Status, wedge_index: int) -> void:
|
||||
if status != StudentProgression.Status.COMPLETED:
|
||||
return
|
||||
if not transition_data \
|
||||
or not transition_data.get("minigame_completed", false) \
|
||||
or transition_data.get("minigame_number", -1) != wedge_index \
|
||||
or not transition_data.get("first_clear", false):
|
||||
return
|
||||
await minigame_layout_opened
|
||||
create_tween().tween_property(wedge, "modulate:a", 0.6, 0.5)
|
||||
wedge.right()
|
||||
|
||||
|
||||
func _open_minigames_layout(button: LessonButton, lesson_number: int) -> void:
|
||||
if in_minigame_selection or not UserDataManager.student_progression:
|
||||
return
|
||||
# Gets the correct exercises for the lesson
|
||||
var exercises: Array[int] = Database.get_exercise_for_lesson(lesson_number)
|
||||
if not exercises or exercises.size() < 3:
|
||||
Log.error("Gardens: Cannot open minigame layout for lesson %d: expected 3 exercises, got %d" % [lesson_number, exercises.size() if exercises else 0])
|
||||
if exercises.is_empty():
|
||||
Log.error("Gardens: Cannot open minigame layout for lesson %d: no minigames defined" % lesson_number)
|
||||
return
|
||||
feedback_audio_stream_player2.pitch_scale = 1.1
|
||||
feedback_audio_stream_player2.play()
|
||||
@@ -714,69 +902,84 @@ func _open_minigames_layout(button: LessonButton, lesson_number: int) -> void:
|
||||
current_button_global_position = button.global_position
|
||||
# Gets the current lesson unlocks
|
||||
var lesson_unlocks: Dictionary = UserDataManager.student_progression.unlocks[current_lesson_number]
|
||||
var are_minigames_locked: bool = lesson_unlocks["games"][0] == StudentProgression.Status.LOCKED and lesson_unlocks["games"][1] == StudentProgression.Status.LOCKED and lesson_unlocks["games"][2] == StudentProgression.Status.LOCKED
|
||||
# Deactivate the mouse filters on the buttons behind the layout
|
||||
for lesson_button_item: LessonButton in current_garden.get_lesson_buttons():
|
||||
lesson_button_item.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
# Background
|
||||
if are_minigames_locked:
|
||||
minigame_background_center.modulate = locked_color
|
||||
else:
|
||||
minigame_background_center.modulate = current_garden.color
|
||||
# Lesson button
|
||||
_handle_lesson_button(current_lesson_number, lesson_unlocks["look_and_learn"] as StudentProgression.Status)
|
||||
# Minigames
|
||||
var minigame_layouts: Array[MinigameLayout] = _get_minigame_layouts()
|
||||
for layout_index: int in minigame_layouts.size():
|
||||
_fill_minigame_choice(minigame_layouts[layout_index], exercises[layout_index], lesson_unlocks["games"][layout_index] as StudentProgression.Status, layout_index)
|
||||
var ll_status: StudentProgression.Status = lesson_unlocks["look_and_learn"] as StudentProgression.Status
|
||||
background_rect.color = current_garden.wheel_background
|
||||
_configure_lesson_button_outline(ll_status)
|
||||
_center_lesson_button_label()
|
||||
_handle_lesson_button(current_lesson_number, ll_status)
|
||||
_build_wheel(exercises, lesson_unlocks)
|
||||
# Animations
|
||||
minigame_selection.show()
|
||||
back_button.hide()
|
||||
kalulu_button.hide()
|
||||
line_particles.hide()
|
||||
minigame_background.size = 300.0 * Vector2.ONE
|
||||
minigame_background.global_position = current_button_global_position
|
||||
minigame_background.show()
|
||||
minigame_background_center.size = 300.0 * Vector2.ONE
|
||||
minigame_background_center.global_position = current_button_global_position
|
||||
minigame_background_center.show()
|
||||
var tween: Tween = create_tween().set_parallel(true).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK)
|
||||
tween.tween_property(minigame_background_center, "scale", (1800.0 / 300.0) * Vector2.ONE, 0.25)
|
||||
tween.tween_property(minigame_background_center, "global_position", Vector2(380.0, 0), 0.25)
|
||||
tween.tween_property(minigame_background, "scale", (1800.0 / 300.0) * Vector2.ONE, 0.25)
|
||||
tween.tween_property(minigame_background, "global_position", Vector2(380.0, 0), 0.25)
|
||||
tween.chain().tween_property(minigame_selection, "modulate:a", 1.0, 0.25)
|
||||
var tween: Tween = create_tween().set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK)
|
||||
tween.tween_property(minigame_selection, "modulate:a", 1.0, 0.25)
|
||||
await tween.finished
|
||||
minigame_layout_opened.emit()
|
||||
|
||||
|
||||
# Perfectly centers the grapheme label horizontally and drops it just below the
|
||||
# button center, so it pairs with the movie icon sitting just above. Done in code
|
||||
# because instanced-scene property overrides on the inherited Label don't survive
|
||||
# Godot re-saves. This LessonButton is a dedicated wheel instance, so it doesn't
|
||||
# affect the garden lesson buttons.
|
||||
func _center_lesson_button_label() -> void:
|
||||
var label: Label = lesson_button.label
|
||||
label.anchor_left = 0.0
|
||||
label.anchor_top = 0.0
|
||||
label.anchor_right = 1.0
|
||||
label.anchor_bottom = 1.0
|
||||
label.offset_left = 0.0
|
||||
label.offset_right = 0.0
|
||||
label.offset_top = LESSON_BUTTON_LABEL_TOP_OFFSET
|
||||
label.offset_bottom = 0.0
|
||||
|
||||
|
||||
func _configure_lesson_button_outline(ll_status: StudentProgression.Status) -> void:
|
||||
# Gold when L&L is the next-to-play step (UNLOCKED but not yet COMPLETED),
|
||||
# divider color otherwise. Replaces the separate gold ring we used to draw.
|
||||
var color: Color = Garden.WHEEL_HIGHLIGHT if ll_status == StudentProgression.Status.UNLOCKED else current_garden.wheel_background
|
||||
lesson_button_outline.default_color = color
|
||||
var circle_points: PackedVector2Array = _generate_full_disc_polygon(LESSON_BUTTON_OUTLINE_RADIUS)
|
||||
if circle_points.size() > 0:
|
||||
circle_points.append(circle_points[0])
|
||||
lesson_button_outline.points = circle_points
|
||||
|
||||
|
||||
func _handle_lesson_button(lesson_number: int, status: StudentProgression.Status) -> void:
|
||||
lesson_button.text = lessons[lesson_number][0].grapheme
|
||||
# Center stays the unlocked-wedge color across all states; pair it with the
|
||||
# garden's dark color so the label and icon stay readable on it.
|
||||
lesson_button.set_garden_colors(
|
||||
current_garden.wheel_wedge_unlocked,
|
||||
current_garden.unlocked_lesson,
|
||||
current_garden.wheel_wedge_unlocked,
|
||||
current_garden.unlocked_lesson,
|
||||
)
|
||||
lesson_button.set_button_disabled(status == StudentProgression.Status.LOCKED)
|
||||
lesson_button.completed = status == StudentProgression.Status.COMPLETED
|
||||
# Override the hardcoded gray LessonButton uses when disabled, so the L&L
|
||||
# center button keeps a uniform background regardless of progression state.
|
||||
lesson_button.center.modulate = current_garden.wheel_wedge_unlocked
|
||||
lesson_button_particles.emitting = status == StudentProgression.Status.UNLOCKED
|
||||
lesson_button_movie_icon.modulate = _lesson_button_label_color(status)
|
||||
if status == StudentProgression.Status.COMPLETED:
|
||||
if transition_data and transition_data.has("look_and_learn_completed") and transition_data.look_and_learn_completed:
|
||||
await minigame_layout_opened
|
||||
lesson_button.right()
|
||||
|
||||
|
||||
func _fill_minigame_choice(minigame_layout: MinigameLayout, exercise_type: int, status: StudentProgression.Status, minigame_number: int) -> void:
|
||||
minigame_layout.icon.texture = minigames_icons[exercise_type-1]
|
||||
minigame_layout.is_disabled = status == StudentProgression.Status.LOCKED
|
||||
# Mirrors LessonButton._update_visual_state() so the movie icon tracks the label.
|
||||
func _lesson_button_label_color(status: StudentProgression.Status) -> Color:
|
||||
if status == StudentProgression.Status.LOCKED:
|
||||
return LessonButton.LOCKED_LABEL_COLOR
|
||||
if status == StudentProgression.Status.COMPLETED:
|
||||
if transition_data and transition_data.has("minigame_completed") and transition_data.minigame_completed and transition_data.has("minigame_number") and transition_data.minigame_number == minigame_number and transition_data.has("first_clear") and transition_data.first_clear:
|
||||
minigame_layout.self_modulate = unlocked_color
|
||||
await minigame_layout_opened
|
||||
create_tween().tween_property(minigame_layout, "self_modulate:a", 0, 0.5)
|
||||
minigame_layout.right()
|
||||
else:
|
||||
minigame_layout.self_modulate.a = 0
|
||||
elif status == StudentProgression.Status.LOCKED:
|
||||
minigame_layout.self_modulate = locked_color
|
||||
else:
|
||||
minigame_layout.self_modulate = unlocked_color
|
||||
minigame_layout.pressed.connect(_on_minigame_button_pressed.bind(exercise_type - 1, minigame_number))
|
||||
return lesson_button.completed_label_color
|
||||
return lesson_button.unlocked_label_color
|
||||
|
||||
|
||||
func _get_minigame_scene(scene_index: int) -> PackedScene:
|
||||
@@ -811,26 +1014,18 @@ func _close_minigames_layout() -> void:
|
||||
in_minigame_selection = false
|
||||
feedback_audio_stream_player2.pitch_scale = 0.75
|
||||
feedback_audio_stream_player2.play()
|
||||
var tween: Tween = create_tween().set_parallel(true).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK)
|
||||
var tween: Tween = create_tween().set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK)
|
||||
tween.tween_property(minigame_selection, "modulate:a", 0.0, 0.25)
|
||||
var other_tween: Tween = tween.chain()
|
||||
other_tween.tween_property(minigame_background_center, "scale", Vector2.ONE, 0.25)
|
||||
other_tween.tween_property(minigame_background_center, "global_position", current_button_global_position, 0.25)
|
||||
other_tween.tween_property(minigame_background, "scale", Vector2.ONE, 0.25)
|
||||
other_tween.tween_property(minigame_background, "global_position", current_button_global_position, 0.25)
|
||||
await tween.finished
|
||||
if current_button:
|
||||
current_button.show_placeholder(false)
|
||||
minigame_selection.hide()
|
||||
minigame_background.hide()
|
||||
minigame_background_center.hide()
|
||||
back_button.show()
|
||||
kalulu_button.show()
|
||||
line_particles.show()
|
||||
for button: LessonButton in current_garden.get_lesson_buttons():
|
||||
button.mouse_filter = Control.MOUSE_FILTER_STOP
|
||||
for layout: MinigameLayout in _get_minigame_layouts():
|
||||
layout.pressed.disconnect(_on_minigame_button_pressed)
|
||||
_clear_wheel()
|
||||
|
||||
|
||||
#region Lesson setup and path
|
||||
@@ -967,8 +1162,6 @@ func _sync_boss_buttons_container() -> void:
|
||||
if not boss_buttons_container or not garden_parent:
|
||||
return
|
||||
boss_buttons_container.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
boss_buttons_container.position = Vector2.ZERO
|
||||
boss_buttons_container.size = scroll_container.size
|
||||
|
||||
|
||||
func _clear_boss_buttons() -> void:
|
||||
@@ -1014,7 +1207,6 @@ func _set_up_boss_buttons() -> void:
|
||||
boss_button.set_button_disabled(true)
|
||||
var garden_index: int = _get_garden_index_for_lesson(gate_lesson)
|
||||
boss_button.pressed.connect(_on_boss_button_pressed.bind(gate_lesson, garden_index))
|
||||
boss_button.gui_input.connect(_on_boss_button_gui_input)
|
||||
_set_up_final_boss_button()
|
||||
|
||||
|
||||
@@ -1041,7 +1233,6 @@ func _set_up_final_boss_button() -> void:
|
||||
boss_button.position = final_boss_center - final_boss_size * 0.5
|
||||
boss_button.set_button_disabled(false)
|
||||
boss_button.pressed.connect(_on_final_boss_button_pressed.bind(final_lesson_number, last_garden_index))
|
||||
boss_button.gui_input.connect(_on_boss_button_gui_input)
|
||||
_update_final_boss_scroll_space(final_boss_center, final_boss_size)
|
||||
|
||||
|
||||
@@ -1268,6 +1459,8 @@ func _on_minigame_button_pressed(scene_index: int, minigame_number: int) -> void
|
||||
if not minigame_scene:
|
||||
Log.error("Gardens: Missing minigame scene for index %d" % scene_index)
|
||||
return
|
||||
# Block a second wedge click during the curtain-close await below.
|
||||
_lock()
|
||||
feedback_audio_stream_player.play()
|
||||
await (OpeningCurtain as OpeningCurtainClass).close()
|
||||
Minigame.transition_data = {
|
||||
@@ -1308,19 +1501,6 @@ func _on_scroll_container_gui_input(event: InputEvent) -> void:
|
||||
scroll_container.scroll_horizontal -= int(motion_event.relative.x)
|
||||
|
||||
|
||||
func _on_boss_button_gui_input(event: InputEvent) -> void:
|
||||
# Boss buttons live outside the ScrollContainer, so without forwarding,
|
||||
# their default STOP mouse filter would swallow scroll events that pass over them.
|
||||
if event is InputEventMouseButton:
|
||||
var mb: InputEventMouseButton = event
|
||||
if mb.button_index == MOUSE_BUTTON_WHEEL_UP or mb.button_index == MOUSE_BUTTON_WHEEL_DOWN \
|
||||
or mb.button_index == MOUSE_BUTTON_WHEEL_LEFT or mb.button_index == MOUSE_BUTTON_WHEEL_RIGHT:
|
||||
_on_scroll_container_gui_input(event)
|
||||
return
|
||||
if is_scrolling and event is InputEventMouseMotion:
|
||||
_on_scroll_container_gui_input(event)
|
||||
|
||||
|
||||
func _scroll_by_garden(p_direction: int) -> void:
|
||||
var target_scroll: int = scroll_container.scroll_horizontal + p_direction * 200
|
||||
scroll_container.scroll_horizontal = target_scroll
|
||||
@@ -1357,6 +1537,31 @@ func _on_area_2d_input_event(_viewport: Node, event: InputEvent, _shape_idx: int
|
||||
_close_minigames_layout()
|
||||
|
||||
|
||||
# BackgroundRect spans the wheel screen with mouse_filter=STOP so it absorbs
|
||||
# every click that doesn't hit the L&L button (which is on top of it). We
|
||||
# dispatch the click to the matching wedge via point-in-polygon, or close the
|
||||
# wheel if the click falls outside every wedge.
|
||||
func _on_background_rect_gui_input(event: InputEvent) -> void:
|
||||
if is_locked or not in_minigame_selection:
|
||||
return
|
||||
if not event.is_action_pressed("left_click"):
|
||||
return
|
||||
var click_pos: Vector2 = (event as InputEventMouseButton).position
|
||||
for child: Node in wedges_container.get_children():
|
||||
if child is MinigameWedge:
|
||||
var wedge: MinigameWedge = child
|
||||
if Geometry2D.is_point_in_polygon(click_pos, wedge.polygon.polygon):
|
||||
# Hit on a wedge — enabled ones launch the minigame; disabled
|
||||
# ones play the wrong-click feedback. Either way the click is
|
||||
# consumed so the wheel stays open.
|
||||
if wedge.is_disabled:
|
||||
wedge.wrong()
|
||||
else:
|
||||
wedge.pressed.emit()
|
||||
return
|
||||
_close_minigames_layout()
|
||||
|
||||
|
||||
func _on_kalulu_button_pressed() -> void:
|
||||
kalulu_button.hide()
|
||||
if current_garden.get_progress_ratio() > 0.75:
|
||||
|
||||
@@ -2,36 +2,17 @@
|
||||
|
||||
[ext_resource type="Script" uid="uid://djolw68efn6r5" path="res://sources/gardens/gardens.gd" id="1_qlsw4"]
|
||||
[ext_resource type="Texture2D" uid="uid://jlwblk7lj7vi" path="res://assets/vfx/fx_10.png" id="3_xbvhu"]
|
||||
[ext_resource type="Texture2D" uid="uid://cq5wwf7y1msh7" path="res://assets/minigames/crabs/graphic/gauge_icon_crab_full.png" id="5_h8c5w"]
|
||||
[ext_resource type="Texture2D" uid="uid://di2qcv6jw8wh0" path="res://assets/minigames/parakeets/graphic/gauge_icon_parakeet_full.png" id="6_hekq6"]
|
||||
[ext_resource type="Texture2D" uid="uid://cq87j1xw4c31r" path="res://assets/minigames/jellyfish/graphic/gauge_icon_jellyfish_full.png" id="6_p30hm"]
|
||||
[ext_resource type="Texture2D" uid="uid://cffuqacgb1jra" path="res://assets/lesson_screen/branches.png" id="7_axgdc"]
|
||||
[ext_resource type="Texture2D" uid="uid://c3okdxpi317x5" path="res://assets/minigames/monkeys/graphic/gauge_icon_monkey_full.png" id="9_68su4"]
|
||||
[ext_resource type="Texture2D" uid="uid://re7qgivb3n5w" path="res://assets/minigames/frog/graphics/gauge_icon_frog_full.png" id="10_5wvwc"]
|
||||
[ext_resource type="Texture2D" uid="uid://nwbekpbuu472" path="res://assets/minigames/ants/graphics/gauge_icon_ant_full.png" id="12_ohgqx"]
|
||||
[ext_resource type="Texture2D" uid="uid://bc3e0qths2cvt" path="res://assets/minigames/boss/boss_icon_full.png" id="16_5rwfp"]
|
||||
[ext_resource type="Texture2D" uid="uid://bmdhpgxmur1vo" path="res://assets/minigames/caterpillar/graphics/gauge_icon_caterpillar_full.png" id="16_prl1o"]
|
||||
[ext_resource type="AudioStream" uid="uid://4bv1hr6r68op" path="res://assets/gardens/ui_transition_right.mp3" id="17_37f6y"]
|
||||
[ext_resource type="Texture2D" uid="uid://rnqme2j272qf" path="res://assets/minigames/turtles/graphic/gauge_icon_turtle_full.png" id="18_12pcf"]
|
||||
[ext_resource type="AudioStream" uid="uid://bwgrj3quwtbvm" path="res://assets/gardens/ui_transition_left.mp3" id="18_bdar8"]
|
||||
[ext_resource type="Texture2D" uid="uid://bb00fhnenbml5" path="res://assets/lesson_screen/big_button.png" id="20_elp7t"]
|
||||
[ext_resource type="Texture2D" uid="uid://dq23np4euf6da" path="res://assets/minigames/penguin/graphic/gauge_icon_penguin_full.png" id="20_ouafq"]
|
||||
[ext_resource type="Texture2D" uid="uid://dlnklpyefn0m2" path="res://assets/lesson_screen/big_button_center.png" id="21_r0a4h"]
|
||||
[ext_resource type="Material" uid="uid://dne7hgkrp4tdy" path="res://resources/gardens/minigame_icon_material.tres" id="22_cgp31"]
|
||||
[ext_resource type="Texture2D" uid="uid://dkomjpclxvmqf" path="res://assets/lesson_screen/top_left.png" id="23_p1d10"]
|
||||
[ext_resource type="Texture2D" uid="uid://rux5delnabp5" path="res://assets/lesson_screen/top_right.png" id="24_30f83"]
|
||||
[ext_resource type="AudioStream" uid="uid://bgof22p2ofunc" path="res://assets/sfx/ui_yes_button.mp3" id="24_ljadf"]
|
||||
[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="25_0ruwb"]
|
||||
[ext_resource type="Texture2D" uid="uid://dx7w01wdyq0b5" path="res://assets/particles/bigstar_x36_15fps.png" id="25_00sy7"]
|
||||
[ext_resource type="AudioStream" uid="uid://vyj4leik80w2" path="res://assets/sfx/swoosh.mp3" id="25_npbuv"]
|
||||
[ext_resource type="Texture2D" uid="uid://cqhbpt3lk6f15" path="res://assets/lesson_screen/bottom.png" id="25_tyvq6"]
|
||||
[ext_resource type="AudioStream" uid="uid://dlxvbjp63w6wm" path="res://assets/look_and_learn/effect.wav" id="26_5g3l0"]
|
||||
[ext_resource type="Script" uid="uid://ddew42fnpmsx1" path="res://sources/gardens/minigame_layout.gd" id="28_kvgph"]
|
||||
[ext_resource type="PackedScene" uid="uid://cyoioissvrkj8" path="res://sources/ui/back_button.tscn" id="29_back_button"]
|
||||
[ext_resource type="Texture2D" uid="uid://dj0ygi5q6kbdw" path="res://assets/minigames/minigame_ui/graphic/button_back_normal.png" id="29_cgp31"]
|
||||
[ext_resource type="Texture2D" uid="uid://gmoc5mxxfqin" path="res://assets/minigames/minigame_ui/graphic/button_back_pressed.png" id="30_wnxkf"]
|
||||
[ext_resource type="Texture2D" uid="uid://bnvx1mujmy3vf" path="res://assets/minigames/minigame_ui/graphic/button_back_disabled.png" id="31_b65yw"]
|
||||
[ext_resource type="PackedScene" uid="uid://cn2rw06pltyiu" path="res://sources/utils/fx/right.tscn" id="33_5y3ye"]
|
||||
[ext_resource type="Texture2D" uid="uid://iw84x6mx8h2g" path="res://assets/minigames/minigame_ui/graphic/button_kalulu_normal.png" id="41_xcos2"]
|
||||
[ext_resource type="Texture2D" uid="uid://ub1dnysbojn8" path="res://assets/minigames/minigame_ui/graphic/button_kalulu_pressed.png" id="42_l35j3"]
|
||||
[ext_resource type="Texture2D" uid="uid://crnxawhf68po3" path="res://assets/minigames/minigame_ui/graphic/button_kalulu_disabled.png" id="43_jfyfk"]
|
||||
@@ -40,6 +21,25 @@
|
||||
[ext_resource type="Texture2D" uid="uid://rx270y4n7tul" path="res://assets/minigames/parakeets/graphic/cloud_1.png" id="46_cloud1"]
|
||||
[ext_resource type="Texture2D" uid="uid://dphj3hqfnnw4p" path="res://assets/minigames/parakeets/graphic/cloud_2.png" id="47_cloud2"]
|
||||
[ext_resource type="Texture2D" uid="uid://1btgagsporxa" path="res://assets/minigames/parakeets/graphic/cloud_3.png" id="48_cloud3"]
|
||||
[ext_resource type="Texture2D" uid="uid://d1j23o6nq476v" path="res://assets/gardens/animals/ant_body.png" id="ant_body"]
|
||||
[ext_resource type="Texture2D" uid="uid://by3xfdin7jrsn" path="res://assets/gardens/animals/ant_face.png" id="ant_face"]
|
||||
[ext_resource type="Texture2D" uid="uid://b6nrx0dn0h3f2" path="res://assets/gardens/animals/caterpillar_body.png" id="caterpillar_body"]
|
||||
[ext_resource type="Texture2D" uid="uid://cnihbmks0piwi" path="res://assets/gardens/animals/caterpillar_face.png" id="caterpillar_face"]
|
||||
[ext_resource type="Texture2D" uid="uid://b2e61oot7ht35" path="res://assets/gardens/animals/crab_body.png" id="crab_body"]
|
||||
[ext_resource type="Texture2D" uid="uid://ruclqu4dc13u" path="res://assets/gardens/animals/crab_face.png" id="crab_face"]
|
||||
[ext_resource type="Texture2D" uid="uid://oagcnmxs0xx1" path="res://assets/gardens/animals/frog_body.png" id="frog_body"]
|
||||
[ext_resource type="Texture2D" uid="uid://b4243242f34g0" path="res://assets/gardens/animals/frog_face.png" id="frog_face"]
|
||||
[ext_resource type="Texture2D" uid="uid://bb3we2it550v6" path="res://assets/gardens/animals/jellyfish_body.png" id="jellyfish_body"]
|
||||
[ext_resource type="Texture2D" uid="uid://dppmdv8u3cwl1" path="res://assets/gardens/animals/jellyfish_face.png" id="jellyfish_face"]
|
||||
[ext_resource type="Texture2D" uid="uid://dr12efhuotfgt" path="res://assets/gardens/animals/monkey_body.png" id="monkey_body"]
|
||||
[ext_resource type="Texture2D" uid="uid://dc52xvm4y6rir" path="res://assets/gardens/animals/monkey_face.png" id="monkey_face"]
|
||||
[ext_resource type="Texture2D" uid="uid://c1ml42sp1vqga" path="res://assets/gardens/buttons/movie_icon.png" id="movie_icon"]
|
||||
[ext_resource type="Texture2D" uid="uid://c2yalimkyunxi" path="res://assets/gardens/animals/parakeet_body.png" id="parakeet_body"]
|
||||
[ext_resource type="Texture2D" uid="uid://l52tfb7fdrpt" path="res://assets/gardens/animals/parakeet_face.png" id="parakeet_face"]
|
||||
[ext_resource type="Texture2D" uid="uid://noekve4gjudr" path="res://assets/gardens/animals/penguin_body.png" id="penguin_body"]
|
||||
[ext_resource type="Texture2D" uid="uid://dbg7mxg3x7vd4" path="res://assets/gardens/animals/penguin_face.png" id="penguin_face"]
|
||||
[ext_resource type="Texture2D" uid="uid://b7rqldqdft30a" path="res://assets/gardens/animals/turtle_body.png" id="turtle_body"]
|
||||
[ext_resource type="Texture2D" uid="uid://nu4kpbywwpgn" path="res://assets/gardens/animals/turtle_face.png" id="turtle_face"]
|
||||
|
||||
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_ey6av"]
|
||||
blend_mode = 1
|
||||
@@ -123,7 +123,8 @@ grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
script = ExtResource("1_qlsw4")
|
||||
minigame_scene_paths = PackedStringArray("res://sources/minigames/jellyfish/jellyfish_minigame.tscn", "res://sources/minigames/crabs/crabs_minigame.tscn", "res://sources/minigames/parakeets/parakeets_minigame.tscn", "res://sources/minigames/monkeys/monkeys_minigame.tscn", "res://sources/minigames/caterpillar/caterpillar_minigame.tscn", "res://sources/minigames/frog/frog_minigame.tscn", "res://sources/minigames/turtles/turtles_minigame.tscn", "res://sources/minigames/ants/ants_minigame.tscn", "res://sources/minigames/penguin/penguin_minigame.tscn", "res://sources/minigames/boss/boss_minigame.tscn")
|
||||
minigames_icons = Array[Texture]([ExtResource("6_p30hm"), ExtResource("5_h8c5w"), ExtResource("6_hekq6"), ExtResource("9_68su4"), ExtResource("16_prl1o"), ExtResource("10_5wvwc"), ExtResource("18_12pcf"), ExtResource("12_ohgqx"), ExtResource("20_ouafq"), ExtResource("16_5rwfp")])
|
||||
minigames_body_icons = Array[Texture]([ExtResource("jellyfish_body"), ExtResource("crab_body"), ExtResource("parakeet_body"), ExtResource("monkey_body"), ExtResource("caterpillar_body"), ExtResource("frog_body"), ExtResource("turtle_body"), ExtResource("ant_body"), ExtResource("penguin_body")])
|
||||
minigames_face_icons = Array[Texture]([ExtResource("jellyfish_face"), ExtResource("crab_face"), ExtResource("parakeet_face"), ExtResource("monkey_face"), ExtResource("caterpillar_face"), ExtResource("frog_face"), ExtResource("turtle_face"), ExtResource("ant_face"), ExtResource("penguin_face")])
|
||||
|
||||
[node name="RightAudioStreamPlayer" type="AudioStreamPlayer" parent="." unique_id=941811110]
|
||||
stream = ExtResource("17_37f6y")
|
||||
@@ -207,9 +208,8 @@ size_flags_horizontal = 3
|
||||
custom_minimum_size = Vector2(80, 2.08165e-12)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="BossButtons" type="Control" parent="." unique_id=1176317047]
|
||||
[node name="BossButtons" type="Control" parent="ScrollContainer" unique_id=1176317047]
|
||||
unique_name_in_owner = true
|
||||
anchors_preset = 0
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="LockedLine" type="Line2D" parent="." unique_id=1229207154]
|
||||
@@ -237,20 +237,6 @@ volume_db = -5.0
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="." unique_id=1456876816]
|
||||
|
||||
[node name="MinigameBackgroundCenter" type="TextureRect" parent="CanvasLayer" unique_id=380724732]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
modulate = Color(0.109804, 0.14902, 0.384314, 1)
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
texture = ExtResource("21_r0a4h")
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="MinigameSelection" type="Control" parent="CanvasLayer" unique_id=613163331]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
@@ -265,121 +251,17 @@ grow_vertical = 2
|
||||
pivot_offset = Vector2(1280, 900)
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="MinigameBackground1" type="TextureRect" parent="CanvasLayer/MinigameSelection" unique_id=405469610]
|
||||
[node name="BackgroundRect" type="ColorRect" parent="CanvasLayer/MinigameSelection" unique_id=380724732]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 0
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
mouse_filter = 2
|
||||
texture = ExtResource("23_p1d10")
|
||||
script = ExtResource("28_kvgph")
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="CanvasLayer/MinigameSelection/MinigameBackground1" unique_id=1383000761]
|
||||
material = ExtResource("22_cgp31")
|
||||
custom_minimum_size = Vector2(256, 256)
|
||||
layout_mode = 0
|
||||
offset_left = 704.0
|
||||
offset_top = 576.0
|
||||
offset_right = 960.0
|
||||
offset_bottom = 832.0
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
texture = ExtResource("10_5wvwc")
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="RightFX" parent="CanvasLayer/MinigameSelection/MinigameBackground1/TextureRect" unique_id=1031123340 instance=ExtResource("33_5y3ye")]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="CanvasLayer/MinigameSelection/MinigameBackground1" unique_id=802836280]
|
||||
|
||||
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="CanvasLayer/MinigameSelection/MinigameBackground1/Area2D" unique_id=1785915721]
|
||||
polygon = PackedVector2Array(1279, 61.6, 1284, 63.6, 1284, 901.8, 1280.8, 905, 1278.5, 905, 556, 1324.3, 554, 1323.2, 554, 1321.5, 513, 1244.5, 513, 1241.3, 489, 1185.4, 489, 1184.3, 467, 1114.3, 467, 1109, 459, 1080.3, 459, 1079, 458.1, 1066, 455, 1061.6, 455, 1060, 446, 1005.2, 446, 1004, 440, 930.1, 440, 865, 441.1, 865, 445.1, 801, 446.3, 801, 460.3, 713, 461.5, 713, 481.5, 638, 482.6, 638, 500.6, 586, 501.7, 586, 513, 562.5, 513, 561.5, 510.8, 557, 513.7, 557, 540.7, 501, 541.9, 501, 570.8, 450, 572.2, 450, 576, 446.2, 574.6, 444.5, 575.7, 442, 577, 442, 587, 429.3, 587, 425.5, 588.8, 422, 590, 422, 639, 357, 640.1, 357, 691.1, 301, 693.1, 301, 745.2, 252, 747.3, 252, 809.3, 204, 811.4, 204, 865.4, 169, 867.5, 169, 957.5, 124, 960.6, 124, 996, 111.6, 996, 111, 1001.3, 107, 1002.9, 107, 1022, 102.5, 1025.2, 99, 1026.8, 99, 1075.7, 85, 1077.2, 85, 1080, 85.5, 1110.7, 77, 1113.2, 77, 1115.6, 77.6, 1118.2, 75, 1119.7, 75, 1182.8, 65, 1184.8, 65, 1185.8, 66, 1204.8, 63, 1207.6, 63, 1209.2, 64.1, 1212.4, 62, 1214.5, 62, 1216.6, 63.1, 1252, 61.1, 1252, 60, 1279, 60)
|
||||
|
||||
[node name="MinigameBackground2" type="TextureRect" parent="CanvasLayer/MinigameSelection" unique_id=1529070021]
|
||||
[node name="WedgesContainer" type="Control" parent="CanvasLayer/MinigameSelection" unique_id=1010111213]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 0
|
||||
offset_right = 2560.0
|
||||
offset_bottom = 1800.0
|
||||
mouse_filter = 2
|
||||
texture = ExtResource("24_30f83")
|
||||
script = ExtResource("28_kvgph")
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="CanvasLayer/MinigameSelection/MinigameBackground2" unique_id=373021186]
|
||||
material = ExtResource("22_cgp31")
|
||||
custom_minimum_size = Vector2(256, 256)
|
||||
layout_mode = 0
|
||||
offset_left = 1600.0
|
||||
offset_top = 576.0
|
||||
offset_right = 1856.0
|
||||
offset_bottom = 832.0
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
texture = ExtResource("10_5wvwc")
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="RightFX" parent="CanvasLayer/MinigameSelection/MinigameBackground2/TextureRect" unique_id=1160342672 instance=ExtResource("33_5y3ye")]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="CanvasLayer/MinigameSelection/MinigameBackground2" unique_id=204471632]
|
||||
|
||||
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="CanvasLayer/MinigameSelection/MinigameBackground2/Area2D" unique_id=1948283316]
|
||||
polygon = PackedVector2Array(1378, 65.1, 1378, 66.3, 1457, 78.3, 1457, 79.5, 1537, 99.4, 1537, 100.6, 1608, 125.6, 1608, 126.7, 1663, 151.7, 1663, 153, 1671.5, 159, 1673.3, 159, 1682, 161.5, 1682, 162.9, 1750, 202.9, 1750, 204, 1801, 240, 1801, 241.1, 1839, 272.1, 1839, 273.1, 1879, 310.1, 1879, 312.4, 1880.1, 314, 1885, 315.6, 1885, 318.2, 1936, 374.2, 1936, 376.3, 1983, 438.3, 1983, 439.5, 2026, 511.4, 2026, 515.5, 2044, 547.5, 2044, 548.6, 2045.7, 557, 2046.3, 557, 2061, 587.5, 2061, 590.6, 2082, 646.6, 2082, 651, 2082.7, 655, 2087, 661.4, 2087, 663, 2107, 744.8, 2107, 748, 2119, 835.9, 2119, 837, 2121, 923, 2120, 923, 2120, 955, 2118.8, 955, 2111.8, 1029, 2110.7, 1029, 2104.7, 1068, 2103.7, 1068, 2098.7, 1096, 2097.5, 1096, 2088, 1127.3, 2088, 1128.7, 2089.8, 1134, 2087.4, 1134, 2052.4, 1235, 2051.3, 1235, 2017.3, 1306, 2016.3, 1306, 2010.2, 1317, 2008.5, 1317, 2003, 1320.3, 2001, 1319.2, 2001, 1318.1, 1276, 902.2, 1276, 63.9, 1279, 61.9, 1279, 59.9)
|
||||
|
||||
[node name="MinigameBackground3" type="TextureRect" parent="CanvasLayer/MinigameSelection" unique_id=433963142]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 0
|
||||
offset_right = 2560.0
|
||||
offset_bottom = 1800.0
|
||||
mouse_filter = 2
|
||||
texture = ExtResource("25_tyvq6")
|
||||
script = ExtResource("28_kvgph")
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="CanvasLayer/MinigameSelection/MinigameBackground3" unique_id=1532680395]
|
||||
material = ExtResource("22_cgp31")
|
||||
custom_minimum_size = Vector2(256, 256)
|
||||
layout_mode = 0
|
||||
offset_left = 1152.0
|
||||
offset_top = 1248.0
|
||||
offset_right = 1408.0
|
||||
offset_bottom = 1504.0
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
texture = ExtResource("10_5wvwc")
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="RightFX" parent="CanvasLayer/MinigameSelection/MinigameBackground3/TextureRect" unique_id=151107649 instance=ExtResource("33_5y3ye")]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="CanvasLayer/MinigameSelection/MinigameBackground3" unique_id=1208926048]
|
||||
|
||||
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="CanvasLayer/MinigameSelection/MinigameBackground3/Area2D" unique_id=890040811]
|
||||
polygon = PackedVector2Array(1902, 1250.8, 1902, 1251.9, 2010.3, 1316.1, 2009.5, 1319, 2008.1, 1319, 1986.2, 1358, 1985, 1358, 1974, 1371.7, 1974, 1372.4, 1970.4, 1382, 1969, 1382, 1916, 1451, 1914.9, 1451, 1865.9, 1504, 1863.8, 1504, 1827.8, 1539, 1825.7, 1539, 1791.7, 1568, 1789.6, 1568, 1720.6, 1617, 1717.7, 1617, 1702.7, 1628, 1700.5, 1628, 1633.5, 1664, 1632.6, 1664, 1556.4, 1695, 1555.1, 1695, 1509, 1707.5, 1509, 1708.3, 1498.4, 1713, 1497.4, 1713, 1407.2, 1732, 1406.2, 1732, 1330.1, 1740, 1328, 1740, 1254, 1741, 1254, 1739.9, 1184, 1735.9, 1184, 1734.8, 1112, 1724.7, 1112, 1723.5, 1094.7, 1718, 1085, 1719.3, 1085, 1717.4, 1072.6, 1713, 1065, 1714.4, 1065, 1712.4, 1030.7, 1701, 1030.1, 1701, 1024, 1702.6, 1024, 1700.5, 1009, 1696.5, 1009, 1695, 1006.3, 1693, 994, 1691.8, 994, 1690.4, 969, 1681.4, 969, 1680.1, 964.3, 1677, 962.8, 1677, 961.5, 1678.4, 959, 1677.3, 959, 1676.4, 924, 1662.4, 924, 1661.3, 875, 1637.2, 875, 1636.1, 826, 1608.2, 826, 1607.1, 781, 1577.1, 781, 1576, 738, 1543, 738, 1541.9, 695, 1503.9, 695, 1502.8, 661, 1468.8, 661, 1466.7, 615, 1414.8, 615, 1412.7, 582, 1368.7, 582, 1365.6, 553.7, 1321.1, 554.8, 1319, 556, 1319, 560, 1314, 562.5, 1314, 619.4, 1279, 621.5, 1279, 1276, 897.9, 1276, 894.6)
|
||||
|
||||
[node name="Branches" type="TextureRect" parent="CanvasLayer/MinigameSelection" unique_id=301987876]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
@@ -387,10 +269,16 @@ anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
texture = ExtResource("7_axgdc")
|
||||
|
||||
[node name="LessonButtonOutline" type="Line2D" parent="CanvasLayer/MinigameSelection" unique_id=1010111290]
|
||||
unique_name_in_owner = true
|
||||
z_index = 11
|
||||
width = 12.0
|
||||
joint_mode = 2
|
||||
|
||||
[node name="LessonButton" parent="CanvasLayer/MinigameSelection" unique_id=843010913 instance=ExtResource("25_0ruwb")]
|
||||
unique_name_in_owner = true
|
||||
z_index = 10
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
@@ -404,6 +292,25 @@ offset_bottom = 192.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="MovieIcon" type="TextureRect" parent="CanvasLayer/MinigameSelection/LessonButton" unique_id=1010111291]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -42.0
|
||||
offset_top = -94.0
|
||||
offset_right = 42.0
|
||||
offset_bottom = -10.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
texture = ExtResource("movie_icon")
|
||||
expand_mode = 1
|
||||
stretch_mode = 6
|
||||
|
||||
[node name="LessonButtonParticles" type="GPUParticles2D" parent="CanvasLayer/MinigameSelection/LessonButton" unique_id=1605639976]
|
||||
unique_name_in_owner = true
|
||||
z_index = 1
|
||||
@@ -414,21 +321,6 @@ emitting = false
|
||||
texture = ExtResource("25_00sy7")
|
||||
process_material = SubResource("ParticleProcessMaterial_4gqpn")
|
||||
|
||||
[node name="MinigameBackground" type="TextureRect" parent="CanvasLayer" unique_id=2050203805]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
mouse_filter = 2
|
||||
texture = ExtResource("20_elp7t")
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="BackButton" parent="CanvasLayer" unique_id=1838227918 instance=ExtResource("29_back_button")]
|
||||
custom_minimum_size = Vector2(275, 275)
|
||||
offset_left = 50.0
|
||||
@@ -513,6 +405,7 @@ texture = ExtResource("47_cloud2")
|
||||
texture = ExtResource("48_cloud3")
|
||||
|
||||
[connection signal="gui_input" from="ScrollContainer" to="." method="_on_scroll_container_gui_input"]
|
||||
[connection signal="gui_input" from="CanvasLayer/MinigameSelection/BackgroundRect" to="." method="_on_background_rect_gui_input"]
|
||||
[connection signal="pressed" from="CanvasLayer/MinigameSelection/LessonButton" to="." method="_on_lesson_button_pressed"]
|
||||
[connection signal="button_down" from="CanvasLayer/BackButton" to="." method="_on_back_button_button_down"]
|
||||
[connection signal="button_up" from="CanvasLayer/BackButton" to="." method="_on_back_button_button_up"]
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
class_name MinigameLayout
|
||||
extends TextureRect
|
||||
|
||||
signal pressed()
|
||||
|
||||
var is_disabled: bool = false
|
||||
|
||||
@onready var icon: TextureRect = $TextureRect
|
||||
@onready var area: Area2D = $Area2D
|
||||
@onready var right_fx: RightFX = $TextureRect/RightFX
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
area.connect("input_event", _on_click)
|
||||
|
||||
|
||||
func _on_click(_viewport: Node, event: InputEvent, _shape_idx: int) -> void:
|
||||
if event.is_action_pressed("left_click") and not is_disabled:
|
||||
pressed.emit()
|
||||
|
||||
|
||||
func right() -> void:
|
||||
right_fx.play()
|
||||
@@ -1 +0,0 @@
|
||||
uid://ddew42fnpmsx1
|
||||
@@ -0,0 +1,61 @@
|
||||
class_name MinigameWedge
|
||||
extends Control
|
||||
|
||||
signal pressed()
|
||||
|
||||
const ICON_SIZE: Vector2 = Vector2(256, 256)
|
||||
const GRAYSCALE_SHADER: Shader = preload("res://resources/shaders/grayscale.gdshader")
|
||||
|
||||
var is_disabled: bool = false
|
||||
|
||||
@onready var polygon: Polygon2D = $Polygon2D
|
||||
@onready var area: Area2D = $Area2D
|
||||
@onready var collision: CollisionPolygon2D = $Area2D/CollisionPolygon2D
|
||||
@onready var icon_body_rect: TextureRect = $IconBodyRect
|
||||
@onready var icon_face_rect: TextureRect = $IconFaceRect
|
||||
@onready var right_fx: RightFX = $IconFaceRect/RightFX
|
||||
@onready var wrong_fx: WrongFX = $IconFaceRect/WrongFX
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
area.input_event.connect(_on_click)
|
||||
|
||||
|
||||
func configure(
|
||||
wedge_polygon: PackedVector2Array,
|
||||
icon_center: Vector2,
|
||||
body_texture: Texture,
|
||||
face_texture: Texture,
|
||||
wedge_color: Color,
|
||||
body_color: Color,
|
||||
is_locked: bool,
|
||||
) -> void:
|
||||
polygon.polygon = wedge_polygon
|
||||
polygon.color = wedge_color
|
||||
collision.polygon = wedge_polygon
|
||||
var icon_origin: Vector2 = icon_center - ICON_SIZE * 0.5
|
||||
icon_body_rect.position = icon_origin
|
||||
icon_body_rect.texture = body_texture
|
||||
icon_body_rect.modulate = body_color
|
||||
icon_face_rect.position = icon_origin
|
||||
icon_face_rect.texture = face_texture
|
||||
# Desaturate the face when locked.
|
||||
if is_locked:
|
||||
var grayscale: ShaderMaterial = ShaderMaterial.new()
|
||||
grayscale.shader = GRAYSCALE_SHADER
|
||||
icon_face_rect.material = grayscale
|
||||
else:
|
||||
icon_face_rect.material = null
|
||||
|
||||
|
||||
func right() -> void:
|
||||
right_fx.play()
|
||||
|
||||
|
||||
func wrong() -> void:
|
||||
wrong_fx.play()
|
||||
|
||||
|
||||
func _on_click(_viewport: Node, event: InputEvent, _shape_idx: int) -> void:
|
||||
if event.is_action_pressed("left_click") and not is_disabled:
|
||||
pressed.emit()
|
||||
@@ -0,0 +1 @@
|
||||
uid://dh555xp8ebnb8
|
||||
@@ -0,0 +1,63 @@
|
||||
[gd_scene format=3 uid="uid://b1u0xkalulu01"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dh555xp8ebnb8" path="res://sources/gardens/minigame_wedge.gd" id="1_wedge"]
|
||||
[ext_resource type="PackedScene" uid="uid://cn2rw06pltyiu" path="res://sources/utils/fx/right.tscn" id="3_rightfx"]
|
||||
[ext_resource type="PackedScene" uid="uid://dlmbxcgiv8tpr" path="res://sources/utils/fx/wrong.tscn" id="4_wrongfx"]
|
||||
|
||||
[node name="MinigameWedge" type="Control" unique_id=1762693146]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
script = ExtResource("1_wedge")
|
||||
|
||||
[node name="Polygon2D" type="Polygon2D" parent="." unique_id=1912619179]
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="." unique_id=870297940]
|
||||
|
||||
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Area2D" unique_id=1114106226]
|
||||
|
||||
[node name="IconBodyRect" type="TextureRect" parent="." unique_id=2053672816]
|
||||
custom_minimum_size = Vector2(256, 256)
|
||||
layout_mode = 0
|
||||
offset_right = 256.0
|
||||
offset_bottom = 256.0
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
mouse_filter = 2
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="IconFaceRect" type="TextureRect" parent="." unique_id=2053672817]
|
||||
custom_minimum_size = Vector2(256, 256)
|
||||
layout_mode = 0
|
||||
offset_right = 256.0
|
||||
offset_bottom = 256.0
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
mouse_filter = 2
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="RightFX" parent="IconFaceRect" unique_id=333957231 instance=ExtResource("3_rightfx")]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="WrongFX" parent="IconFaceRect" unique_id=333957232 instance=ExtResource("4_wrongfx")]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
@@ -104,13 +104,13 @@ func get_exercise_for_lesson(lesson_nb: int) -> Array[int]:
|
||||
INNER JOIN Lessons ON Lessons.ID = LessonsExercises.LessonID
|
||||
WHERE LessonNB == " + str(lesson_nb)
|
||||
db.query(query)
|
||||
|
||||
# Exercise* == 0 means "no minigame in this slot": drop zeros so size = count.
|
||||
var result: Array[int] = []
|
||||
for element: Dictionary in db.query_result:
|
||||
result.append(element.Exercise1)
|
||||
result.append(element.Exercise2)
|
||||
result.append(element.Exercise3)
|
||||
|
||||
for column: String in ["Exercise1", "Exercise2", "Exercise3"]:
|
||||
var exercise_id: int = element[column] as int
|
||||
if exercise_id > 0:
|
||||
result.append(exercise_id)
|
||||
return result
|
||||
|
||||
|
||||
|
||||