Generate flowers dynamically, on top of each lesson button

This commit is contained in:
Adrien Ufferte
2025-12-12 10:36:05 +01:00
parent 2d6134aae1
commit 8b88b1a148
3 changed files with 36 additions and 68 deletions
+25 -7
View File
@@ -12,6 +12,8 @@ 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")
const FLOWER_MATERIAL_PATH: String = "res://resources/gardens/flower_material.tres"
const FLOWER_Z_INDEX: int = 1
@export var garden_layout: GardenLayout:
set = set_garden_layout
@@ -25,13 +27,9 @@ var max_progression: float = 0.0
var garden_index: int = -1
@onready var buttons: Control = $Buttons
@onready var flower_controls: Array[TextureRect] = [
%Flower1,
%Flower2,
%Flower3,
%Flower4,
%Flower5,
]
@onready var flowers_container: Control = $Flowers
@onready var flower_material: Material = load(FLOWER_MATERIAL_PATH)
@onready var flower_controls: Array[TextureRect] = []
@onready var background: TextureRect = %Background
@@ -54,6 +52,7 @@ func set_flowers(p_flowers: Array[GardenLayout.Flower], default_size: FlowerSize
flowers_sizes = []
for _i: int in range(flowers.size()):
flowers_sizes.append(default_size)
_ensure_flower_controls_count(flowers.size())
update_flowers()
@@ -101,6 +100,25 @@ func _ensure_button_controls_count(target_count: int) -> void:
new_button.owner = self
func _ensure_flower_controls_count(target_count: int) -> void:
for child: Node in flowers_container.get_children():
child.queue_free()
flower_controls.clear()
for _i: int in range(target_count):
var new_flower: TextureRect = _create_flower_control()
flowers_container.add_child(new_flower)
new_flower.owner = self
flower_controls.append(new_flower)
func _create_flower_control() -> TextureRect:
var flower_control: TextureRect = TextureRect.new()
flower_control.material = flower_material
flower_control.z_index = FLOWER_Z_INDEX
flower_control.mouse_filter = Control.MOUSE_FILTER_IGNORE
return flower_control
func get_lesson_buttons() -> Array[LessonButton]:
var lesson_buttons: Array[LessonButton] = []
for button: Node in buttons.get_children():
+1 -46
View File
@@ -1,10 +1,8 @@
[gd_scene load_steps=6 format=3 uid="uid://btg3qd8eld1mm"]
[gd_scene load_steps=4 format=3 uid="uid://btg3qd8eld1mm"]
[ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"]
[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"]
[node name="Garden" type="Control"]
custom_minimum_size = Vector2(2400, 2.08165e-12)
@@ -51,46 +49,3 @@ anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
[node name="Flower1" type="TextureRect" parent="Flowers"]
unique_name_in_owner = true
z_index = 1
material = ExtResource("5_76gol")
layout_mode = 0
offset_left = 426.5
offset_top = -90.0
offset_right = 573.5
pivot_offset = Vector2(73.5, 90)
texture = ExtResource("8_tdxbf")
[node name="Flower2" type="TextureRect" parent="Flowers"]
unique_name_in_owner = true
z_index = 1
material = ExtResource("5_76gol")
layout_mode = 0
offset_right = 40.0
offset_bottom = 40.0
[node name="Flower3" type="TextureRect" parent="Flowers"]
unique_name_in_owner = true
z_index = 1
material = ExtResource("5_76gol")
layout_mode = 0
offset_right = 40.0
offset_bottom = 40.0
[node name="Flower4" type="TextureRect" parent="Flowers"]
unique_name_in_owner = true
z_index = 1
material = ExtResource("5_76gol")
layout_mode = 0
offset_right = 40.0
offset_bottom = 40.0
[node name="Flower5" type="TextureRect" parent="Flowers"]
unique_name_in_owner = true
z_index = 1
material = ExtResource("5_76gol")
layout_mode = 0
offset_right = 40.0
offset_bottom = 40.0
+10 -15
View File
@@ -11,11 +11,9 @@ 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
const FLOWER_OFFSET_FROM_LESSON: float = 200.0
const LESSON_VERTICAL_BASE: float = 920.0
const LESSON_VERTICAL_RANGE: float = 300.0
static var transition_data: Dictionary = {}
@@ -451,16 +449,13 @@ static func _generate_single_garden_layout(garden_index: int, lessons_for_garden
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)))
for lesson_index: int in range(lesson_positions.size()):
var flower_position: Vector2i = lesson_positions[lesson_index]
flower_position.y = max(0, flower_position.y - int(FLOWER_OFFSET_FROM_LESSON))
var flower_color: int = (garden_layout.color + lesson_index) % FLOWER_COLORS_NB
var flower_type: int = (lesson_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(lesson_index), str(flower_position.x), str(flower_position.y), str(flower_color), str(flower_type)])
flowers.append(GardenLayout.Flower.new(flower_color, flower_type, flower_position))
garden_layout.flowers = flowers
Log.info("Gardens: Finished generating garden layout for garden %s" % str(garden_index))
return garden_layout