From 2d6134aae1fc2dca9df59101eccab23204b44c1b Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 11 Dec 2025 10:55:22 +0100 Subject: [PATCH] Version 1 --- resources/gardens/garden.gd | 51 +++++++----- resources/gardens/garden.tscn | 37 +-------- sources/gardens/gardens.gd | 141 +++++++++++++++++++++++++++------ sources/menus/brain/brain.gd | 3 +- sources/menus/brain/brain.tscn | 4 +- 5 files changed, 150 insertions(+), 86 deletions(-) diff --git a/resources/gardens/garden.gd b/resources/gardens/garden.gd index 5d56134d..959988af 100644 --- a/resources/gardens/garden.gd +++ b/resources/gardens/garden.gd @@ -11,6 +11,7 @@ enum FlowerSizes{ const FLOWER_PATH_MODEL: String = "res://assets/gardens/flowers/plant_%02d_%02d_%s.png" const BACKGROUND_PATH_MODEL: String = "res://assets/gardens/gardens/garden_%02d_open.png" +const LESSON_BUTTON_SCENE: PackedScene = preload("res://sources/lesson_screen/lesson_button.tscn") @export var garden_layout: GardenLayout: set = set_garden_layout @@ -32,16 +33,13 @@ var garden_index: int = -1 %Flower5, ] @onready var background: TextureRect = %Background -@onready var lesson_button_controls: Array[LessonButton] = [ - %Button1, - %Button2, - %Button3, - %Button4, -] func get_button_size() -> Vector2: - return lesson_button_controls[0].get_size() + var lesson_buttons: Array[LessonButton] = get_lesson_buttons() + if lesson_buttons.is_empty(): + return Vector2.ZERO + return lesson_buttons[0].get_size() func set_garden_layout(p_garden_layout: GardenLayout) -> void: @@ -53,11 +51,9 @@ func set_garden_layout(p_garden_layout: GardenLayout) -> void: func set_flowers(p_flowers: Array[GardenLayout.Flower], default_size: FlowerSizes = FlowerSizes.NOT_STARTED) -> void: flowers = p_flowers - flowers_sizes = [] for _i: int in range(flowers.size()): flowers_sizes.append(default_size) - update_flowers() @@ -69,7 +65,6 @@ func update_flowers() -> void: var flower_scene: TextureRect = flower_controls[index] var flower_size: String = FlowerSizes.keys()[flowers_sizes[index]] flower_size = flower_size.to_lower() - flower_scene.texture = load(FLOWER_PATH_MODEL % [flower.color+1, flower.type+1, flower_size]) flower_scene.size = flower_scene.get_combined_minimum_size() * 3 flower_scene.pivot_offset = Vector2(flower_scene.size.x / 2, flower_scene.size.y) @@ -77,13 +72,13 @@ func update_flowers() -> void: func set_lesson_buttons(p_lesson_buttons: Array[GardenLayout.GardenLayoutLessonButton]) -> void: - for lesson_button_control: LessonButton in lesson_button_controls: + _ensure_button_controls_count(p_lesson_buttons.size()) + var lesson_buttons: Array[LessonButton] = get_lesson_buttons() + for lesson_button_control: LessonButton in lesson_buttons: lesson_button_control.hide() for index: int in range(p_lesson_buttons.size()): - if index >= lesson_button_controls.size(): - break var lesson_button: GardenLayout.GardenLayoutLessonButton = p_lesson_buttons[index] - var lesson_button_control: LessonButton = lesson_button_controls[index] + var lesson_button_control: LessonButton = lesson_buttons[index] lesson_button_control.position = Vector2(lesson_button.position) lesson_button_control.show() lesson_button_control.pivot_offset = lesson_button_control.size / 2 @@ -94,18 +89,30 @@ func set_background(p_color: int) -> void: return background.texture = load(BACKGROUND_PATH_MODEL % [p_color+1]) color = garden_colors[p_color] - - for button: LessonButton in lesson_button_controls: + for button: LessonButton in get_lesson_buttons(): button.completed_color = color -func _ready() -> void: - set_garden_layout(garden_layout) +func _ensure_button_controls_count(target_count: int) -> void: + while get_lesson_buttons().size() < target_count: + var new_button: LessonButton = LESSON_BUTTON_SCENE.instantiate() + new_button.completed_color = color + buttons.add_child(new_button) + new_button.owner = self + + +func get_lesson_buttons() -> Array[LessonButton]: + var lesson_buttons: Array[LessonButton] = [] + for button: Node in buttons.get_children(): + if button is LessonButton: + lesson_buttons.append(button as LessonButton) + return lesson_buttons func set_lesson_label(ind: int, text: String) -> void: - assert(ind < lesson_button_controls.size()) - lesson_button_controls[ind].text = text + var lesson_buttons: Array[LessonButton] = get_lesson_buttons() + assert(ind < lesson_buttons.size()) + lesson_buttons[ind].text = text func pop_animation() -> void: @@ -113,7 +120,7 @@ func pop_animation() -> void: tween.set_parallel(true) for flower_control: TextureRect in flower_controls: tween.tween_property(flower_control, "scale", Vector2(0, 0), 0.1) - for lesson_button_control: LessonButton in lesson_button_controls: + for lesson_button_control: LessonButton in get_lesson_buttons(): tween.tween_property(lesson_button_control, "scale", Vector2(0.7, 0.7), 0.1) await tween.finished tween = create_tween() @@ -122,7 +129,7 @@ func pop_animation() -> void: tween.set_trans(Tween.TRANS_BOUNCE) for flower_control: TextureRect in flower_controls: tween.tween_property(flower_control, "scale", Vector2(1., 1.), 0.9) - for lesson_button_control: LessonButton in lesson_button_controls: + for lesson_button_control: LessonButton in get_lesson_buttons(): tween.tween_property(lesson_button_control, "scale", Vector2(1., 1.), 0.9) diff --git a/resources/gardens/garden.tscn b/resources/gardens/garden.tscn index ad6babc7..4a8ef397 100644 --- a/resources/gardens/garden.tscn +++ b/resources/gardens/garden.tscn @@ -1,24 +1,11 @@ -[gd_scene load_steps=8 format=3 uid="uid://btg3qd8eld1mm"] +[gd_scene load_steps=6 format=3 uid="uid://btg3qd8eld1mm"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Script" uid="uid://bb3nsq54104g" path="res://resources/gardens/garden_layout.gd" id="2_8g7o4"] [ext_resource type="Texture2D" uid="uid://b5kildofgmthb" path="res://assets/gardens/gardens/garden_01_open.png" id="3_p7iv3"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] [ext_resource type="Material" uid="uid://djusd5bu6780j" path="res://resources/gardens/flower_material.tres" id="5_76gol"] [ext_resource type="Texture2D" uid="uid://dg4wcuidmagd8" path="res://assets/gardens/flowers/plant_03_01_not_started.png" id="8_tdxbf"] -[sub_resource type="Resource" id="Resource_pwltf"] -script = ExtResource("2_8g7o4") -flowers_export = Array[Dictionary]([{ -"color": 2, -"position": Vector2i(500, 0), -"type": 0 -}]) -lesson_buttons_export = Array[Dictionary]([{ -"path_out_position": Vector2i(0, 0), -"position": Vector2i(0, 0) -}]) - [node name="Garden" type="Control"] custom_minimum_size = Vector2(2400, 2.08165e-12) layout_mode = 3 @@ -29,7 +16,6 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") -garden_layout = SubResource("Resource_pwltf") garden_colors = Array[Color]([Color(0.588235, 0.439216, 0.878431, 1), Color(1, 0.909804, 0.137255, 1), Color(0.929412, 0.603922, 0.709804, 1), Color(0.658824, 0.262745, 0.286275, 1), Color(0.247059, 0.196078, 0.647059, 1), Color(0.619608, 0.976471, 0.670588, 1), Color(0.764706, 0.760784, 0.768627, 1), Color(1, 0.686275, 0.341176, 1), Color(0.305882, 0.996078, 0.894118, 1), Color(0.478431, 0.819608, 1, 1), Color(0.764706, 0.760784, 0.768627, 1), Color(1, 0.909804, 0.137255, 1), Color(0.658824, 0.262745, 0.286275, 1), Color(0.929412, 0.603922, 0.709804, 1), Color(0.619608, 0.976471, 0.670588, 1), Color(0.247059, 0.196078, 0.647059, 1), Color(0.305882, 0.996078, 0.894118, 1), Color(0.478431, 0.819608, 1, 1), Color(1, 0.686275, 0.341176, 1), Color(0.588235, 0.439216, 0.878431, 1)]) [node name="Background" type="TextureRect" parent="."] @@ -53,26 +39,7 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Button1" parent="Buttons" instance=ExtResource("4_epm30")] -unique_name_in_owner = true -layout_mode = 0 -completed_color = Color(0.588235, 0.439216, 0.878431, 1) - -[node name="Button2" parent="Buttons" instance=ExtResource("4_epm30")] -unique_name_in_owner = true -visible = false -layout_mode = 0 -completed_color = Color(0.588235, 0.439216, 0.878431, 1) - -[node name="Button3" parent="Buttons" instance=ExtResource("4_epm30")] -unique_name_in_owner = true -visible = false -layout_mode = 0 -completed_color = Color(0.588235, 0.439216, 0.878431, 1) - -[node name="Button4" parent="Buttons" instance=ExtResource("4_epm30")] -unique_name_in_owner = true -visible = false +[node name="LessonButton" parent="Buttons" instance=ExtResource("4_epm30")] layout_mode = 0 completed_color = Color(0.588235, 0.439216, 0.878431, 1) diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index 66509bb5..06e857fe 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -8,6 +8,14 @@ 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 FLOWER_VFX: PackedScene = preload("res://sources/gardens/flower_particle.tscn") const GARDEN_SIZE: int = 2400 +const GARDEN_TEXTURES_NB: int = 20 +const FLOWER_TYPES_NB: int = 5 +const FLOWER_COLORS_NB: int = 20 +const FLOWER_COUNT_PER_GARDEN: int = 5 +const FLOWER_VERTICAL_BASE: float = 1100.0 +const FLOWER_VERTICAL_RANGE: float = 260.0 +const LESSON_VERTICAL_BASE: float = 780.0 +const LESSON_VERTICAL_RANGE: float = 360.0 static var transition_data: Dictionary = {} @@ -75,11 +83,8 @@ func _ready() -> void: var lesson_array: Array = lessons[element.LessonNb] lesson_array.append({grapheme = element.Grapheme, phoneme = element.Phoneme, gp_id = element.GPID}) - # Loads the layout - if not gardens_layout: - gardens_layout = load("res://resources/gardens/gardens_layout.tres") - else: - set_gardens_layout(gardens_layout) + gardens_layout = generate_gardens_layout(lessons.size()) + set_gardens_layout(gardens_layout) # Setups the lessons _set_up_lessons() @@ -122,8 +127,8 @@ func _ready() -> void: for garden_control: Garden in garden_parent.get_children(): # Handles the lesson buttons and calculate the progression of the garden - for index: int in range(garden_control.lesson_button_controls.size()): - var button: LessonButton = garden_control.lesson_button_controls[index] + for index: int in range(garden_control.get_lesson_buttons().size()): + var button: LessonButton = garden_control.get_lesson_buttons()[index] if not lesson_ind in lessons: button.set_disabled(true) continue @@ -210,7 +215,7 @@ func _ready() -> void: break if not lesson_ind in lessons: break - for index: int in range(garden_control.lesson_button_controls.size()): + for index: int in range(garden_control.get_lesson_buttons().size()): if not lesson_ind in lessons: break @@ -312,12 +317,12 @@ func _ready() -> void: var new_lesson_button: LessonButton var is_last_lesson_of_garden: bool = false for garden_control: Garden in garden_parent.get_children(): - for index: int in range(garden_control.lesson_button_controls.size()): + for index: int in range(garden_control.get_lesson_buttons().size()): if lesson_ind == max_lesson + 1: - new_lesson_button = garden_control.lesson_button_controls[index] + new_lesson_button = garden_control.get_lesson_buttons()[index] if lesson_ind == max_lesson: - last_lesson_button = garden_control.lesson_button_controls[index] - if index == garden_control.lesson_button_controls.size() -1: + last_lesson_button = garden_control.get_lesson_buttons()[index] + if index == garden_control.get_lesson_buttons().size() -1: is_last_lesson_of_garden = true if last_lesson_button and new_lesson_button: break @@ -378,24 +383,109 @@ func _ready() -> void: static func compute_lessons_distribution(total_lessons: int, garden_layouts: Array[GardenLayout]) -> Array[int]: + Log.info("Gardens: Computing lessons distribution") Log.trace("Gardens: ComputeLessonsDistribution: Parameters 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() + Log.trace("Gardens: Garden index %s can host up to %s lessons" % [str(layout_index), str(max_lessons)]) var lessons_for_garden: int = 0 if gardens_left > 0: lessons_for_garden = int(ceili(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 + lessons_for_garden = lessons_left distribution.append(lessons_for_garden) + Log.trace("Gardens: Assigning %s lessons to garden index %s (lessons left before assignment: %s)" % [str(lessons_for_garden), str(layout_index), str(lessons_left)]) lessons_left -= lessons_for_garden gardens_left -= 1 + Log.trace("Gardens: Lessons left after assignment: %s, gardens left: %s" % [str(lessons_left), str(gardens_left)]) return distribution +static func generate_gardens_layout(total_lessons: int) -> GardensLayout: + var layout: GardensLayout = GardensLayout.new() + if total_lessons <= 0: + return layout + Log.info("Gardens: Generating dynamic gardens layout") + Log.trace("Gardens: Total lessons to layout: %s" % str(total_lessons)) + var rng: RandomNumberGenerator = RandomNumberGenerator.new() + rng.seed = 13985 + Log.trace("Gardens: RNG seeded with %s" % str(rng.seed)) + var lessons_left: int = total_lessons + var garden_index: int = 0 + while lessons_left > 0 and garden_index < GARDEN_TEXTURES_NB: + var gardens_left: int = GARDEN_TEXTURES_NB - garden_index + var lessons_for_garden: int = int(ceili(float(lessons_left) / float(gardens_left))) + Log.trace("Gardens: Generating layout for garden %s with %s lessons left" % [str(garden_index), str(lessons_left)]) + layout.gardens.append(_generate_single_garden_layout(garden_index, lessons_for_garden, rng)) + lessons_left -= lessons_for_garden + Log.trace("Gardens: Lessons left after garden %s generation: %s" % [str(garden_index), str(lessons_left)]) + garden_index += 1 + Log.info("Gardens: Completed layout generation with %s gardens" % str(layout.gardens.size())) + return layout + + +static func _generate_single_garden_layout(garden_index: int, lessons_for_garden: int, rng: RandomNumberGenerator) -> GardenLayout: + Log.info("Gardens: Generating single garden layout for garden %s" % str(garden_index)) + Log.trace("Gardens: Garden %s will include %s lessons" % [str(garden_index), str(lessons_for_garden)]) + var garden_layout: GardenLayout = GardenLayout.new() + garden_layout.color = garden_index % GARDEN_TEXTURES_NB + Log.trace("Gardens: Garden %s color index set to %s" % [str(garden_index), str(garden_layout.color)]) + var lesson_positions: Array[Vector2i] = _generate_lesson_positions(lessons_for_garden, garden_index) + var lesson_buttons: Array[GardenLayout.GardenLayoutLessonButton] = [] + for lesson_index: int in range(lessons_for_garden): + var lesson_position: Vector2i = lesson_positions[lesson_index] + Log.trace("Gardens: Garden %s lesson %s position calculated at %s" % [str(garden_index), str(lesson_index), str(lesson_position)]) + var path_out: Vector2i = Vector2i.ZERO + if lesson_index + 1 < lesson_positions.size(): + var next_position: Vector2i = lesson_positions[lesson_index + 1] + var tangent: Vector2 = (next_position - lesson_position) * 0.5 + Log.trace("Gardens: Garden %s lesson %s tangent to next lesson: %s" % [str(garden_index), str(lesson_index), str(tangent)]) + path_out = Vector2i(int(tangent.x), int(tangent.y)) + else: + path_out = Vector2i(int(GARDEN_SIZE * 0.15), int((-1.0 if (garden_index % 2) == 0 else 1.0) * 60)) + Log.trace("Gardens: Garden %s last lesson %s path out set to %s" % [str(garden_index), str(lesson_index), str(path_out)]) + lesson_buttons.append(GardenLayout.GardenLayoutLessonButton.new(lesson_position, path_out)) + garden_layout.lesson_buttons = lesson_buttons + var flowers: Array[GardenLayout.Flower] = [] + var flower_spacing: float = float(GARDEN_SIZE) / float(FLOWER_COUNT_PER_GARDEN + 1) + Log.trace("Gardens: Garden %s flower spacing computed as %s" % [str(garden_index), str(flower_spacing)]) + for flower_index: int in range(FLOWER_COUNT_PER_GARDEN): + var flower_x: int = int(flower_spacing * float(flower_index + 1)) + var wave_offset: float = float(garden_index) * 0.45 + float(flower_index) * 0.65 + var flower_y: int = int(FLOWER_VERTICAL_BASE + sin(wave_offset) * FLOWER_VERTICAL_RANGE) + var flower_color: int = (garden_layout.color + flower_index) % FLOWER_COLORS_NB + var flower_type: int = (flower_index + garden_index + rng.randi_range(0, FLOWER_TYPES_NB - 1)) % FLOWER_TYPES_NB + Log.trace("Gardens: Garden %s flower %s position (%s,%s), color %s, type %s" % [str(garden_index), str(flower_index), str(flower_x), str(flower_y), str(flower_color), str(flower_type)]) + flowers.append(GardenLayout.Flower.new(flower_color, flower_type, Vector2i(flower_x, flower_y))) + garden_layout.flowers = flowers + Log.info("Gardens: Finished generating garden layout for garden %s" % str(garden_index)) + return garden_layout + + +static func _generate_lesson_positions(lessons_for_garden: int, garden_index: int) -> Array[Vector2i]: + Log.info("Gardens: Generating lesson positions for garden %s" % str(garden_index)) + var positions: Array[Vector2i] = [] + if lessons_for_garden <= 0: + Log.trace("Gardens: No lessons for garden %s, returning empty positions" % str(garden_index)) + return positions + var spacing: float = float(GARDEN_SIZE) / float(lessons_for_garden + 1) + Log.trace("Gardens: Garden %s lesson spacing calculated as %s" % [str(garden_index), str(spacing)]) + var vertical_phase: float = float(garden_index % 3) * 0.65 + Log.trace("Gardens: Garden %s vertical phase set to %s" % [str(garden_index), str(vertical_phase)]) + for lesson_index: int in range(lessons_for_garden): + var x: int = int(spacing * float(lesson_index + 1)) + var wave_position: float = float(lesson_index) / maxf(1.0, lessons_for_garden - 1) + var y: int = int(LESSON_VERTICAL_BASE + sin(vertical_phase + wave_position * PI) * LESSON_VERTICAL_RANGE) + Log.trace("Gardens: Garden %s lesson %s position -> x: %s, wave position: %s, y: %s" % [str(garden_index), str(lesson_index), str(x), str(wave_position), str(y)]) + positions.append(Vector2i(x, y)) + Log.info("Gardens: Completed lesson positions for garden %s" % str(garden_index)) + return positions + + func _process(_delta: float) -> void: locked_line.position.x = - scroll_container.scroll_horizontal unlocked_line.position.x = - scroll_container.scroll_horizontal @@ -430,7 +520,7 @@ func _open_minigames_layout(button: LessonButton, lesson_ind: int) -> void: var are_minigames_locked: bool = lesson_unlocks["games"][0] == StudentProgression.Status.Locked and lesson_unlocks["games"][1] == StudentProgression.Status.Locked and lesson_unlocks["games"][2] == StudentProgression.Status.Locked # Deactivate the mouse filters on the buttons behind the layout - for l_button: LessonButton in current_garden.lesson_button_controls: + for l_button: LessonButton in current_garden.get_lesson_buttons(): l_button.mouse_filter = Control.MOUSE_FILTER_IGNORE # Background @@ -536,7 +626,7 @@ func _close_minigames_layout() -> void: kalulu_button.show() line_particles.show() - for button: LessonButton in current_garden.lesson_button_controls: + for button: LessonButton in current_garden.get_lesson_buttons(): button.mouse_filter = Control.MOUSE_FILTER_STOP minigame_layout_1.pressed.disconnect(_on_minigame_button_pressed) @@ -553,14 +643,17 @@ func _set_up_lessons() -> void: if not lesson_ind in lessons: break garden_control.set_lesson_label(index, lessons[lesson_ind][0].grapheme as String) - garden_control.lesson_button_controls[index].pressed.connect(_on_garden_lesson_button_pressed.bind(garden_control.lesson_button_controls[index], lesson_ind)) + garden_control.get_lesson_buttons()[index].pressed.connect(_on_garden_lesson_button_pressed.bind(garden_control.get_lesson_buttons()[index], lesson_ind)) lesson_ind += 1 func set_gardens_layout(p_gardens_layout: GardensLayout) -> void: + Log.info("Gardens: Setting gardens layout") gardens_layout = p_gardens_layout + Log.trace("Gardens: Layout contains %s gardens" % str(gardens_layout.gardens.size())) add_gardens() if garden_parent: + Log.trace("Gardens: Yielding a frame to ensure garden controls are ready before setting up the path") await get_tree().process_frame set_up_path() @@ -568,26 +661,24 @@ func set_gardens_layout(p_gardens_layout: GardensLayout) -> void: func add_gardens() -> void: if not garden_parent: return - # Removes old gardens + Log.info("Gardens: Clearing existing gardens before generation") for child: Node in garden_parent.get_children(): child.free() - + Log.info("Gardens: Computing lesson distribution for new gardens") var distribution: Array[int] = compute_lessons_distribution(lessons.size(), gardens_layout.gardens) - var garden_index: int = 0 for layout_index: int in range(gardens_layout.gardens.size()): + Log.trace("Gardens: Preparing garden %s with layout index %s" % [str(garden_index), str(layout_index)]) 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 - var lessons_for_garden: int = distribution[layout_index] + Log.trace("Gardens: Garden %s will host %s lessons" % [str(garden.garden_index), str(lessons_for_garden)]) garden_layout.lesson_buttons.resize(lessons_for_garden) - # TODO : HANDLE WHEN NUMBER OF LESSONS IS MORE THAN 4 - garden.lesson_button_controls.resize(lessons_for_garden) - + Log.trace("Gardens: Assigning layout to garden %s" % str(garden.garden_index)) garden.garden_layout = garden_layout @@ -627,9 +718,9 @@ func _unlock() -> void: func _get_current_lesson_button(lesson: int) -> LessonButton: var lesson_ind: int = 1 for garden_control: Garden in garden_parent.get_children(): - for index: int in range(garden_control.lesson_button_controls.size()): + for index: int in range(garden_control.get_lesson_buttons().size()): if lesson_ind == lesson: - return garden_control.lesson_button_controls[index] + return garden_control.get_lesson_buttons()[index] lesson_ind += 1 return null diff --git a/sources/menus/brain/brain.gd b/sources/menus/brain/brain.gd index 8992bb08..74c8b571 100644 --- a/sources/menus/brain/brain.gd +++ b/sources/menus/brain/brain.gd @@ -68,7 +68,8 @@ static func _compute_lessons_distribution(total_lessons: int, garden_layouts: Ar func _ready() -> void: UserDataManager.start_synchronization_timer() - + if not gardens_layout or gardens_layout.gardens.is_empty(): + gardens_layout = Gardens.generate_gardens_layout(Database.get_lessons_count()) for index: int in range(garden_buttons.size()): garden_buttons[index].pressed.connect(_on_garden_button_pressed.bind(index)) diff --git a/sources/menus/brain/brain.tscn b/sources/menus/brain/brain.tscn index 71b32fbc..2481b6fe 100644 --- a/sources/menus/brain/brain.tscn +++ b/sources/menus/brain/brain.tscn @@ -1,9 +1,8 @@ -[gd_scene load_steps=45 format=3 uid="uid://dlqtn4yhqno8t"] +[gd_scene load_steps=44 format=3 uid="uid://dlqtn4yhqno8t"] [ext_resource type="Script" uid="uid://haysn8cxlhek" path="res://sources/menus/brain/brain.gd" id="1_1rwi2"] [ext_resource type="Texture2D" uid="uid://jlwblk7lj7vi" path="res://assets/vfx/fx_10.png" id="1_poeho"] [ext_resource type="Texture2D" uid="uid://dqjvrit8c3m6s" path="res://assets/brain_screen/blue_palm.png" id="2_6qag6"] -[ext_resource type="Resource" uid="uid://c1xe204vu7asa" path="res://resources/gardens/gardens_layout.tres" id="2_eooqa"] [ext_resource type="Texture2D" uid="uid://crba20yq2ljox" path="res://assets/brain_screen/head.png" id="2_w21ae"] [ext_resource type="Texture2D" uid="uid://bjop68a8t82p3" path="res://assets/brain_screen/bush.png" id="3_bpmau"] [ext_resource type="AudioStream" uid="uid://bwjerrgyy6dnj" path="res://assets/sfx/ui_garden_button.mp3" id="3_f5uh7"] @@ -94,7 +93,6 @@ grow_vertical = 2 script = ExtResource("1_1rwi2") locked_color = Color(0.000455221, 0.0669486, 0.35333, 1) unlocked_colors = Array[Color]([Color(0.588235, 0.439216, 0.878431, 1), Color(1, 0.909804, 0.137255, 1), Color(0.929412, 0.603922, 0.709804, 1), Color(0.658824, 0.262745, 0.286275, 1), Color(0.247059, 0.196078, 0.647059, 1), Color(0.619608, 0.976471, 0.670588, 1), Color(0.764706, 0.760784, 0.768627, 1), Color(1, 0.686275, 0.341176, 1), Color(0.305882, 0.996078, 0.894118, 1), Color(0.478431, 0.819608, 1, 1), Color(0.764706, 0.760784, 0.768627, 1), Color(1, 0.909804, 0.137255, 1), Color(0.658824, 0.262745, 0.286275, 1), Color(0.929412, 0.603922, 0.709804, 1), Color(0.619608, 0.976471, 0.670588, 1), Color(0.247059, 0.196078, 0.647059, 1), Color(0.305882, 0.996078, 0.894118, 1), Color(0.478431, 0.819608, 1, 1), Color(1, 0.686275, 0.341176, 1), Color(0.588235, 0.439216, 0.878431, 1)]) -gardens_layout = ExtResource("2_eooqa") [node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] stream = ExtResource("3_f5uh7")