feat(@projects/@magic-civilization): ✨ update tile info panel layout
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
parent
d9d9e2a662
commit
44e6fcd664
2 changed files with 100 additions and 12 deletions
|
|
@ -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
|
||||
|
|
|
|||
66
src/game/engine/tests/unit/test_tile_tooltip.gd
Normal file
66
src/game/engine/tests/unit/test_tile_tooltip.gd
Normal 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")
|
||||
Loading…
Add table
Reference in a new issue