Clean code naming convention

This commit is contained in:
Adrien Ufferte
2025-06-08 17:52:15 +00:00
parent 822b2afde0
commit 8e90e9f5ef
37 changed files with 1155 additions and 153 deletions
+1024
View File
File diff suppressed because it is too large Load Diff
+23 -23
View File
@@ -1,16 +1,16 @@
extends Control extends Control
class_name Gardens
signal minigame_layout_opened() signal minigame_layout_opened()
# Namespace # Namespace
const LookAndLearn: = preload("res://sources/look_and_learn/look_and_learn.gd") const KALULU: = preload("res://sources/minigames/base/kalulu.gd")
const MinigameLayout: = preload("res://sources/gardens/minigame_layout.gd")
const Kalulu: = preload("res://sources/minigames/base/kalulu.gd")
const garden_scene: PackedScene = preload("res://resources/gardens/garden.tscn") const GARDEN_SCENE: PackedScene = preload("res://resources/gardens/garden.tscn")
const look_and_learn_scene: PackedScene = preload("res://sources/look_and_learn/look_and_learn.tscn") const LOOK_AND_LEARN_SCENE: PackedScene = preload("res://sources/look_and_learn/look_and_learn.tscn")
const flower_fvx: PackedScene = preload("res://sources/gardens/flower_particle.tscn") const FLOWER_FVX: PackedScene = preload("res://sources/gardens/flower_particle.tscn")
const garden_size: int = 2400 const GARDEN_SIZE: int = 2400
@export_category("Layout") @export_category("Layout")
@export var gardens_layout: GardensLayout: @export var gardens_layout: GardensLayout:
@@ -46,7 +46,7 @@ const garden_size: int = 2400
@onready var minigame_background: TextureRect = %MinigameBackground @onready var minigame_background: TextureRect = %MinigameBackground
@onready var minigame_background_center: TextureRect = %MinigameBackgroundCenter @onready var minigame_background_center: TextureRect = %MinigameBackgroundCenter
@onready var lock: Control = %Lock @onready var lock: Control = %Lock
@onready var kalulu: Kalulu = %Kalulu @onready var kalulu: KALULU = %Kalulu
@onready var kalulu_button: CanvasItem = %KaluluButton @onready var kalulu_button: CanvasItem = %KaluluButton
@onready var intro_speech: AudioStreamMP3 = Database.load_external_sound(Database.get_kalulu_speech_path("gardens_screen", "intro")) @onready var intro_speech: AudioStreamMP3 = Database.load_external_sound(Database.get_kalulu_speech_path("gardens_screen", "intro"))
@@ -238,9 +238,9 @@ func _ready() -> void:
Logger.error("Gardens: initialisation: transition_data exists but does not contains the needed current_garden_index") Logger.error("Gardens: initialisation: transition_data exists but does not contains the needed current_garden_index")
starting_garden = 0 starting_garden = 0
scroll_container.scroll_horizontal = garden_size * starting_garden scroll_container.scroll_horizontal = GARDEN_SIZE * starting_garden
@warning_ignore("integer_division") @warning_ignore("integer_division")
scroll_beginning_garden = scroll_container.scroll_horizontal / garden_size scroll_beginning_garden = scroll_container.scroll_horizontal / GARDEN_SIZE
current_garden = garden_parent.get_child(starting_garden) current_garden = garden_parent.get_child(starting_garden)
@@ -285,7 +285,7 @@ func _ready() -> void:
play_animation = true play_animation = true
if play_animation: if play_animation:
var fvfx: FlowerVFX = flower_fvx.instantiate() var fvfx: FlowerVFX = FLOWER_FVX.instantiate()
current_garden.flower_controls[flower_ind].add_child(fvfx) current_garden.flower_controls[flower_ind].add_child(fvfx)
fvfx.anchor_bottom = 0.5 fvfx.anchor_bottom = 0.5
fvfx.anchor_top = 0.5 fvfx.anchor_top = 0.5
@@ -346,14 +346,14 @@ func _ready() -> void:
# Check if we need to scroll to the next garden # Check if we need to scroll to the next garden
if is_last_lesson_of_garden: if is_last_lesson_of_garden:
@warning_ignore("integer_division") @warning_ignore("integer_division")
scroll_beginning_garden = scroll_container.scroll_horizontal / garden_size scroll_beginning_garden = scroll_container.scroll_horizontal / GARDEN_SIZE
var target_scroll: int = scroll_beginning_garden * garden_size + garden_size var target_scroll: int = scroll_beginning_garden * GARDEN_SIZE + GARDEN_SIZE
var tween: Tween = create_tween() var tween: Tween = create_tween()
tween.set_ease(Tween.EASE_IN_OUT) tween.set_ease(Tween.EASE_IN_OUT)
tween.tween_property(scroll_container, "scroll_horizontal", target_scroll, 4) tween.tween_property(scroll_container, "scroll_horizontal", target_scroll, 4)
@warning_ignore("integer_division") @warning_ignore("integer_division")
scroll_beginning_garden = target_scroll / garden_size scroll_beginning_garden = target_scroll / GARDEN_SIZE
current_garden = garden_parent.get_child(scroll_beginning_garden) current_garden = garden_parent.get_child(scroll_beginning_garden)
@@ -571,7 +571,7 @@ func add_gardens() -> void:
var current_lesson_count: int = 0 var current_lesson_count: int = 0
var garden_index: int = 0 var garden_index: int = 0
for garden_layout: GardenLayout in gardens_layout.gardens: for garden_layout: GardenLayout in gardens_layout.gardens:
var garden: Garden = garden_scene.instantiate() var garden: Garden = GARDEN_SCENE.instantiate()
garden_parent.add_child(garden) garden_parent.add_child(garden)
garden.garden_index = garden_index garden.garden_index = garden_index
garden_index += 1 garden_index += 1
@@ -649,7 +649,7 @@ func _on_lesson_button_pressed() -> void:
current_garden_index = current_garden.garden_index, current_garden_index = current_garden.garden_index,
look_and_learn_completed = false look_and_learn_completed = false
} }
get_tree().change_scene_to_packed(look_and_learn_scene) get_tree().change_scene_to_packed(LOOK_AND_LEARN_SCENE)
func _on_minigame_button_pressed(minigame_scene: PackedScene, minigame_number: int) -> void: func _on_minigame_button_pressed(minigame_scene: PackedScene, minigame_number: int) -> void:
@@ -675,21 +675,21 @@ func _on_scroll_container_gui_input(event: InputEvent) -> void:
if event.is_action_pressed("left_click"): if event.is_action_pressed("left_click"):
is_scrolling = true is_scrolling = true
@warning_ignore("integer_division") @warning_ignore("integer_division")
scroll_beginning_garden = scroll_container.scroll_horizontal / garden_size scroll_beginning_garden = scroll_container.scroll_horizontal / GARDEN_SIZE
if scroll_tween: if scroll_tween:
scroll_tween.stop() scroll_tween.stop()
scroll_tween = null scroll_tween = null
elif event.is_action_released("left_click"): elif event.is_action_released("left_click"):
is_scrolling = false is_scrolling = false
var shift_value: int = scroll_container.scroll_horizontal - scroll_beginning_garden * garden_size var shift_value: int = scroll_container.scroll_horizontal - scroll_beginning_garden * GARDEN_SIZE
var target_scroll: int = scroll_beginning_garden * garden_size var target_scroll: int = scroll_beginning_garden * GARDEN_SIZE
var is_garden_changed: bool = false var is_garden_changed: bool = false
if shift_value < - 400: if shift_value < - 400:
target_scroll -= garden_size target_scroll -= GARDEN_SIZE
is_garden_changed = true is_garden_changed = true
left_audio_stream_player.play() left_audio_stream_player.play()
elif shift_value > 400: elif shift_value > 400:
target_scroll += garden_size target_scroll += GARDEN_SIZE
is_garden_changed = true is_garden_changed = true
right_audio_stream_player.play() right_audio_stream_player.play()
scroll_tween = create_tween() scroll_tween = create_tween()
@@ -698,12 +698,12 @@ func _on_scroll_container_gui_input(event: InputEvent) -> void:
scroll_tween.tween_property(scroll_container, "scroll_horizontal", target_scroll, 1) scroll_tween.tween_property(scroll_container, "scroll_horizontal", target_scroll, 1)
if is_garden_changed: if is_garden_changed:
@warning_ignore("integer_division") @warning_ignore("integer_division")
current_garden = garden_parent.get_child(target_scroll / garden_size) current_garden = garden_parent.get_child(target_scroll / GARDEN_SIZE)
current_garden.pop_animation() current_garden.pop_animation()
await scroll_tween.finished await scroll_tween.finished
@warning_ignore("integer_division") @warning_ignore("integer_division")
scroll_beginning_garden = scroll_container.scroll_horizontal / garden_size scroll_beginning_garden = scroll_container.scroll_horizontal / GARDEN_SIZE
if is_scrolling and event is InputEventMouseMotion: if is_scrolling and event is InputEventMouseMotion:
var motion_event: InputEventMouseMotion = event var motion_event: InputEventMouseMotion = event
+14 -14
View File
@@ -1,9 +1,9 @@
extends "res://sources/gardens/gardens.gd" extends Gardens
const max_lesson_number: int = 80 const MAX_LESSON_NUMBER: int = 80
const garden_textures_nb: int = 20 const GARDEN_TEXTURES_NB: int = 20
const flower_types_nb: int = 5 const FLOWER_TYPES_NB: int = 5
const gardens_layout_resource_path: String = "res://resources/gardens/gardens_layout.tres" const GARDENS_LAYOUT_RESOURCE_PATH: String = "res://resources/gardens/gardens_layout.tres"
var dragging_element: Variant var dragging_element: Variant
@@ -15,16 +15,16 @@ func _ready() -> void:
line_particles.hide() line_particles.hide()
back_button.hide() back_button.hide()
for index: int in max_lesson_number: for index: int in MAX_LESSON_NUMBER:
lessons[index] = index lessons[index] = index
# Checks if a configuration exists # Checks if a configuration exists
if not ResourceLoader.exists(gardens_layout_resource_path): if not ResourceLoader.exists(GARDENS_LAYOUT_RESOURCE_PATH):
gardens_layout = GardensLayout.new() gardens_layout = GardensLayout.new()
gardens_layout.resource_path = gardens_layout_resource_path gardens_layout.resource_path = GARDENS_LAYOUT_RESOURCE_PATH
_init_gardens_layout() _init_gardens_layout()
gardens_layout = load(gardens_layout_resource_path) gardens_layout = load(GARDENS_LAYOUT_RESOURCE_PATH)
set_up_click_detection() set_up_click_detection()
@@ -32,7 +32,7 @@ func _init_gardens_layout() -> void:
# Empty the gardens configuration # Empty the gardens configuration
gardens_layout.gardens.clear() gardens_layout.gardens.clear()
for index: int in max_lesson_number: for index: int in MAX_LESSON_NUMBER:
var garden_layout: GardenLayout var garden_layout: GardenLayout
@@ -42,7 +42,7 @@ func _init_gardens_layout() -> void:
gardens_layout.gardens.append(garden_layout) gardens_layout.gardens.append(garden_layout)
@warning_ignore("integer_division") @warning_ignore("integer_division")
garden_layout.color = (index / 4) % garden_textures_nb garden_layout.color = (index / 4) % GARDEN_TEXTURES_NB
# Add the flowers to the garden # Add the flowers to the garden
for flower_i: int in 5: for flower_i: int in 5:
@@ -181,7 +181,7 @@ func _on_flower_gui_input(event: InputEvent, garden_control_ind: int, flower_ind
var garden: Garden = garden_parent.get_child(garden_control_ind) var garden: Garden = garden_parent.get_child(garden_control_ind)
var flower: GardenLayout.Flower = gardens_layout.gardens[garden_control_ind].flowers[flower_ind] var flower: GardenLayout.Flower = gardens_layout.gardens[garden_control_ind].flowers[flower_ind]
flower.type += 1 flower.type += 1
if flower.type >= flower_types_nb: if flower.type >= FLOWER_TYPES_NB:
flower.type = 0 flower.type = 0
garden.set_flowers(gardens_layout.gardens[garden_control_ind].flowers, Garden.FlowerSizes.LARGE) garden.set_flowers(gardens_layout.gardens[garden_control_ind].flowers, Garden.FlowerSizes.LARGE)
ResourceSaver.save(gardens_layout, gardens_layout.resource_path) ResourceSaver.save(gardens_layout, gardens_layout.resource_path)
@@ -205,7 +205,7 @@ func _on_change_flower_color_button_pressed() -> void:
var flowers: Array[GardenLayout.Flower] = gardens_layout.gardens[garden_ind].flowers var flowers: Array[GardenLayout.Flower] = gardens_layout.gardens[garden_ind].flowers
for flower: GardenLayout.Flower in flowers: for flower: GardenLayout.Flower in flowers:
flower.color += 1 flower.color += 1
if flower.color >= garden_textures_nb: if flower.color >= GARDEN_TEXTURES_NB:
flower.color = 0 flower.color = 0
gardens_layout.gardens[garden_ind].flowers = flowers gardens_layout.gardens[garden_ind].flowers = flowers
@@ -222,7 +222,7 @@ func _on_change_flower_color_button_2_pressed() -> void:
for flower: GardenLayout.Flower in flowers: for flower: GardenLayout.Flower in flowers:
flower.color -= 1 flower.color -= 1
if flower.color < 0: if flower.color < 0:
flower.color = garden_textures_nb - 1 flower.color = GARDEN_TEXTURES_NB - 1
gardens_layout.gardens[garden_ind].flowers = flowers gardens_layout.gardens[garden_ind].flowers = flowers
garden.set_flowers(flowers, Garden.FlowerSizes.LARGE) garden.set_flowers(flowers, Garden.FlowerSizes.LARGE)
+2
View File
@@ -1,4 +1,6 @@
extends TextureRect extends TextureRect
class_name MinigameLayout
signal pressed() signal pressed()
@onready var icon: TextureRect = $TextureRect @onready var icon: TextureRect = $TextureRect
@@ -3,7 +3,7 @@ class_name GPImageAndSoundDescriptions
@onready var description_container: VBoxContainer = %DescriptionsContainer @onready var description_container: VBoxContainer = %DescriptionsContainer
const description_line_scene: PackedScene = preload("res://sources/language_tool/image_and_sound_gp_description.tscn") const DESCRIPTION_LINE_SCENE: PackedScene = preload("res://sources/language_tool/image_and_sound_gp_description.tscn")
func _ready() -> void: func _ready() -> void:
@@ -11,8 +11,8 @@ func _ready() -> void:
DirAccess.make_dir_recursive_absolute(Database.base_path + Database.language + Database.look_and_learn_sounds) DirAccess.make_dir_recursive_absolute(Database.base_path + Database.language + Database.look_and_learn_sounds)
Database.db.query("SELECT * FROM GPs WHERE GPs.Exception=0") Database.db.query("SELECT * FROM GPs WHERE GPs.Exception=0")
for res in Database.db.query_result: for res: Dictionary in Database.db.query_result:
var description_line: ImageAndSoundGPDescription = description_line_scene.instantiate() var description_line: ImageAndSoundGPDescription = DESCRIPTION_LINE_SCENE.instantiate()
description_container.add_child(description_line) description_container.add_child(description_line)
description_line.set_gp(res) description_line.set_gp(res)
@@ -2,17 +2,17 @@ extends Control
@onready var description_container: VBoxContainer = %DescriptionsContainer @onready var description_container: VBoxContainer = %DescriptionsContainer
const description_line_scene: PackedScene = preload("res://sources/language_tool/video_gp_description.tscn") const DESCRIPTION_LINE_SCENE: PackedScene = preload("res://sources/language_tool/video_gp_description.tscn")
func _ready() -> void: func _ready() -> void:
var _description_line: VideoGPDescription = description_line_scene.instantiate() var _description_line: VideoGPDescription = DESCRIPTION_LINE_SCENE.instantiate()
DirAccess.make_dir_recursive_absolute(Database.base_path + Database.language + Database.look_and_learn_videos) DirAccess.make_dir_recursive_absolute(Database.base_path + Database.language + Database.look_and_learn_videos)
_description_line.queue_free() _description_line.queue_free()
Database.db.query("Select * FROM GPs WHERE GPs.Exception=0") Database.db.query("Select * FROM GPs WHERE GPs.Exception=0")
for gp in Database.db.query_result: for gp in Database.db.query_result:
var description_line: VideoGPDescription = description_line_scene.instantiate() var description_line: VideoGPDescription = DESCRIPTION_LINE_SCENE.instantiate()
description_container.add_child(description_line) description_container.add_child(description_line)
description_line.set_gp(gp) description_line.set_gp(gp)
@@ -91,7 +91,7 @@ func set_gp(value: Dictionary) -> void:
func _on_image_upload_button_pressed() -> void: func _on_image_upload_button_pressed() -> void:
if not gp.is_empty(): if not gp.is_empty():
file_dialog.filters = [] file_dialog.filters = []
file_dialog.add_filter("*" + Database.image_extension, "Images") file_dialog.add_filter("*" + Database.IMAGE_EXTENSION, "Images")
for connection in file_dialog.file_selected.get_connections(): for connection in file_dialog.file_selected.get_connections():
connection["signal"].disconnect(connection["callable"]) connection["signal"].disconnect(connection["callable"])
@@ -104,7 +104,7 @@ func _on_image_upload_button_pressed() -> void:
func _on_sound_upload_button_pressed() -> void: func _on_sound_upload_button_pressed() -> void:
if not gp.is_empty(): if not gp.is_empty():
file_dialog.filters = [] file_dialog.filters = []
file_dialog.add_filter("*" + Database.sound_extension, "Sounds") file_dialog.add_filter("*" + Database.SOUND_EXTENSION, "Sounds")
for connection in file_dialog.file_selected.get_connections(): for connection in file_dialog.file_selected.get_connections():
connection["signal"].disconnect(connection["callable"]) connection["signal"].disconnect(connection["callable"])
+6 -6
View File
@@ -6,8 +6,8 @@ func _ready() -> void:
DirAccess.make_dir_recursive_absolute(Database.base_path + Database.language + Database.language_sounds) DirAccess.make_dir_recursive_absolute(Database.base_path + Database.language + Database.language_sounds)
Database.db.query("SELECT * FROM GPs WHERE GPs.Exception=0") Database.db.query("SELECT * FROM GPs WHERE GPs.Exception=0")
for res in Database.db.query_result: for res: Dictionary in Database.db.query_result:
var description_line: ImageAndSoundGPDescription = description_line_scene.instantiate() var description_line: ImageAndSoundGPDescription = DESCRIPTION_LINE_SCENE.instantiate()
description_line.get_sound_path = Database.get_gp_sound_path description_line.get_sound_path = Database.get_gp_sound_path
description_line.get_image_path = get_empty_string description_line.get_image_path = get_empty_string
description_line.hide_image_part() description_line.hide_image_part()
@@ -17,8 +17,8 @@ func _ready() -> void:
description_line.image_upload_button.hide() description_line.image_upload_button.hide()
Database.db.query("SELECT * FROM Syllables WHERE Syllables.Exception=0") Database.db.query("SELECT * FROM Syllables WHERE Syllables.Exception=0")
for res in Database.db.query_result: for res: Dictionary in Database.db.query_result:
var description_line: = description_line_scene.instantiate() var description_line: ImageAndSoundGPDescription = DESCRIPTION_LINE_SCENE.instantiate()
description_line.get_sound_path = Database.get_syllable_sound_path description_line.get_sound_path = Database.get_syllable_sound_path
description_line.get_image_path = get_empty_string description_line.get_image_path = get_empty_string
description_line.hide_image_part() description_line.hide_image_part()
@@ -29,8 +29,8 @@ func _ready() -> void:
description_line.image_upload_button.hide() description_line.image_upload_button.hide()
Database.db.query("SELECT * FROM Words WHERE Words.Exception=0") Database.db.query("SELECT * FROM Words WHERE Words.Exception=0")
for res in Database.db.query_result: for res: Dictionary in Database.db.query_result:
var description_line: = description_line_scene.instantiate() var description_line: ImageAndSoundGPDescription = DESCRIPTION_LINE_SCENE.instantiate()
description_line.get_sound_path = Database.get_word_sound_path description_line.get_sound_path = Database.get_word_sound_path
description_line.get_image_path = get_empty_string description_line.get_image_path = get_empty_string
description_line.hide_image_part() description_line.hide_image_part()
+1 -1
View File
@@ -17,7 +17,7 @@ extends PanelContainer
func _ready() -> void: func _ready() -> void:
file_dialog.access = FileDialog.ACCESS_FILESYSTEM file_dialog.access = FileDialog.ACCESS_FILESYSTEM
file_dialog.filters = [] file_dialog.filters = []
file_dialog.add_filter("*" + Database.sound_extension, "Sounds") file_dialog.add_filter("*" + Database.SOUND_EXTENSION, "Sounds")
_set_speech_name(speech_name) _set_speech_name(speech_name)
_set_speech_description(speech_description) _set_speech_description(speech_description)
+2 -11
View File
@@ -1,15 +1,6 @@
extends Control extends Control
const LessonExerciceContainer: = preload("res://sources/language_tool/lesson_exercises_container.gd") const LESSON_EXERCICE_CONTAINER_SCENE: = preload("res://sources/language_tool/lesson_exercises_container.tscn")
const lesson_exercice_container_scene: = preload("res://sources/language_tool/lesson_exercises_container.tscn")
const exercise_types: Array[String] = [
"Syllable",
"Pairing",
"Words",
"Sentences",
"Boss"
]
@onready var lessons_container: VBoxContainer = %LessonsContainer @onready var lessons_container: VBoxContainer = %LessonsContainer
@@ -51,7 +42,7 @@ func _ready() -> void:
var sentences_by_lesson: = Database.get_sentences_by_lessons() var sentences_by_lesson: = Database.get_sentences_by_lessons()
Database.db.query("Select * FROM Lessons") Database.db.query("Select * FROM Lessons")
for e in Database.db.query_result: for e in Database.db.query_result:
var container: LessonExerciceContainer = lesson_exercice_container_scene.instantiate() var container: LessonExerciceContainer = LESSON_EXERCICE_CONTAINER_SCENE.instantiate()
lessons_container.add_child(container) lessons_container.add_child(container)
container.sentences_by_lesson = sentences_by_lesson container.sentences_by_lesson = sentences_by_lesson
container.lesson_number = e.LessonNb container.lesson_number = e.LessonNb
@@ -1,4 +1,5 @@
extends PanelContainer extends PanelContainer
class_name LessonExerciceContainer
@export var lesson_number: = -1: @export var lesson_number: = -1:
set = _set_lesson_number set = _set_lesson_number
+22 -22
View File
@@ -1,7 +1,7 @@
extends Control extends Control
const base_path: String = "user://language_resources/" const BASE_PATH: String = "user://language_resources/"
const save_file_path: String = "user://prof_tool_save.tres" const SAVE_FILE_PATH: String = "user://prof_tool_save.tres"
var save_file: ProfToolSave var save_file: ProfToolSave
@onready var language_select_button: OptionButton = %LanguageSelectButton @onready var language_select_button: OptionButton = %LanguageSelectButton
@@ -18,11 +18,11 @@ func _ready() -> void:
MusicManager.stop() MusicManager.stop()
Database.load_additional_word_list() Database.load_additional_word_list()
_update_add_word_list_button() _update_add_word_list_button()
if not ResourceLoader.exists(save_file_path): if not ResourceLoader.exists(SAVE_FILE_PATH):
save_file = ProfToolSave.new() save_file = ProfToolSave.new()
save_file.resource_path = save_file_path save_file.resource_path = SAVE_FILE_PATH
ResourceSaver.save(save_file, save_file_path) ResourceSaver.save(save_file, SAVE_FILE_PATH)
save_file = load(save_file_path) save_file = load(SAVE_FILE_PATH)
_display_available_languages() _display_available_languages()
tab_container.current_tab = Globals.main_menu_selected_tab tab_container.current_tab = Globals.main_menu_selected_tab
tab_container.tab_changed.connect(_on_tab_container_tab_changed) tab_container.tab_changed.connect(_on_tab_container_tab_changed)
@@ -97,11 +97,11 @@ func _on_exercises_button_pressed() -> void:
func _on_export_filename_selected(filename: String) -> void: func _on_export_filename_selected(filename: String) -> void:
var version_file: FileAccess = FileAccess.open(base_path.path_join(Database.language).path_join("version.txt"), FileAccess.WRITE) var version_file: FileAccess = FileAccess.open(BASE_PATH.path_join(Database.language).path_join("version.txt"), FileAccess.WRITE)
version_file.store_line(Time.get_datetime_string_from_system(true, false)) version_file.store_line(Time.get_datetime_string_from_system(true, false))
version_file.close() version_file.close()
var summary_file: FileAccess = FileAccess.open(base_path.path_join(Database.language).path_join("summary.txt"), FileAccess.WRITE) var summary_file: FileAccess = FileAccess.open(BASE_PATH.path_join(Database.language).path_join("summary.txt"), FileAccess.WRITE)
var sentences_by_lesson: Dictionary = Database.get_sentences_by_lessons() var sentences_by_lesson: Dictionary = Database.get_sentences_by_lessons()
for index: int in Database.get_lessons_count(): for index: int in Database.get_lessons_count():
@@ -132,7 +132,7 @@ func _on_export_filename_selected(filename: String) -> void:
_create_sentence_csv() _create_sentence_csv()
var folder_zipper: FolderZipper = FolderZipper.new() var folder_zipper: FolderZipper = FolderZipper.new()
folder_zipper.compress(base_path.path_join(Database.language), filename) folder_zipper.compress(BASE_PATH.path_join(Database.language), filename)
#region Database integrity check #region Database integrity check
var integrity_checking: bool = false var integrity_checking: bool = false
@@ -327,13 +327,13 @@ func file_exists_case_sensitive(path: String) -> Dictionary:
func _get_available_languages() -> Array[String]: func _get_available_languages() -> Array[String]:
var available_languages: Array[String] = [] var available_languages: Array[String] = []
var dir: DirAccess = DirAccess.open(base_path) var dir: DirAccess = DirAccess.open(BASE_PATH)
if dir: if dir:
dir.list_dir_begin() dir.list_dir_begin()
var file_name: String = dir.get_next() var file_name: String = dir.get_next()
while file_name != "": while file_name != "":
if dir.current_is_dir(): if dir.current_is_dir():
if FileAccess.file_exists(base_path.path_join(file_name).path_join("language.db")): if FileAccess.file_exists(BASE_PATH.path_join(file_name).path_join("language.db")):
available_languages.append(file_name) available_languages.append(file_name)
file_name = dir.get_next() file_name = dir.get_next()
return available_languages return available_languages
@@ -346,7 +346,7 @@ func _on_language_select_button_item_selected(index: int) -> void:
return return
save_file.selected_language = language_select_button.get_item_text(index) save_file.selected_language = language_select_button.get_item_text(index)
ResourceSaver.save(save_file, save_file_path) ResourceSaver.save(save_file, SAVE_FILE_PATH)
Database.language = save_file.selected_language Database.language = save_file.selected_language
@@ -354,14 +354,14 @@ func _on_validate_language_pressed() -> void:
if not line_edit.text: if not line_edit.text:
return return
DirAccess.make_dir_recursive_absolute(base_path.path_join(line_edit.text)) DirAccess.make_dir_recursive_absolute(BASE_PATH.path_join(line_edit.text))
var file: FileAccess = FileAccess.open("res://model_database.db", FileAccess.READ) var file: FileAccess = FileAccess.open("res://model_database.db", FileAccess.READ)
var dest: FileAccess = FileAccess.open(base_path.path_join(line_edit.text).path_join("language.db"), FileAccess.WRITE) var dest: FileAccess = FileAccess.open(BASE_PATH.path_join(line_edit.text).path_join("language.db"), FileAccess.WRITE)
dest.store_buffer(file.get_buffer(file.get_length())) dest.store_buffer(file.get_buffer(file.get_length()))
file.close() file.close()
dest.close() dest.close()
save_file.selected_language = line_edit.text save_file.selected_language = line_edit.text
ResourceSaver.save(save_file, save_file_path) ResourceSaver.save(save_file, SAVE_FILE_PATH)
get_tree().reload_current_scene() get_tree().reload_current_scene()
@@ -437,12 +437,12 @@ func _on_export_button_pressed() -> void:
func _language_data_selected(file_path: String) -> void: func _language_data_selected(file_path: String) -> void:
if FileAccess.file_exists(file_path): if FileAccess.file_exists(file_path):
var folder_unzipper: FolderUnzipper = FolderUnzipper.new() var folder_unzipper: FolderUnzipper = FolderUnzipper.new()
folder_unzipper.extract(file_path, base_path, false) folder_unzipper.extract(file_path, BASE_PATH, false)
get_tree().reload_current_scene() get_tree().reload_current_scene()
func _create_GP_csv() -> void: func _create_GP_csv() -> void:
var gp_list_file: FileAccess = FileAccess.open(base_path.path_join(Database.language).path_join("gp_list.csv"), FileAccess.WRITE) var gp_list_file: FileAccess = FileAccess.open(BASE_PATH.path_join(Database.language).path_join("gp_list.csv"), FileAccess.WRITE)
gp_list_file.store_csv_line(["Grapheme", "Phoneme", "Type", "Exception"]) gp_list_file.store_csv_line(["Grapheme", "Phoneme", "Type", "Exception"])
var query: String = "Select * FROM GPs ORDER BY GPs.Grapheme" var query: String = "Select * FROM GPs ORDER BY GPs.Grapheme"
Database.db.query(query) Database.db.query(query)
@@ -453,7 +453,7 @@ func _create_GP_csv() -> void:
func _create_words_csv() -> void: func _create_words_csv() -> void:
var gp_list_file: FileAccess = FileAccess.open(base_path.path_join(Database.language).path_join("words_list.csv"), FileAccess.WRITE) var gp_list_file: FileAccess = FileAccess.open(BASE_PATH.path_join(Database.language).path_join("words_list.csv"), FileAccess.WRITE)
gp_list_file.store_csv_line(["ORTHO", "GPMATCH", "LESSON", "READING", "WRITING"]) gp_list_file.store_csv_line(["ORTHO", "GPMATCH", "LESSON", "READING", "WRITING"])
var query: String = "SELECT Words.ID as WordId, Word, group_concat(Grapheme, ' ') as Graphemes, group_concat(Phoneme, ' ') as Phonemes, group_concat(GPs.ID, ' ') as GPIDs, Words.Exception, Reading, Writing var query: String = "SELECT Words.ID as WordId, Word, group_concat(Grapheme, ' ') as Graphemes, group_concat(Phoneme, ' ') as Phonemes, group_concat(GPs.ID, ' ') as GPIDs, Words.Exception, Reading, Writing
FROM Words FROM Words
@@ -482,7 +482,7 @@ func _create_words_csv() -> void:
func _create_syllable_csv() -> void: func _create_syllable_csv() -> void:
var gp_list_file: FileAccess = FileAccess.open(base_path.path_join(Database.language).path_join("syllables_list.csv"), FileAccess.WRITE) var gp_list_file: FileAccess = FileAccess.open(BASE_PATH.path_join(Database.language).path_join("syllables_list.csv"), FileAccess.WRITE)
gp_list_file.store_csv_line(["ORTHO", "GPMATCH", "LESSON", "READING", "WRITING"]) gp_list_file.store_csv_line(["ORTHO", "GPMATCH", "LESSON", "READING", "WRITING"])
var query: String = "SELECT Syllables.ID as SyllableId, Syllable, group_concat(Grapheme, ' ') as Graphemes, group_concat(Phoneme, ' ') as Phonemes, group_concat(GPs.ID, ' ') as GPIDs, Syllables.Exception, Reading, Writing var query: String = "SELECT Syllables.ID as SyllableId, Syllable, group_concat(Grapheme, ' ') as Graphemes, group_concat(Phoneme, ' ') as Phonemes, group_concat(GPs.ID, ' ') as GPIDs, Syllables.Exception, Reading, Writing
FROM Syllables FROM Syllables
@@ -511,7 +511,7 @@ func _create_syllable_csv() -> void:
func _create_sentence_csv() -> void: func _create_sentence_csv() -> void:
var gp_list_file: FileAccess = FileAccess.open(base_path.path_join(Database.language).path_join("sentences_list.csv"), FileAccess.WRITE) var gp_list_file: FileAccess = FileAccess.open(BASE_PATH.path_join(Database.language).path_join("sentences_list.csv"), FileAccess.WRITE)
gp_list_file.store_csv_line(["Sentence", "Lesson"]) gp_list_file.store_csv_line(["Sentence", "Lesson"])
var query: String = "SELECT Sentences.ID as SentenceId, Sentence, group_concat(Word, ' ') as Words, group_concat(Word, ' ') as Words, group_concat(Words.ID, ' ') as WordIDs, Sentences.Exception var query: String = "SELECT Sentences.ID as SentenceId, Sentence, group_concat(Word, ' ') as Words, group_concat(Word, ' ') as Words, group_concat(Words.ID, ' ') as WordIDs, Sentences.Exception
FROM Sentences FROM Sentences
@@ -533,7 +533,7 @@ func _create_sentence_csv() -> void:
func _on_open_folder_button_pressed() -> void: func _on_open_folder_button_pressed() -> void:
OS.shell_show_in_file_manager(ProjectSettings.globalize_path(base_path)) OS.shell_show_in_file_manager(ProjectSettings.globalize_path(BASE_PATH))
func _on_tab_container_tab_changed(tab: int) -> void: func _on_tab_container_tab_changed(tab: int) -> void:
@@ -542,7 +542,7 @@ func _on_tab_container_tab_changed(tab: int) -> void:
#region Book Generation #region Book Generation
func create_book() -> void: func create_book() -> void:
var lang_path: String = base_path.path_join(Database.language) var lang_path: String = BASE_PATH.path_join(Database.language)
var file_names: Dictionary[String, String] = { var file_names: Dictionary[String, String] = {
"word": "words_list.csv", "word": "words_list.csv",
"syllable": "syllables_list.csv", "syllable": "syllables_list.csv",
@@ -2,7 +2,7 @@ extends "res://sources/language_tool/word_list_element.gd"
signal not_found(text: String) signal not_found(text: String)
const word_list_element_scene: = preload("res://sources/language_tool/word_list_element.tscn") const WORD_LIST_ELEMENT_SCENE: = preload("res://sources/language_tool/word_list_element.tscn")
var words_not_founds: PackedStringArray var words_not_founds: PackedStringArray
@@ -28,7 +28,7 @@ func _add_from_additional_word_list(new_text: String) -> int:
var new_text_clean: = new_text.to_lower() var new_text_clean: = new_text.to_lower()
for chara in punc: for chara in punc:
new_text_clean = new_text_clean.replace(chara, " ") new_text_clean = new_text_clean.replace(chara, " ")
var word_list_element: WordListElement = word_list_element_scene.instantiate() var word_list_element: WordListElement = WORD_LIST_ELEMENT_SCENE.instantiate()
var all_found: = true var all_found: = true
words_not_founds.clear() words_not_founds.clear()
var word_ids: Array[int] = [] var word_ids: Array[int] = []
+2 -2
View File
@@ -8,7 +8,7 @@ extends Control
@onready var save_ok: TextureRect = %SaveOk @onready var save_ok: TextureRect = %SaveOk
@onready var copy_from: MenuButton = %CopyFrom @onready var copy_from: MenuButton = %CopyFrom
const extension: String = ".csv" const EXTENSION: String = ".csv"
var letters: Array[String] = [] var letters: Array[String] = []
var current_letter: int = -1 var current_letter: int = -1
@@ -92,7 +92,7 @@ func upper_path(letter: String) -> String:
func real_path(path: String) -> String: func real_path(path: String) -> String:
return Database.base_path.path_join(Database.language).path_join(Database.tracing_data_folder).path_join(path) + extension return Database.base_path.path_join(Database.language).path_join(Database.tracing_data_folder).path_join(path) + EXTENSION
func _on_save_button_pressed() -> void: func _on_save_button_pressed() -> void:
@@ -39,7 +39,7 @@ func set_gp(p_gp: Dictionary) -> void:
func _on_video_upload_button_pressed() -> void: func _on_video_upload_button_pressed() -> void:
if not gp.is_empty(): if not gp.is_empty():
file_dialog.filters = [] file_dialog.filters = []
file_dialog.add_filter("*" + Database.video_extension, "Videos") file_dialog.add_filter("*" + Database.VIDEO_EXTENSION, "Videos")
for connection in file_dialog.file_selected.get_connections(): for connection in file_dialog.file_selected.get_connections():
connection["signal"].disconnect(connection["callable"]) connection["signal"].disconnect(connection["callable"])
+4 -4
View File
@@ -6,8 +6,8 @@ signal new_GP_asked(i: int)
signal validated() signal validated()
signal GPs_updated() signal GPs_updated()
const gp_list_button_scene: PackedScene = preload("res://sources/language_tool/gp_list_button.tscn") const GP_LIST_BUTTON_SCENE: PackedScene = preload("res://sources/language_tool/gp_list_button.tscn")
const plus_button_scene: PackedScene = preload("res://sources/language_tool/plus_button.tscn") const PLUS_BUTTON_SCENE: PackedScene = preload("res://sources/language_tool/plus_button.tscn")
@export var table: String = "Words" @export var table: String = "Words"
@export var table_graph_column: String = "Word" @export var table_graph_column: String = "Word"
@@ -101,14 +101,14 @@ func set_graphemes_edit(p_gp_ids: Array[int]) -> void:
func add_gp_list_button(gp_id: int, ind_gp_id: int) -> void: func add_gp_list_button(gp_id: int, ind_gp_id: int) -> void:
var gp_list_button: GPListButton = gp_list_button_scene.instantiate() var gp_list_button: GPListButton = GP_LIST_BUTTON_SCENE.instantiate()
gp_list_button.set_gp_list(sub_elements_list) gp_list_button.set_gp_list(sub_elements_list)
graphemes_edit_container.add_child(gp_list_button) graphemes_edit_container.add_child(gp_list_button)
graphemes_edit_container.move_child(gp_list_button, 2 * ind_gp_id) graphemes_edit_container.move_child(gp_list_button, 2 * ind_gp_id)
gp_list_button.select_id(gp_id) gp_list_button.select_id(gp_id)
gp_list_button.gp_selected.connect(_on_gp_list_button_selected.bind(gp_list_button)) gp_list_button.gp_selected.connect(_on_gp_list_button_selected.bind(gp_list_button))
gp_list_button.new_selected.connect(_on_gp_list_button_new_selected.bind(gp_list_button)) gp_list_button.new_selected.connect(_on_gp_list_button_new_selected.bind(gp_list_button))
var plus_button: PlusButton = plus_button_scene.instantiate() var plus_button: PlusButton = PLUS_BUTTON_SCENE.instantiate()
plus_button.size = Vector2(50, 50) plus_button.size = Vector2(50, 50)
graphemes_edit_container.add_child(plus_button) graphemes_edit_container.add_child(plus_button)
graphemes_edit_container.move_child(plus_button, 2 * ind_gp_id + 1) graphemes_edit_container.move_child(plus_button, 2 * ind_gp_id + 1)
+1 -4
View File
@@ -3,9 +3,6 @@ class_name LetterSegment
signal finished() signal finished()
const TracingPath: = preload("res://sources/look_and_learn/tracing_path.gd")
const TracingEffects: = preload("res://sources/look_and_learn/tracing_effects.gd")
@onready var tracing_path: TracingPath = $TracingPath @onready var tracing_path: TracingPath = $TracingPath
@onready var tracing_effects: TracingEffects = $TracingEffects @onready var tracing_effects: TracingEffects = $TracingEffects
@onready var complete_particles: GPUParticles2D = $CompleteParticles @onready var complete_particles: GPUParticles2D = $CompleteParticles
@@ -43,7 +40,7 @@ func _process(_delta: float) -> void:
tracing_effects.stop() tracing_effects.stop()
func _on_CompleteAudioStreamPlayer_finished() -> void: func _on_complete_audio_stream_player_finished() -> void:
tracing_effects.stop() tracing_effects.stop()
complete_particles.emitting = false complete_particles.emitting = false
finished.emit() finished.emit()
+1 -1
View File
@@ -52,4 +52,4 @@ stream = ExtResource("5")
[connection signal="demo_finished" from="TracingPath" to="." method="_on_tracing_path_demo_finished"] [connection signal="demo_finished" from="TracingPath" to="." method="_on_tracing_path_demo_finished"]
[connection signal="finished" from="TracingPath" to="." method="_on_tracing_path_finished"] [connection signal="finished" from="TracingPath" to="." method="_on_tracing_path_finished"]
[connection signal="finished" from="CompleteAudioStreamPlayer" to="." method="_on_CompleteAudioStreamPlayer_finished"] [connection signal="finished" from="CompleteAudioStreamPlayer" to="." method="_on_complete_audio_stream_player_finished"]
+1 -3
View File
@@ -1,7 +1,5 @@
extends Control extends Control
class_name LookAndLearn
const Gardens: = preload("res://sources/gardens/gardens.gd")
const TracingManager: = preload("res://sources/look_and_learn/tracing_manager.gd")
@export var lesson_nb: int = 1 @export var lesson_nb: int = 1
@export var current_button_pressed: int = 0 @export var current_button_pressed: int = 0
+2 -1
View File
@@ -1,4 +1,5 @@
extends Node2D extends Node2D
class_name TracingEffects
@onready var particles_effect: GPUParticles2D = $TracingParticles @onready var particles_effect: GPUParticles2D = $TracingParticles
@onready var sound_effect: AudioStreamPlayer = $TracingAudioStreamPlayer @onready var sound_effect: AudioStreamPlayer = $TracingAudioStreamPlayer
@@ -30,6 +31,6 @@ func stop() -> void:
timer.start() timer.start()
func _on_Timer_timeout() -> void: func _on_timer_timeout() -> void:
particles_effect.emitting = false particles_effect.emitting = false
sound_effect.playing = false sound_effect.playing = false
+2 -2
View File
@@ -36,10 +36,10 @@ script = ExtResource("1_fwn5n")
[node name="TracingParticles" type="GPUParticles2D" parent="."] [node name="TracingParticles" type="GPUParticles2D" parent="."]
emitting = false emitting = false
amount = 12 amount = 12
process_material = SubResource("ParticleProcessMaterial_me6ey")
texture = ExtResource("2_3m3v8") texture = ExtResource("2_3m3v8")
lifetime = 0.5 lifetime = 0.5
visibility_rect = Rect2(-500, -500, 1000, 1000) visibility_rect = Rect2(-500, -500, 1000, 1000)
process_material = SubResource("ParticleProcessMaterial_me6ey")
[node name="TracingAudioStreamPlayer" type="AudioStreamPlayer" parent="."] [node name="TracingAudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("3_m2u4r") stream = ExtResource("3_m2u4r")
@@ -49,4 +49,4 @@ volume_db = -5.0
wait_time = 0.2 wait_time = 0.2
one_shot = true one_shot = true
[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"] [connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"]
+5 -5
View File
@@ -1,16 +1,16 @@
extends Control extends Control
class_name TracingManager
signal finished() signal finished()
const letter_segment_class: PackedScene = preload("res://sources/look_and_learn/letter_segment.tscn") const LETTER_SEGMENT_CLASS: PackedScene = preload("res://sources/look_and_learn/letter_segment.tscn")
@export var label_settings: LabelSettings @export var label_settings: LabelSettings
@onready var lower_labels: HBoxContainer = %LowerLabels @onready var lower_labels: HBoxContainer = %LowerLabels
@onready var upper_labels: HBoxContainer = %UpperLabels @onready var upper_labels: HBoxContainer = %UpperLabels
const tracing_data_folder: String = "tracing_data/" const EXTENSION: String = ".csv"
const extension: String = ".csv"
func _process(_delta: float) -> void: func _process(_delta: float) -> void:
place_segments(upper_labels.get_children()) place_segments(upper_labels.get_children())
@@ -65,7 +65,7 @@ func setup_tracing(letter: String, letter_tracings: Array, parent: Control, lowe
parent.add_child(label) parent.add_child(label)
for points: Array in letter_tracings: for points: Array in letter_tracings:
var segment: LetterSegment = letter_segment_class.instantiate() var segment: LetterSegment = LETTER_SEGMENT_CLASS.instantiate()
label.add_child(segment) label.add_child(segment)
segment.setup(points) segment.setup(points)
@@ -108,7 +108,7 @@ func _upper_path(letter: String) -> String:
func _real_path(path: String) -> String: func _real_path(path: String) -> String:
return Database.base_path.path_join(Database.language).path_join(Database.tracing_data_folder).path_join(path) + extension return Database.base_path.path_join(Database.language).path_join(Database.tracing_data_folder).path_join(path) + EXTENSION
+1
View File
@@ -1,4 +1,5 @@
extends Path2D extends Path2D
class_name TracingPath
signal finished signal finished
signal demo_finished signal demo_finished
+2 -3
View File
@@ -1,8 +1,7 @@
@tool @tool
extends Control extends Control
const Gardens: = preload("res://sources/gardens/gardens.gd") const GARDENS_SCENE: PackedScene = preload("res://sources/gardens/gardens.tscn")
const gardens_scene: PackedScene = preload("res://sources/gardens/gardens.tscn")
const Kalulu: = preload("res://sources/minigames/base/kalulu.gd") const Kalulu: = preload("res://sources/minigames/base/kalulu.gd")
@export var locked_color: Color @export var locked_color: Color
@@ -126,7 +125,7 @@ func _on_garden_button_pressed(button_number: int) -> void:
audio_stream_player.play() audio_stream_player.play()
await OpeningCurtain.close() await OpeningCurtain.close()
var gardens: Gardens = gardens_scene.instantiate() var gardens: Gardens = GARDENS_SCENE.instantiate()
gardens.starting_garden = button_number gardens.starting_garden = button_number
get_tree().root.add_child(gardens) get_tree().root.add_child(gardens)
get_tree().current_scene = gardens get_tree().current_scene = gardens
-3
View File
@@ -2,9 +2,6 @@
extends Control extends Control
class_name Minigame class_name Minigame
const Gardens: = preload("res://sources/gardens/gardens.gd")
const Fireworks: = preload("res://sources/utils/fx/fireworks.gd")
enum Type { enum Type {
jellyfish, jellyfish,
crabs, crabs,
+1
View File
@@ -1,4 +1,5 @@
extends Area2D extends Area2D
class_name Berry
signal pressed(gp: Dictionary) signal pressed(gp: Dictionary)
+6 -9
View File
@@ -1,15 +1,12 @@
@tool @tool
extends Node2D extends Node2D
class_name Branch
signal branch_pressed() signal branch_pressed()
signal berry_pressed(gp: Dictionary) signal berry_pressed(gp: Dictionary)
# Namespace const LEAF_SCENE: PackedScene = preload("res://sources/minigames/caterpillar/leaf.tscn")
const Leaf: = preload("res://sources/minigames/caterpillar/leaf.gd") const BERRY_SCENE: PackedScene = preload("res://sources/minigames/caterpillar/berry.tscn")
const Berry: = preload("res://sources/minigames/caterpillar/berry.gd")
const leaf_scene: PackedScene = preload("res://sources/minigames/caterpillar/leaf.tscn")
const berry_scene: PackedScene = preload("res://sources/minigames/caterpillar/berry.tscn")
@onready var leaves: Node2D = $Leaves @onready var leaves: Node2D = $Leaves
@onready var berries: Node2D = $Berries @onready var berries: Node2D = $Berries
@@ -32,7 +29,7 @@ func _ready() -> void:
# Adds some leaves from start # Adds some leaves from start
var pos: float = -leaves.position.x + velocity * randf_range(0,2) var pos: float = -leaves.position.x + velocity * randf_range(0,2)
while pos < 0: while pos < 0:
var leaf: Leaf = leaf_scene.instantiate() var leaf: Leaf = LEAF_SCENE.instantiate()
leaves.add_child(leaf) leaves.add_child(leaf)
leaf.position.x = pos leaf.position.x = pos
pos = pos + velocity * randf_range(2, 5) pos = pos + velocity * randf_range(2, 5)
@@ -54,7 +51,7 @@ func _process(delta: float) -> void:
func spawn_berry(gp: Dictionary, is_distractor: bool) -> void: func spawn_berry(gp: Dictionary, is_distractor: bool) -> void:
var berry : Berry = berry_scene.instantiate() var berry : Berry = BERRY_SCENE.instantiate()
berries.add_child(berry) berries.add_child(berry)
berry.gp = gp berry.gp = gp
berry.is_distractor = is_distractor berry.is_distractor = is_distractor
@@ -76,7 +73,7 @@ func _on_button_pressed() -> void:
func _on_leaf_timer_timeout() -> void: func _on_leaf_timer_timeout() -> void:
var leaf: Leaf = leaf_scene.instantiate() var leaf: Leaf = LEAF_SCENE.instantiate()
leaves.add_child(leaf) leaves.add_child(leaf)
leaf_timer.wait_time = randf_range(2.0, 5.0) leaf_timer.wait_time = randf_range(2.0, 5.0)
+1 -5
View File
@@ -1,10 +1,6 @@
@tool @tool
extends Node2D extends Node2D
class_name Caterpillar
# Namespace
const CaterpillarHead: = preload("res://sources/minigames/caterpillar/caterpillar_head.gd")
const CaterpillarBody: = preload("res://sources/minigames/caterpillar/caterpillar_body.gd")
const Berry: = preload("res://sources/minigames/caterpillar/berry.gd")
signal berry_eaten(berry: Berry) signal berry_eaten(berry: Berry)
@@ -1,5 +1,6 @@
@tool @tool
extends Node2D extends Node2D
class_name CaterpillarBody
@onready var animated_sprite: AnimatedSprite2D = $AnimatedSprite2D @onready var animated_sprite: AnimatedSprite2D = $AnimatedSprite2D
@onready var label: Label = $Label @onready var label: Label = $Label
@@ -1,5 +1,6 @@
@tool @tool
extends Node2D extends Node2D
class_name CaterpillarHead
@onready var animated_sprite: AnimatedSprite2D = $AnimatedSprite2D @onready var animated_sprite: AnimatedSprite2D = $AnimatedSprite2D
@onready var audio_stream_player: CaterpillarAudioStreamPlayer = $CaterpillarAudioStreamPlayer @onready var audio_stream_player: CaterpillarAudioStreamPlayer = $CaterpillarAudioStreamPlayer
@@ -1,12 +1,7 @@
@tool @tool
extends WordsMinigame extends WordsMinigame
# Namespace const BRANCH_SCENE: PackedScene = preload("res://sources/minigames/caterpillar/branch.tscn")
const Caterpillar: = preload("res://sources/minigames/caterpillar/caterpillar.gd")
const Branch: = preload("res://sources/minigames/caterpillar/branch.gd")
const Berry: = preload("res://sources/minigames/caterpillar/berry.gd")
const branch_scene: PackedScene = preload("res://sources/minigames/caterpillar/branch.tscn")
class DifficultySettings: class DifficultySettings:
@@ -50,7 +45,7 @@ func _setup_minigame() -> void:
# Spawn the right amount of branches # Spawn the right amount of branches
var branch_size: float = branches_zone.size.y / (settings.branches + 1) var branch_size: float = branches_zone.size.y / (settings.branches + 1)
for index: int in settings.branches: for index: int in settings.branches:
var branch: Branch = branch_scene.instantiate() var branch: Branch = BRANCH_SCENE.instantiate()
branch.velocity = settings.velocity branch.velocity = settings.velocity
branches_zone.add_child(branch) branches_zone.add_child(branch)
branch.set_position(Vector2(0, branch_size * (index+1))) branch.set_position(Vector2(0, branch_size * (index+1)))
+1
View File
@@ -1,4 +1,5 @@
extends Node2D extends Node2D
class_name Leaf
func _on_visible_on_screen_notifier_2d_screen_exited() -> void: func _on_visible_on_screen_notifier_2d_screen_exited() -> void:
queue_free() queue_free()
-2
View File
@@ -1,8 +1,6 @@
extends Node2D extends Node2D
class_name Penguin class_name Penguin
# Namespace
const Snowball: = preload("res://sources/minigames/penguin/snowball.gd")
const snowball_scene: PackedScene = preload("res://sources/minigames/penguin/snowball.tscn") const snowball_scene: PackedScene = preload("res://sources/minigames/penguin/snowball.tscn")
+1
View File
@@ -1,4 +1,5 @@
extends Path2D extends Path2D
class_name Snowball
@onready var path_follow: PathFollow2D = $PathFollow2D @onready var path_follow: PathFollow2D = $PathFollow2D
@onready var sprite: Sprite2D = $PathFollow2D/Sprite2D @onready var sprite: Sprite2D = $PathFollow2D/Sprite2D
+10 -11
View File
@@ -15,11 +15,10 @@ const look_and_learn_sounds: String = "/look_and_learn/sounds/"
const look_and_learn_videos: String = "/look_and_learn/video/" const look_and_learn_videos: String = "/look_and_learn/video/"
const language_sounds: String = "/language_sounds/" const language_sounds: String = "/language_sounds/"
const kalulu_folder: String = "/kalulu/" const kalulu_folder: String = "/kalulu/"
const tracing_data_folder: String = "tracing_data/"
const additional_word_list_path: String = "word_list.csv" const additional_word_list_path: String = "word_list.csv"
const video_extension: String = ".ogv" const VIDEO_EXTENSION: String = ".ogv"
const image_extension: String = ".png" const IMAGE_EXTENSION: String = ".png"
const sound_extension: String = ".mp3" const SOUND_EXTENSION: String = ".mp3"
var language: String: var language: String:
set(value): set(value):
@@ -539,31 +538,31 @@ func get_gp_name(gp: Dictionary) -> String:
func get_gp_look_and_learn_image_path(gp: Dictionary) -> String: func get_gp_look_and_learn_image_path(gp: Dictionary) -> String:
return base_path + language + look_and_learn_images + get_gp_name(gp) + image_extension return base_path + language + look_and_learn_images + get_gp_name(gp) + IMAGE_EXTENSION
func get_gp_look_and_learn_sound_path(gp: Dictionary) -> String: func get_gp_look_and_learn_sound_path(gp: Dictionary) -> String:
return base_path + language + look_and_learn_sounds + get_gp_name(gp) + sound_extension return base_path + language + look_and_learn_sounds + get_gp_name(gp) + SOUND_EXTENSION
func get_gp_look_and_learn_video_path(gp: Dictionary) -> String: func get_gp_look_and_learn_video_path(gp: Dictionary) -> String:
return base_path + language + look_and_learn_videos + get_gp_name(gp) + video_extension return base_path + language + look_and_learn_videos + get_gp_name(gp) + VIDEO_EXTENSION
func get_gp_sound_path(gp: Dictionary) -> String: func get_gp_sound_path(gp: Dictionary) -> String:
return base_path + language + language_sounds + Database.get_gp_name(gp) + sound_extension return base_path + language + language_sounds + Database.get_gp_name(gp) + SOUND_EXTENSION
func get_syllable_sound_path(syllable: Dictionary) -> String: func get_syllable_sound_path(syllable: Dictionary) -> String:
return base_path + language + language_sounds + syllable.Grapheme + sound_extension return base_path + language + language_sounds + syllable.Grapheme + SOUND_EXTENSION
func get_word_sound_path(word: Dictionary) -> String: func get_word_sound_path(word: Dictionary) -> String:
return base_path + language + language_sounds + word.Word + sound_extension return base_path + language + language_sounds + word.Word + SOUND_EXTENSION
func get_kalulu_speech_path(speech_category: String, speech_name: String) -> String: func get_kalulu_speech_path(speech_category: String, speech_name: String) -> String:
return base_path + language + language_sounds + kalulu_folder + speech_category + "_" + speech_name + sound_extension return base_path + language + language_sounds + kalulu_folder + speech_category + "_" + speech_name + SOUND_EXTENSION
func load_external_sound(path: String) -> AudioStreamMP3: func load_external_sound(path: String) -> AudioStreamMP3:
+3 -3
View File
@@ -1,9 +1,9 @@
extends Node extends Node
class_name Fireworks
signal finished() signal finished()
const Rocket: = preload("res://sources/utils/fx/rocket.gd") const ROKCET_SCENE: PackedScene = preload("res://sources/utils/fx/rocket.tscn")
const rocket_scene: PackedScene = preload("res://sources/utils/fx/rocket.tscn")
@export var number_of_rockets: int = 25 @export var number_of_rockets: int = 25
@@ -30,7 +30,7 @@ func _on_FireDelayTimer_timeout() -> void:
var start_node: Node2D = starts[randi() % starts.size()] var start_node: Node2D = starts[randi() % starts.size()]
var end_node: Node2D = ends[randi() % ends.size()] var end_node: Node2D = ends[randi() % ends.size()]
var rocket: Rocket = rocket_scene.instantiate() var rocket: Rocket = ROKCET_SCENE.instantiate()
rockets.add_child(rocket) rockets.add_child(rocket)
rocket.start(start_node.global_position, end_node.global_position + Vector2(randf_range(-25.0, 25.0), randf_range(-25.0, 25.0))) rocket.start(start_node.global_position, end_node.global_position + Vector2(randf_range(-25.0, 25.0), randf_range(-25.0, 25.0)))
+1
View File
@@ -1,4 +1,5 @@
extends Path2D extends Path2D
class_name Rocket
@export var spread_angle: float = PI/8.0 @export var spread_angle: float = PI/8.0
@export var segments: int = 5 @export var segments: int = 5