Fixes pause menu in minigames. Improves Caterpillar eat and spit animations. Improve parakeets feedback animations. Fixes a bug in the words minigames that presented words that were exceptions. Updates exports presets.

This commit is contained in:
Dylan Sarrazyn
2024-10-10 11:26:33 +02:00
parent 355933521c
commit b4a1ddcba7
30 changed files with 201 additions and 75 deletions
+2 -2
View File
@@ -577,7 +577,7 @@ architectures/armeabi-v7a=false
architectures/arm64-v8a=true
architectures/x86=false
architectures/x86_64=false
version/code=31
version/code=33
version/name=""
package/unique_name="org.godotengine.kalulu"
package/name=""
@@ -777,7 +777,7 @@ custom_template/release=""
architectures/arm64=true
application/app_store_team_id="GR358SB2B8"
application/code_sign_identity_debug=""
application/export_method_debug=1
application/export_method_debug=0
application/code_sign_identity_release=""
application/export_method_release=0
application/targeted_device_family=2
+1 -1
View File
@@ -11,7 +11,7 @@ config_version=5
[application]
config/name="Kalulu"
config/version="2.0.2"
config/version="2.0.3"
run/main_scene="res://sources/menus/splash_screen/splash_screen.tscn"
config/features=PackedStringArray("4.3", "Forward Plus")
boot_splash/bg_color=Color(0.141176, 0.141176, 0.141176, 1)
File diff suppressed because one or more lines are too long
+18
View File
@@ -121,6 +121,12 @@ grow_vertical = 2
layout_mode = 2
script = null
[node name="TabContainer" parent="NewGPLayer/VBoxContainer/Title" index="1"]
current_tab = 0
[node name="NormalContainer" parent="NewGPLayer/VBoxContainer/Title/TabContainer" index="1"]
metadata/_tab_index = 0
[node name="Grapheme" parent="NewGPLayer/VBoxContainer/Title/TabContainer/NormalContainer" index="0"]
text = "Grapheme"
@@ -133,10 +139,22 @@ text = "Type"
[node name="EditButton" parent="NewGPLayer/VBoxContainer/Title/TabContainer/NormalContainer" index="3"]
modulate = Color(1, 1, 1, 0)
[node name="EditContainer" parent="NewGPLayer/VBoxContainer/Title/TabContainer" index="2"]
metadata/_tab_index = 1
[node name="NewGP" parent="NewGPLayer/VBoxContainer" instance=ExtResource("5_1f555")]
unique_name_in_owner = true
layout_mode = 2
[node name="TabContainer" parent="NewGPLayer/VBoxContainer/NewGP" index="1"]
current_tab = 0
[node name="NormalContainer" parent="NewGPLayer/VBoxContainer/NewGP/TabContainer" index="1"]
metadata/_tab_index = 0
[node name="EditContainer" parent="NewGPLayer/VBoxContainer/NewGP/TabContainer" index="2"]
metadata/_tab_index = 1
[node name="DeleteButton" parent="NewGPLayer/VBoxContainer/NewGP/TabContainer/EditContainer" index="0"]
visible = false
@@ -30,11 +30,13 @@ theme_override_styles/panel = SubResource("StyleBoxFlat_emsyu")
[node name="TabContainer" type="TabContainer" parent="."]
layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxEmpty_t1yui")
current_tab = 0
tabs_visible = false
[node name="NormalContainer" type="HBoxContainer" parent="TabContainer"]
layout_mode = 2
theme_override_constants/separation = 0
metadata/_tab_index = 0
[node name="Lesson" type="Label" parent="TabContainer/NormalContainer"]
unique_name_in_owner = true
@@ -82,6 +84,7 @@ texture = ExtResource("2_i6x6b")
visible = false
layout_mode = 2
theme_override_constants/separation = 0
metadata/_tab_index = 1
[node name="HBoxContainer" type="HBoxContainer" parent="TabContainer/EditContainer"]
layout_mode = 2
@@ -2,7 +2,7 @@ extends AudioStreamPlayer
class_name MinigameAudioStreamPlayer
func play_gp(gp: Dictionary) -> void:
if gp.is_empty():
if not gp or gp.is_empty():
return
var phoneme_audiostream = Database.load_external_sound(Database.get_gp_sound_path(gp)) as AudioStream
+15 -11
View File
@@ -76,6 +76,13 @@ var current_lives: = 0 :
set(value):
var previous_lives: = current_lives
current_lives = value
if minigame_ui:
minigame_ui.set_number_of_lives(value)
if value == 0 and previous_lives != 0:
_lose()
return
if current_lives < previous_lives:
consecutive_errors += previous_lives - current_lives
@@ -83,11 +90,6 @@ var current_lives: = 0 :
_play_kalulu_help_speech()
elif consecutive_errors == errors_before_highlight:
is_highlighting = true
if minigame_ui:
minigame_ui.set_number_of_lives(value)
if value == 0 and previous_lives != 0:
_lose()
# Progression
var current_progression: = 0 : set = set_current_progression
@@ -314,10 +316,10 @@ func _play_stimulus() -> void:
return
func _pause_game() -> void:
var pause: = not get_tree().paused
func _pause_game() -> bool:
var pause: bool = not get_tree().paused
get_tree().paused = pause
minigame_ui.show_center_menu(pause)
return pause
func _play_kalulu() -> void:
@@ -335,6 +337,7 @@ func _stop_highlight() -> void:
func _play_kalulu_help_speech() -> void:
minigame_ui.play_kalulu_speech(help_kalulu_speech)
await minigame_ui.kalulu_speech_ended
#endregion
@@ -365,7 +368,7 @@ func _on_minigame_ui_garden_button_pressed() -> void:
func _on_minigame_ui_stimulus_button_pressed() -> void:
get_tree().paused = true
_pause_game()
minigame_ui.lock()
await minigame_ui.repeat_stimulus_animation(true)
@@ -376,11 +379,12 @@ func _on_minigame_ui_stimulus_button_pressed() -> void:
await minigame_ui.repeat_stimulus_animation(false)
minigame_ui.unlock()
get_tree().paused = false
_pause_game()
func _on_minigame_ui_pause_button_pressed() -> void:
_pause_game()
var pause: = _pause_game()
minigame_ui.show_center_menu(pause)
func _on_minigame_ui_kalulu_button_pressed() -> void:
+3 -2
View File
@@ -6,7 +6,7 @@
[ext_resource type="PackedScene" uid="uid://d1gkvqxe1n8o8" path="res://sources/utils/fx/fireworks.tscn" id="4_yekwo"]
[node name="BaseMinigame" type="Control"]
process_mode = 3
process_mode = 1
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
@@ -16,7 +16,8 @@ grow_vertical = 2
script = ExtResource("1_jdfsm")
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
bus = &"Effects"
process_mode = 3
bus = &"Voice"
script = ExtResource("2_dkgx4")
[node name="MinigameUI" parent="." instance=ExtResource("2_a3tib")]
@@ -17,6 +17,7 @@ var current_gp_distractors_queue: Array[Dictionary] = []
func _find_stimuli_and_distractions() -> void:
# Get the currently known words list
var words_list: = Database.get_words_for_lesson(lesson_nb, false, 2, max_number_of_GPs)
print(words_list)
if words_list.is_empty():
return
@@ -165,7 +166,11 @@ func _get_GP() -> Dictionary:
func _get_distractor() -> Dictionary:
if current_gp_distractors_queue.is_empty():
_reset_distractors_queue()
return current_gp_distractors_queue.pop_front()
if current_gp_distractors_queue:
return current_gp_distractors_queue.pop_front()
return {}
# Check if the provided GP is the expected answer
@@ -183,7 +188,8 @@ func _log_new_response_and_score(gp: Dictionary) -> void:
if not is_highlighting:
_update_score(gp.ID, 1)
else:
_update_score(gp.ID, -1)
if gp:
_update_score(gp.ID, -1)
_update_score(self._get_GP().ID, -1)
@@ -10,3 +10,6 @@ distractors_queue_size = 6
time_between_words = 3.0
lesson_nb = 4
difficulty = 1
[node name="AudioStreamPlayer" parent="." index="0"]
process_mode = 3
+2
View File
@@ -13,6 +13,8 @@ var gp: Dictionary:
gp = value
if gp.has("Grapheme"):
label.text = gp.Grapheme
else:
label.text = ""
var is_distractor: bool = false
+2 -1
View File
@@ -19,6 +19,7 @@ var velocity: float = 0.0
var is_highlighting: = false:
set = _set_highlighting
var is_running: float = true
func _set_highlighting(value: bool) -> void:
is_highlighting = value
@@ -42,7 +43,7 @@ func _ready() -> void:
func _process(delta: float) -> void:
if Engine.is_editor_hint():
if Engine.is_editor_hint() or not is_running:
return
for leaf: Leaf in leaves.get_children():
+21 -4
View File
@@ -21,11 +21,21 @@ const body_part_wait_time: float = 0.04
var is_moving: bool = false
var is_eating: bool = false
func idle() -> void:
for body_part: CaterpillarBody in body_parts.get_children():
body_part.idle()
func walk() -> void:
for body_part: CaterpillarBody in body_parts.get_children():
body_part.walk()
func move(y : float) -> void:
if is_moving or is_eating:
return
idle()
is_moving = true
var coroutine: = Coroutine.new()
@@ -44,6 +54,7 @@ func move(y : float) -> void:
await coroutine.join_all()
is_moving = false
walk()
func _tween_body_part(part: Node2D, y: float) -> Tween:
@@ -97,16 +108,22 @@ func spit_berry(berry: Berry) -> void:
var pos_x : float = berry.global_position.x
# Eat the berry
var tween: = create_tween()
tween.tween_property(berry, "global_position:x", head.global_position.x + body_part_width * 3, 0.1)
tween.tween_property(berry, "global_position:x",head.global_position.x + body_part_width * 2, .2)
await head.eat()
# Spit the berry
head.spit()
tween = create_tween()
tween.tween_property(berry, "global_position:x", pos_x, 0.1)
berry.wrong()
await head.spit()
tween.tween_property(berry, "global_position:x", pos_x, 0.2)
await tween.finished
await berry.wrong()
# Make the berry disappear
tween = create_tween()
tween.tween_property(berry, "modulate:a", 0, 1)
await tween.finished
is_eating = false
@@ -88,6 +88,15 @@ func _stop_highlight() -> void:
for branch: Branch in branches:
branch.is_highlighting = false
func _run() -> void:
caterpillar.walk()
for branch: Branch in branches:
branch.is_running = true
func _stop() -> void:
caterpillar.idle()
for branch: Branch in branches:
branch.is_running = false
func _get_difficulty_settings() -> DifficultySettings:
return difficulty_settings[difficulty]
@@ -134,14 +143,20 @@ func _on_berry_eaten(berry: Berry) -> void:
# Pause the timer
berry_timer.paused = true
var gp: Dictionary = berry.gp
if _is_GP_right(berry.gp):
_clear_berries()
_stop()
await caterpillar.eat_berry(berry)
await audio_player.play_gp(_get_GP())
_run()
current_word_progression += 1
else:
_stop()
await caterpillar.spit_berry(berry)
await audio_player.play_gp(berry.gp)
await audio_player.play_gp(gp)
_run()
current_lives -= 1
# Unpause timer
@@ -10,11 +10,15 @@
[node name="CaterpillarMinigame" instance=ExtResource("1_ntn14")]
script = ExtResource("2_ycf8p")
minigame_name = 4
lesson_nb = 12
lesson_nb = 6
difficulty = 0
max_number_of_lives = 5
max_progression = 5
[node name="AudioStreamPlayer" parent="." index="0"]
process_mode = 0
bus = &"Effects"
[node name="MinigameUI" parent="." index="1"]
empty_progression_icon = ExtResource("6_xkfwj")
full_progression_icon = ExtResource("7_u5jxc")
+4 -4
View File
@@ -1,7 +1,7 @@
[gd_scene load_steps=37 format=3 uid="uid://bwe3fp0vkpufb"]
[ext_resource type="Script" path="res://sources/minigames/crabs/crab/crab.gd" id="1_5hgg8"]
[ext_resource type="AudioStream" uid="uid://cms5kg6cif013" path="res://assets/minigames/crabs/audio/sfx/crab_random_3.mp3" id="2_emw2h"]
[ext_resource type="AudioStream" uid="uid://y8hwaul7nmhj" path="res://assets/minigames/crabs/audio/sfx/crab_random_10.mp3" id="2_l6obh"]
[ext_resource type="Texture2D" uid="uid://c36217nu30yh3" path="res://assets/minigames/crabs/graphic/crab_spritesheet.png" id="2_yu4q0"]
[ext_resource type="Script" path="res://sources/utils/sprite_control.gd" id="3_e1twq"]
[ext_resource type="PackedScene" uid="uid://cge0uyn30tcpv" path="res://sources/utils/fx/highlight.tscn" id="3_is4em"]
@@ -205,8 +205,9 @@ offset_bottom = 320.0
script = ExtResource("1_5hgg8")
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("2_emw2h")
stream = ExtResource("2_l6obh")
volume_db = -3.0
stream_paused = true
bus = &"Effects"
[node name="BackFX" type="Control" parent="."]
@@ -264,9 +265,8 @@ sprites = [NodePath("AnimatedSprite2D")]
unique_name_in_owner = true
scale = Vector2(1.79512, 1.78771)
sprite_frames = SubResource("SpriteFrames_g5q5i")
animation = &"idle2"
animation = &"idle1"
autoplay = "idle1"
frame_progress = 0.968603
centered = false
offset = Vector2(-5, 0)
+17 -6
View File
@@ -26,6 +26,8 @@ var difficulty_settings: Array[DifficultySettings] = [
@onready var crab_zone: Control = $GameRoot/CrabZone
var holes: Array[Hole] = []
var stimulus_spawned: bool = false
# ------------ Initialisation ------------
@@ -87,16 +89,20 @@ func _on_stimulus_pressed(stimulus: Dictionary, node: Node) -> bool:
if is_right:
hole.right()
current_progression += 1
stimulus_spawned = false
else:
hole.wrong()
current_lives -= 1
# Spawn another crab
_on_hole_crab_despawned()
_on_hole_crab_despawned(false)
# Play the pressed crab phoneme
if stimulus and stimulus.Phoneme:
await audio_player.play_gp(stimulus)
await get_tree().create_timer(1).timeout
_play_current_stimulus_phoneme()
return true
@@ -113,7 +119,7 @@ func _on_current_progression_changed() -> void:
# Spawn a set amount of crabs in random holes
func _spawn_crabs() -> void:
for i in range(int(3.0 * holes.size() / 4.0)):
_on_hole_crab_despawned()
_on_hole_crab_despawned(false)
await get_tree().create_timer(0.1).timeout
@@ -122,7 +128,10 @@ func _on_hole_crab_out(hole : Hole) -> void:
hole.highlight()
func _on_hole_crab_despawned() -> void:
func _on_hole_crab_despawned(is_stimulus: bool) -> void:
if is_stimulus:
stimulus_spawned = false
if await _await_for_future_or_stimulus_found(get_tree().create_timer(randf_range(0.1, 2.0)).timeout):
return
_on_hole_timer_timeout()
@@ -137,12 +146,14 @@ func _on_hole_timer_timeout() -> void:
for i: int in holes_range:
if not holes[i].crab:
# Define if the crab is a stimulus or a distraction
var is_stimulus: = randf() < _get_difficulty_settings().stimuli_ratio
# Only one crab with the correct stimulus can be showned at a time
var is_stimulus: = not stimulus_spawned and randf() < _get_difficulty_settings().stimuli_ratio
if is_stimulus:
holes[i].spawn_crab(_get_current_stimulus())
stimulus_spawned = true
holes[i].spawn_crab(_get_current_stimulus(), true)
else:
var current_distractors : Array = distractions[current_progression % distractions.size()]
holes[i].spawn_crab(current_distractors.pick_random())
holes[i].spawn_crab(current_distractors.pick_random(), false)
hole_found = true
break
@@ -7,6 +7,7 @@
[ext_resource type="Texture2D" uid="uid://5bx8ugh178j1" path="res://assets/minigames/crabs/graphic/background.png" id="7_s0cgt"]
[node name="CrabsMinigame" instance=ExtResource("1_lbq56")]
process_mode = 1
script = ExtResource("2_gierf")
minigame_name = 1
lesson_nb = 67
+8 -4
View File
@@ -1,7 +1,7 @@
extends Node2D
signal stimulus_hit(stimulus: Dictionary)
signal crab_despawned()
signal crab_despawned(is_stimulus: bool)
signal stop()
signal crab_out(hole)
@@ -28,6 +28,7 @@ var crab_visible: bool = false:
set(value):
crab_visible = value
_set_crab_button_active(stimulus_heard and crab_visible)
var is_stimulus: bool = false
func _process(_delta : float) -> void:
@@ -62,7 +63,10 @@ func _process(_delta : float) -> void:
crab_audio_stream_player.stop_playing()
func spawn_crab(stimulus: Dictionary) -> void:
func spawn_crab(gp: Dictionary, is_stimulus: bool) -> void:
self.is_stimulus = is_stimulus
# Instantiate a new crab
crab = crab_scene.instantiate()
mask.add_child(crab)
@@ -71,7 +75,7 @@ func spawn_crab(stimulus: Dictionary) -> void:
crab_x = -crab.size.x / 2
crab.position = Vector2(crab_x, crab.size.y / 2)
crab.stimulus = stimulus
crab.stimulus = gp
# Show the crab but not the stimulus
var tween: = create_tween()
@@ -107,7 +111,7 @@ func spawn_crab(stimulus: Dictionary) -> void:
crab = null
# Emit the despawned signal
crab_despawned.emit()
crab_despawned.emit(is_stimulus)
func is_button_pressed_with_limit(future : Signal) -> bool:
+1 -1
View File
@@ -20,7 +20,7 @@ max_number_of_GPs = 6
distractors_queue_size = 6
time_between_words = 3.0
minigame_name = 5
lesson_nb = 10
lesson_nb = 6
max_number_of_lives = 5
max_progression = 5
+4 -1
View File
@@ -43,7 +43,10 @@ func stop_highlight() -> void:
func _set_stimulus(value: Dictionary) -> void:
stimulus = value
label.text = stimulus["Grapheme"]
if stimulus:
label.text = stimulus["Grapheme"]
else:
label.text = ""
func _set_disabled(value: bool) -> void:
+5 -1
View File
@@ -80,7 +80,11 @@ func pick_distractor() -> Dictionary:
distractors_queue.shuffle()
while distractors_queue.size() > distractors_queue_size:
distractors_queue.pop_front()
return distractors_queue.pop_front()
if distractors_queue:
return distractors_queue.pop_front()
return {}
#region Lilypads
@@ -7,7 +7,10 @@
[ext_resource type="Texture2D" uid="uid://c7oq86cgq7okn" path="res://assets/minigames/jellyfish/graphic/backgroung.png" id="6_sn7hv"]
[node name="JellyfishMinigame" instance=ExtResource("1_hauef")]
process_mode = 1
script = ExtResource("2_gnjlp")
lesson_nb = 5
difficulty = 4
max_number_of_lives = 5
max_progression = 8
+6 -2
View File
@@ -29,8 +29,12 @@ var stunned: = false:
var stimulus: Dictionary :
set(value):
stimulus = value
coconut.text = value.Grapheme
drag_preview_label.text = value.Grapheme
if value:
coconut.text = value.Grapheme
drag_preview_label.text = value.Grapheme
else:
coconut.text = ""
drag_preview_label.text = ""
coconut_pivot.hide()
@@ -20,6 +20,7 @@ base_font = ExtResource("8_fem7m")
spacing_glyph = 20
[node name="MonkeysMinigame" instance=ExtResource("1_6nhsm")]
process_mode = 1
script = ExtResource("2_12lw5")
throw_to_king_duration = 1.2
throw_to_monkey_duration = 0.8
@@ -28,7 +29,8 @@ max_number_of_GPs = 6
distractors_queue_size = 6
time_between_words = 3.0
minigame_name = 3
lesson_nb = 8
lesson_nb = 7
difficulty = 4
max_number_of_lives = 5
max_progression = 5
+12
View File
@@ -31,6 +31,8 @@ signal pressed()
@onready var animated_sprite: = $AnimatedSprite2D
@onready var label: = $Label
@onready var right_FX: RightFX = $RightFX
@onready var wrong_FX: WrongFX = $WrongFX
var stimulus: Dictionary :
set(value):
@@ -95,3 +97,13 @@ func idle() -> void:
func sad() -> void:
animated_sprite.play("sad")
await get_tree().create_timer(sad_duration).timeout
func right() -> void:
right_FX.play()
await right_FX.finished
func wrong() -> void:
wrong_FX.play()
await wrong_FX.finished
+14 -5
View File
@@ -1,9 +1,11 @@
[gd_scene load_steps=10 format=3 uid="uid://cmoeum0oc0p2"]
[gd_scene load_steps=12 format=3 uid="uid://cmoeum0oc0p2"]
[ext_resource type="Script" path="res://sources/minigames/parakeets/parakeet.gd" id="1_p0nqk"]
[ext_resource type="PackedScene" uid="uid://cn2rw06pltyiu" path="res://sources/utils/fx/right.tscn" id="2_afmcm"]
[ext_resource type="SpriteFrames" uid="uid://wybpq21deku7" path="res://sources/minigames/parakeets/red_parakeet_animations.tres" id="2_k0dcm"]
[ext_resource type="LabelSettings" uid="uid://bguqnhiblwick" path="res://resources/themes/minigames_label_settings.tres" id="4_a2lqo"]
[ext_resource type="FontFile" uid="uid://b2l4jfylc1v41" path="res://assets/fonts/DidactGothic-Regular.ttf" id="5_k8sc4"]
[ext_resource type="PackedScene" uid="uid://dlmbxcgiv8tpr" path="res://sources/utils/fx/wrong.tscn" id="6_7mdw2"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_45x46"]
@@ -18,22 +20,25 @@
[node name="Parakeet" type="Node2D"]
script = ExtResource("1_p0nqk")
[node name="RightFX" parent="." instance=ExtResource("2_afmcm")]
offset_top = -104.0
offset_bottom = -104.0
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
scale = Vector2(2, 2)
sprite_frames = ExtResource("2_k0dcm")
animation = &"idle_front"
autoplay = "idle_front"
frame_progress = 0.973674
frame_progress = 0.444126
offset = Vector2(2.08165e-12, -82)
[node name="Label" type="Label" parent="."]
offset_left = -26.0
offset_left = -88.0
offset_top = -166.0
offset_right = 27.0
offset_right = 88.0
offset_bottom = -44.0
theme_override_fonts/font = ExtResource("5_k8sc4")
theme_override_font_sizes/font_size = 90
text = "A"
label_settings = ExtResource("4_a2lqo")
horizontal_alignment = 1
vertical_alignment = 1
@@ -49,5 +54,9 @@ theme_override_styles/hover = SubResource("StyleBoxEmpty_aup5h")
theme_override_styles/pressed = SubResource("StyleBoxEmpty_mmhru")
theme_override_styles/normal = SubResource("StyleBoxEmpty_2q8kg")
[node name="WrongFX" parent="." instance=ExtResource("6_7mdw2")]
offset_top = -104.0
offset_bottom = -104.0
[connection signal="animation_looped" from="AnimatedSprite2D" to="." method="_on_animated_sprite_2d_animation_looped"]
[connection signal="pressed" from="Button" to="." method="_on_button_pressed"]
@@ -123,8 +123,11 @@ func _on_parakeet_pressed(parakeet: Parakeet) -> void:
selected.append(parakeet)
await _turn(parakeet, false)
state = State.Selected2
_on_selected_two()
if selected[0].stimulus.Grapheme == selected[1].stimulus.Grapheme:
_correct()
else:
_wrong()
State.Idle:
state = State.Locked
selected.append(parakeet)
@@ -132,13 +135,6 @@ func _on_parakeet_pressed(parakeet: Parakeet) -> void:
state = State.Selected1
func _on_selected_two() -> void:
if selected[0].stimulus.Grapheme == selected[1].stimulus.Grapheme:
_correct()
else:
_wrong()
func _correct() -> void:
if selected[0].global_position.x > selected[1].global_position.x:
var buffer: = selected[0]
@@ -192,6 +188,7 @@ func _present_parakeets() -> void:
func _make_selected_happy() -> void:
for parakeet in selected:
parakeet.right()
parakeet.happy()
audio_player.stream = audio_streams[Audio.Happy]
audio_player.play()
@@ -201,6 +198,7 @@ func _make_selected_happy() -> void:
func _make_selected_sad() -> void:
var coroutine: = Coroutine.new()
for parakeet in selected:
parakeet.wrong()
coroutine.add_future(parakeet.sad)
await coroutine.join_all()
@@ -19,7 +19,7 @@ shader_parameter/direction = Vector2(0.015, 0)
script = ExtResource("2_x6xn5")
fly_duration = 3.0
minigame_name = 2
lesson_nb = 4
lesson_nb = 10
difficulty = 4
max_number_of_lives = 5
+3 -2
View File
@@ -124,8 +124,9 @@ func get_GP_for_lesson(lesson_nb: int, distinct: bool, only_new: bool = false, o
INNER JOIN Lessons ON Lessons.ID = GPsInLessons.LessonID AND Lessons.LessonNb " + symbol + " ?"
parameters.append(lesson_nb)
query += " WHERE Exception = 0"
if only_vowels:
query += " WHERE Type = 1"
query += " AND Type = 1"
if distinct:
query += " GROUP BY Grapheme"
@@ -224,7 +225,7 @@ FROM Words
INNER JOIN Lessons ON Lessons.ID = GPsInLessons.LessonID AND Lessons.LessonNb = ?"
parameters.append(lesson_nb)
query += " WHERE TotalCount.Count <= ? and TotalCount.Count >= ?
query += " WHERE TotalCount.Count <= ? and TotalCount.Count >= ? and Words.Exception = false
ORDER BY LessonNb, GPsCount ASC"
parameters.append(max_length)
parameters.append(min_length)