feat(@projects/@magic-civilization): update tile info panel layout

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
Natalie 2026-04-16 22:03:18 -07:00
parent d9d9e2a662
commit 44e6fcd664
2 changed files with 100 additions and 12 deletions

View file

@ -8,7 +8,7 @@ anchor_left = 0.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_top = -64.0
offset_top = -84.0
grow_horizontal = 2
grow_vertical = 0
script = ExtResource("1")
@ -16,59 +16,81 @@ script = ExtResource("1")
[node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 2
theme_override_constants/margin_left = 12
theme_override_constants/margin_top = 6
theme_override_constants/margin_top = 5
theme_override_constants/margin_right = 12
theme_override_constants/margin_bottom = 6
theme_override_constants/margin_bottom = 5
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"]
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
layout_mode = 2
theme_override_constants/separation = 3
[node name="Row1" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_constants/separation = 20
[node name="TerrainName" type="Label" parent="MarginContainer/HBoxContainer"]
[node name="BiomeName" type="Label" parent="MarginContainer/VBoxContainer/Row1"]
unique_name_in_owner = true
layout_mode = 2
custom_minimum_size = Vector2(120, 0)
theme_override_font_sizes/font_size = 15
[node name="MoveCost" type="Label" parent="MarginContainer/HBoxContainer"]
[node name="MoveCost" type="Label" parent="MarginContainer/VBoxContainer/Row1"]
unique_name_in_owner = true
layout_mode = 2
theme_override_font_sizes/font_size = 13
theme_override_colors/font_color = Color(0.7, 0.7, 0.7, 1)
[node name="DefenseBonus" type="Label" parent="MarginContainer/HBoxContainer"]
[node name="DefenseBonus" type="Label" parent="MarginContainer/VBoxContainer/Row1"]
unique_name_in_owner = true
layout_mode = 2
theme_override_font_sizes/font_size = 13
theme_override_colors/font_color = Color(0.5, 0.8, 0.5, 1)
[node name="FoodYield" type="Label" parent="MarginContainer/HBoxContainer"]
[node name="FoodYield" type="Label" parent="MarginContainer/VBoxContainer/Row1"]
unique_name_in_owner = true
layout_mode = 2
theme_override_font_sizes/font_size = 13
theme_override_colors/font_color = Color(0.5, 0.85, 0.4, 1)
[node name="ProductionYield" type="Label" parent="MarginContainer/HBoxContainer"]
[node name="ProductionYield" type="Label" parent="MarginContainer/VBoxContainer/Row1"]
unique_name_in_owner = true
layout_mode = 2
theme_override_font_sizes/font_size = 13
theme_override_colors/font_color = Color(0.85, 0.5, 0.2, 1)
[node name="TradeYield" type="Label" parent="MarginContainer/HBoxContainer"]
[node name="TradeYield" type="Label" parent="MarginContainer/VBoxContainer/Row1"]
unique_name_in_owner = true
layout_mode = 2
theme_override_font_sizes/font_size = 13
theme_override_colors/font_color = Color(0.9, 0.82, 0.2, 1)
[node name="ResourceLabel" type="Label" parent="MarginContainer/HBoxContainer"]
[node name="ResourceLabel" type="Label" parent="MarginContainer/VBoxContainer/Row1"]
unique_name_in_owner = true
layout_mode = 2
theme_override_font_sizes/font_size = 13
theme_override_colors/font_color = Color(0.8, 0.65, 0.9, 1)
visible = false
[node name="PositionLabel" type="Label" parent="MarginContainer/HBoxContainer"]
[node name="PositionLabel" type="Label" parent="MarginContainer/VBoxContainer/Row1"]
unique_name_in_owner = true
layout_mode = 2
theme_override_font_sizes/font_size = 11
theme_override_colors/font_color = Color(0.4, 0.4, 0.4, 1)
[node name="Row2" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_constants/separation = 20
[node name="CollectiblesLabel" type="Label" parent="MarginContainer/VBoxContainer/Row2"]
unique_name_in_owner = true
layout_mode = 2
theme_override_font_sizes/font_size = 12
theme_override_colors/font_color = Color(0.75, 0.82, 0.6, 1)
visible = false
[node name="WorkedYieldLabel" type="Label" parent="MarginContainer/VBoxContainer/Row2"]
unique_name_in_owner = true
layout_mode = 2
theme_override_font_sizes/font_size = 12
theme_override_colors/font_color = Color(0.6, 0.78, 0.9, 1)
visible = false

View file

@ -0,0 +1,66 @@
extends GutTest
## Tests for tile_info_panel collectibles display logic.
## Uses the static build_collectibles_text helper — no scene tree required.
const TileInfoPanelScript: GDScript = preload(
"res://engine/scenes/world_map/tile_info_panel.gd"
)
func before_all() -> void:
DataLoader.load_theme("age-of-dwarves")
DataLoader.load_world("earth")
ThemeVocabulary.load_vocabulary("age-of-dwarves")
func test_empty_entries_returns_empty_string() -> void:
var result: String = TileInfoPanelScript.build_collectibles_text([])
assert_eq(result, "", "empty entry array must produce empty string")
func test_single_collectible_appears_in_text() -> void:
var entries: Array = [{"resource": "wild_game", "base_quantity": 3, "quality_range": [1, 3]}]
var result: String = TileInfoPanelScript.build_collectibles_text(entries)
assert_true(
"Wild Game" in result or "wild_game" in result,
"collectibles text must contain the resource name"
)
func test_multiple_collectibles_all_appear() -> void:
var entries: Array = [
{"resource": "iron_ore", "base_quantity": 2, "quality_range": [1, 4]},
{"resource": "bog_mushrooms", "base_quantity": 3, "quality_range": [1, 3]},
]
var result: String = TileInfoPanelScript.build_collectibles_text(entries)
assert_true(
"Iron Ore" in result or "iron_ore" in result,
"iron_ore must appear in collectibles text"
)
assert_true(
"Bog Mushrooms" in result or "bog_mushrooms" in result,
"bog_mushrooms must appear in collectibles text"
)
func test_entry_missing_resource_key_is_skipped() -> void:
var entries: Array = [
{"base_quantity": 3},
{"resource": "grain_fields", "base_quantity": 4},
]
var result: String = TileInfoPanelScript.build_collectibles_text(entries)
assert_true(
"Grain Fields" in result or "grain_fields" in result,
"valid entry must appear despite malformed sibling"
)
func test_dataloader_get_biome_collectibles_returns_array() -> void:
var entries: Array = DataLoader.get_biome_collectibles("temperate_forest")
assert_true(entries is Array, "get_biome_collectibles must return an Array")
assert_gt(entries.size(), 0, "temperate_forest must have collectibles loaded")
func test_unknown_biome_returns_empty_array() -> void:
var entries: Array = DataLoader.get_biome_collectibles("void_realm_does_not_exist")
assert_eq(entries.size(), 0, "unknown biome must return empty array")