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:
+2
-2
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -84,11 +91,6 @@ var current_lives: = 0 :
|
||||
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
|
||||
var current_number_of_hints: = 0
|
||||
@@ -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:
|
||||
|
||||
@@ -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,8 +166,12 @@ func _get_GP() -> Dictionary:
|
||||
func _get_distractor() -> Dictionary:
|
||||
if current_gp_distractors_queue.is_empty():
|
||||
_reset_distractors_queue()
|
||||
|
||||
if current_gp_distractors_queue:
|
||||
return current_gp_distractors_queue.pop_front()
|
||||
|
||||
return {}
|
||||
|
||||
|
||||
# Check if the provided GP is the expected answer
|
||||
func _is_GP_right(gp: Dictionary) -> bool:
|
||||
@@ -183,6 +188,7 @@ func _log_new_response_and_score(gp: Dictionary) -> void:
|
||||
if not is_highlighting:
|
||||
_update_score(gp.ID, 1)
|
||||
else:
|
||||
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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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,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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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,17 +89,21 @@ 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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -43,7 +43,10 @@ func stop_highlight() -> void:
|
||||
|
||||
func _set_stimulus(value: Dictionary) -> void:
|
||||
stimulus = value
|
||||
if stimulus:
|
||||
label.text = stimulus["Grapheme"]
|
||||
else:
|
||||
label.text = ""
|
||||
|
||||
|
||||
func _set_disabled(value: bool) -> void:
|
||||
|
||||
@@ -80,8 +80,12 @@ func pick_distractor() -> Dictionary:
|
||||
distractors_queue.shuffle()
|
||||
while distractors_queue.size() > distractors_queue_size:
|
||||
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
|
||||
|
||||
|
||||
@@ -29,8 +29,12 @@ var stunned: = false:
|
||||
var stimulus: Dictionary :
|
||||
set(value):
|
||||
stimulus = value
|
||||
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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,7 +123,10 @@ 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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user