Generate flowers dynamically, on top of each lesson button
This commit is contained in:
@@ -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,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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user