Merge pull request #64 from Excello-Recherche-Education/dynamic-number-of-lessons
Dynamic allocation of lessons by garden to fill the brain
This commit is contained in:
+29
-15
@@ -385,6 +385,25 @@ func _ready() -> void:
|
||||
|
||||
|
||||
|
||||
static func compute_lessons_distribution(total_lessons: int, garden_layouts: Array[GardenLayout]) -> Array[int]:
|
||||
Logger.debug("compute_lessons_distribution: total_lessons = %s, garden_layouts count = %s" % [str(total_lessons), str(garden_layouts.size())])
|
||||
var distribution: Array[int] = []
|
||||
var lessons_left: int = total_lessons
|
||||
var gardens_left: int = garden_layouts.size()
|
||||
for layout_index: int in range(garden_layouts.size()):
|
||||
var max_lessons: int = garden_layouts[layout_index].lesson_buttons.size()
|
||||
var lessons_for_garden: int = 0
|
||||
if gardens_left > 0:
|
||||
lessons_for_garden = int(ceil(float(lessons_left) / float(gardens_left)))
|
||||
lessons_for_garden = min(lessons_for_garden, max_lessons)
|
||||
if lessons_for_garden > lessons_left:
|
||||
lessons_for_garden = lessons_left
|
||||
distribution.append(lessons_for_garden)
|
||||
lessons_left -= lessons_for_garden
|
||||
gardens_left -= 1
|
||||
return distribution
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
locked_line.position.x = - scroll_container.scroll_horizontal
|
||||
unlocked_line.position.x = - scroll_container.scroll_horizontal
|
||||
@@ -537,7 +556,8 @@ func _set_up_lessons() -> void:
|
||||
var lesson_ind: int = 1
|
||||
for garden_ind: int in range(garden_parent.get_child_count()):
|
||||
var garden_control: Garden = garden_parent.get_child(garden_ind)
|
||||
for index: int in range(garden_control.lesson_button_controls.size()):
|
||||
var button_count: int = garden_control.garden_layout.lesson_buttons.size()
|
||||
for index: int in range(button_count):
|
||||
if not lesson_ind in lessons:
|
||||
break
|
||||
garden_control.set_lesson_label(index, lessons[lesson_ind][0].grapheme as String)
|
||||
@@ -561,26 +581,20 @@ func add_gardens() -> void:
|
||||
for child: Node in garden_parent.get_children():
|
||||
child.free()
|
||||
|
||||
# Adds the gardens needed from the layout configuration
|
||||
var current_lesson_count: int = 0
|
||||
var distribution: Array[int] = compute_lessons_distribution(lessons.size(), gardens_layout.gardens)
|
||||
|
||||
var garden_index: int = 0
|
||||
for garden_layout: GardenLayout in gardens_layout.gardens:
|
||||
for layout_index: int in range(gardens_layout.gardens.size()):
|
||||
var garden_layout: GardenLayout = gardens_layout.gardens[layout_index]
|
||||
var garden: Garden = GARDEN_SCENE.instantiate()
|
||||
garden_parent.add_child(garden)
|
||||
garden.garden_index = garden_index
|
||||
garden_index += 1
|
||||
|
||||
for index: int in range(garden_layout.lesson_buttons.size()):
|
||||
if current_lesson_count >= lessons.size():
|
||||
garden_layout.lesson_buttons.resize(index)
|
||||
break
|
||||
current_lesson_count += 1
|
||||
|
||||
|
||||
var lessons_for_garden: int = distribution[layout_index]
|
||||
garden_layout.lesson_buttons.resize(lessons_for_garden)
|
||||
|
||||
garden.garden_layout = garden_layout
|
||||
|
||||
# Don't add empty gardens
|
||||
if current_lesson_count >= lessons.size():
|
||||
break
|
||||
|
||||
|
||||
func set_up_path() -> void:
|
||||
|
||||
@@ -65,25 +65,29 @@ const KALULU := preload("res://sources/minigames/base/kalulu.gd")
|
||||
|
||||
@onready var help_speech: AudioStream = Database.load_external_sound(Database.get_kalulu_speech_path("brain_screen", "help"))
|
||||
|
||||
static func _compute_lessons_distribution(total_lessons: int, garden_layouts: Array[GardenLayout]) -> Array[int]:
|
||||
return Gardens.compute_lessons_distribution(total_lessons, garden_layouts)
|
||||
|
||||
func _ready() -> void:
|
||||
UserDataManager.start_synchronization_timer()
|
||||
|
||||
for index: int in range(garden_buttons.size()):
|
||||
garden_buttons[index].pressed.connect(_on_garden_button_pressed.bind(index))
|
||||
|
||||
|
||||
var lesson_ind: int = 1
|
||||
var distribution: Array[int] = _compute_lessons_distribution(Database.get_lessons_count(), gardens_layout.gardens)
|
||||
for index: int in range(gardens_layout.gardens.size()):
|
||||
var can_emit: bool = true
|
||||
if UserDataManager.student_progression.unlocks.has(lesson_ind) and UserDataManager.student_progression.unlocks[lesson_ind]["look_and_learn"] != StudentProgression.Status.Locked:
|
||||
if distribution[index] > 0 and UserDataManager.student_progression.unlocks.has(lesson_ind) and UserDataManager.student_progression.unlocks[lesson_ind]["look_and_learn"] != StudentProgression.Status.Locked:
|
||||
garden_buttons[index].disabled = false
|
||||
garden_buttons[index].self_modulate = unlocked_colors[index]
|
||||
else:
|
||||
garden_buttons[index].disabled = true
|
||||
garden_buttons[index].self_modulate = locked_color
|
||||
can_emit = false
|
||||
|
||||
|
||||
var emitting: bool = false
|
||||
for _index2: int in range(gardens_layout.gardens[index].lesson_buttons.size()):
|
||||
for _index2: int in range(distribution[index]):
|
||||
if can_emit and not emitting:
|
||||
emitting = false
|
||||
for game: StudentProgression.Status in UserDataManager.student_progression.unlocks[lesson_ind]["games"]:
|
||||
@@ -93,8 +97,7 @@ func _ready() -> void:
|
||||
lesson_ind += 1
|
||||
|
||||
particles[index].emitting = emitting
|
||||
|
||||
|
||||
|
||||
await OpeningCurtain.open()
|
||||
|
||||
if not UserDataManager.is_speech_played("brain"):
|
||||
|
||||
Reference in New Issue
Block a user