Fix garden visuals: tint, sizing, button layout and colors
- Tint garden background #176d78 via modulate in set_background() - Fix background as 1700x1700 centered square instead of stretched - Make TextureButton self_modulate transparent so Center/Border are visible - Diagonal lesson layout from bottom-left to upper-right matching mockup - Center buttons on generated positions instead of top-left alignment - Increase garden size back to 2400 with 850px circle radius Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -95,9 +95,11 @@ func set_lesson_buttons(p_lesson_buttons: Array[GardenLayout.GardenLayoutLessonB
|
||||
for index: int in range(p_lesson_buttons.size()):
|
||||
var lesson_button: GardenLayout.GardenLayoutLessonButton = p_lesson_buttons[index]
|
||||
var lesson_button_control: LessonButton = lesson_buttons[index]
|
||||
lesson_button_control.position = Vector2(lesson_button.position)
|
||||
# Center the button on the generated position
|
||||
var half_size: Vector2 = lesson_button_control.size / 2.0
|
||||
lesson_button_control.position = Vector2(lesson_button.position) - half_size
|
||||
lesson_button_control.show()
|
||||
lesson_button_control.pivot_offset = lesson_button_control.size / 2
|
||||
lesson_button_control.pivot_offset = half_size
|
||||
|
||||
|
||||
func set_background(p_color: int) -> void:
|
||||
@@ -108,6 +110,7 @@ func set_background(p_color: int) -> void:
|
||||
background.texture = load(path)
|
||||
else:
|
||||
background.texture = load(BACKGROUND_PATH_MODEL % [1])
|
||||
background.modulate = Color("176d78")
|
||||
color = garden_colors[p_color]
|
||||
for button: LessonButton in get_lesson_buttons():
|
||||
button.completed_color = color
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"]
|
||||
|
||||
[node name="Garden" type="Control" unique_id=1950346826]
|
||||
custom_minimum_size = Vector2(1800, 2.08165e-12)
|
||||
custom_minimum_size = Vector2(2400, 2.08165e-12)
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
@@ -19,16 +19,15 @@ garden_colors = Array[Color]([Color(0.588235, 0.439216, 0.878431, 1), Color(1, 0
|
||||
|
||||
[node name="Background" type="TextureRect" parent="." unique_id=667507132]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
layout_mode = 0
|
||||
offset_left = 350.0
|
||||
offset_top = 50.0
|
||||
offset_right = 2050.0
|
||||
offset_bottom = 1750.0
|
||||
mouse_filter = 2
|
||||
texture = ExtResource("3_p7iv3")
|
||||
expand_mode = 1
|
||||
stretch_mode = 3
|
||||
stretch_mode = 0
|
||||
|
||||
[node name="Buttons" type="Control" parent="." unique_id=1943933146]
|
||||
layout_mode = 1
|
||||
@@ -45,10 +44,10 @@ completed_color = Color(0.588235, 0.439216, 0.878431, 1)
|
||||
|
||||
[node name="Jellyfish" type="TextureRect" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 1300.0
|
||||
offset_top = 80.0
|
||||
offset_right = 1500.0
|
||||
offset_bottom = 420.0
|
||||
offset_left = 1550.0
|
||||
offset_top = -30.0
|
||||
offset_right = 1830.0
|
||||
offset_bottom = 450.0
|
||||
mouse_filter = 2
|
||||
texture = ExtResource("jellyfish_tex")
|
||||
expand_mode = 1
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
[node name="BossButton" type="TextureButton" unique_id=1297494779]
|
||||
z_index = 2
|
||||
self_modulate = Color(1, 1, 1, 0)
|
||||
offset_right = 512.0
|
||||
offset_bottom = 512.0
|
||||
pivot_offset = Vector2(180, 180)
|
||||
|
||||
+15
-12
@@ -9,20 +9,19 @@ const LOOK_AND_LEARN_SCENE: PackedScene = preload("res://sources/look_and_learn/
|
||||
const BOSS_BUTTON_SCENE: PackedScene = preload("res://sources/gardens/boss_button.tscn")
|
||||
const BOSS_MINIGAME_SCENE_PATH: String = "res://sources/minigames/boss/boss_minigame.tscn"
|
||||
const FLOWER_VFX: PackedScene = preload("res://sources/gardens/flower_particle.tscn")
|
||||
const GARDEN_SIZE: int = 1800
|
||||
const GARDEN_SIZE: int = 2400
|
||||
const GARDEN_TEXTURES_NB: int = 20
|
||||
const FLOWER_TYPES_NB: int = 5
|
||||
const FLOWER_OFFSET_FROM_LESSON: float = 150.0
|
||||
const GARDEN_CENTER_Y: float = 900.0
|
||||
const GARDEN_CIRCLE_RADIUS: float = 650.0
|
||||
const LESSON_CIRCLE_RADIUS: float = 450.0
|
||||
const LESSON_START_ANGLE: float = -PI / 2.0
|
||||
const GARDEN_CIRCLE_RADIUS: float = 850.0
|
||||
const LESSON_PATH_SPREAD: float = 0.85
|
||||
const FINAL_BOSS_PADDING: float = 120.0
|
||||
const TRANSPARENCY_THRESHOLD: float = 0.05
|
||||
const POSITION_SEARCH_STEP: int = 40
|
||||
const MAX_POSITION_SEARCH_RADIUS: int = 300
|
||||
const BACK_BUTTON_HOLD_DURATION_SECONDS: float = 1.0
|
||||
const LAYOUT_VERSION: int = 2
|
||||
const LAYOUT_VERSION: int = 8
|
||||
|
||||
static var lesson_button_half_size: Vector2 = Vector2.ZERO
|
||||
static var garden_alpha_cache: Dictionary = {}
|
||||
@@ -751,14 +750,18 @@ static func _generate_lesson_positions(lessons_for_garden: int, garden_index: in
|
||||
positions.append(Vector2i(int(center.x), int(center.y)))
|
||||
Log.trace("Gardens: Garden %s single lesson placed at center" % str(garden_index))
|
||||
else:
|
||||
var angle_step: float = TAU / float(lessons_for_garden)
|
||||
var phase_offset: float = float(garden_index % 5) * 0.4
|
||||
# Diagonal path from bottom-left to upper-right through the circle,
|
||||
# matching the design mockup layout.
|
||||
var half_spread: float = GARDEN_CIRCLE_RADIUS * LESSON_PATH_SPREAD * 0.5
|
||||
for lesson_index: int in range(lessons_for_garden):
|
||||
var angle: float = LESSON_START_ANGLE + phase_offset + angle_step * float(lesson_index)
|
||||
var x_pos: int = int(center.x + cos(angle) * LESSON_CIRCLE_RADIUS)
|
||||
var y_pos: int = int(center.y + sin(angle) * LESSON_CIRCLE_RADIUS)
|
||||
Log.trace("Gardens: Garden %s lesson %s angle: %s, position: (%s, %s)" % [str(garden_index), str(lesson_index), str(angle), str(x_pos), str(y_pos)])
|
||||
positions.append(Vector2i(x_pos, y_pos))
|
||||
var t: float = float(lesson_index) / float(lessons_for_garden - 1)
|
||||
# Diagonal: bottom-left (t=0) to upper-right (t=1)
|
||||
var x_pos: float = center.x + (t - 0.5) * half_spread * 2.0
|
||||
var y_pos: float = center.y + (0.5 - t) * half_spread * 1.6
|
||||
# Slight sine curve to avoid a straight line
|
||||
x_pos += sin(t * PI) * GARDEN_CIRCLE_RADIUS * 0.08
|
||||
Log.trace("Gardens: Garden %s lesson %s t: %s, position: (%s, %s)" % [str(garden_index), str(lesson_index), str(t), str(x_pos), str(y_pos)])
|
||||
positions.append(Vector2i(int(x_pos), int(y_pos)))
|
||||
Log.info("Gardens: Completed lesson positions for garden %s" % str(garden_index))
|
||||
return positions
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
[node name="LessonButton" type="TextureButton" unique_id=530361935]
|
||||
z_index = 1
|
||||
self_modulate = Color(1, 1, 1, 0)
|
||||
offset_right = 300.0
|
||||
offset_bottom = 300.0
|
||||
pivot_offset = Vector2(150, 150)
|
||||
|
||||
Reference in New Issue
Block a user