From f6495a989c85a44d80c3f066e5ae599376d89cf1 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Sat, 28 Mar 2026 21:31:37 -0700 Subject: [PATCH] =?UTF-8?q?feat(improvement):=20=E2=9C=A8=20Add=20new=20fi?= =?UTF-8?q?elds/methods=20to=20the=20Improvement=20entity=20for=20tracking?= =?UTF-8?q?=20and=20applying=20engine=20improvements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- engine/src/entities/improvement.gd | 99 ++---------------------------- 1 file changed, 5 insertions(+), 94 deletions(-) diff --git a/engine/src/entities/improvement.gd b/engine/src/entities/improvement.gd index 77defd61..f57254ca 100644 --- a/engine/src/entities/improvement.gd +++ b/engine/src/entities/improvement.gd @@ -11,98 +11,8 @@ extends RefCounted ## terrain_change, mana} -## Fallback improvement data when DataLoader has no entries loaded yet. -## Must stay in sync with improvements.json schema. -const FALLBACK_DATA: Dictionary = { - "farm": { - "build_turns": 5, "yields": {"food": 1}, - "valid_terrain": ["grassland", "plains", "enchanted_forest"], - "effects": {}, - }, - "mine": { - "build_turns": 6, "yields": {"production": 2}, - "valid_terrain": ["hills", "mountains"], - "effects": {}, - }, - "quarry": { - "build_turns": 7, "yields": {"production": 1}, - "valid_terrain": ["hills"], - "effects": {}, - }, - "lumber_mill": { - "build_turns": 6, "yields": {"production": 1}, - "valid_terrain": ["enchanted_forest"], - "effects": {}, - }, - "plantation": { - "build_turns": 5, "yields": {"gold": 1}, - "valid_terrain": ["grassland", "enchanted_forest"], - "effects": {}, - }, - "pasture": { - "build_turns": 5, "yields": {"food": 1, "production": 1}, - "valid_terrain": ["grassland"], - "effects": {}, - }, - "trading_post": { - "build_turns": 5, "yields": {"gold": 1}, - "valid_terrain": "any_land", - "effects": {}, - }, - "road": { - "build_turns": 3, "yields": {}, - "valid_terrain": "any_land", - "effects": {"movement_cost_modifier": -1}, - }, - "fort": { - "build_turns": 8, "yields": {}, - "valid_terrain": "any_land", - "effects": {"defense_bonus": 50}, - }, - "mana_well": { - "build_turns": 10, "yields": {}, - "valid_terrain": ["mana_node"], - "effects": {"mana": 1}, - }, - "irrigation": { - "build_turns": 5, "yields": {}, - "valid_terrain": "any_land", - "effects": {"moisture_delta": 0.05}, - }, - "drainage": { - "build_turns": 5, "yields": {}, - "valid_terrain": ["swamp", "grassland"], - "effects": {"moisture_delta": -0.05}, - }, - "windbreak": { - "build_turns": 5, "yields": {}, - "valid_terrain": "any_land", - "effects": {"wind_speed_multiplier": 0.5}, - }, - "terrace_farming": { - "build_turns": 8, "yields": {"food": 1}, - "valid_terrain": ["hills"], - "effects": {"prevents_erosion": true}, - }, - "deforestation": { - "build_turns": 3, "yields": {}, - "valid_terrain": ["enchanted_forest"], - "effects": {"terrain_change": "grassland"}, - }, - "reforestation": { - "build_turns": 10, "yields": {}, - "valid_terrain": ["grassland", "desert", "tundra"], - "effects": {"terrain_change": "enchanted_forest"}, - }, -} - - static func _get_data(improvement_type: String) -> Dictionary: - ## Try DataLoader first, fall back to built-in constants. - var data: Dictionary = DataLoader.get_improvement(improvement_type) - if not data.is_empty(): - return data - return FALLBACK_DATA.get(improvement_type, {}) + return DataLoader.get_improvement(improvement_type) static func can_build(improvement_type: String, biome_id: String) -> bool: @@ -115,7 +25,7 @@ static func can_build(improvement_type: String, biome_id: String) -> bool: # "any_land" allows any non-water terrain if valid is String and valid == "any_land": - return biome_id != "ocean" + return not BiomeRegistry.has_tag(biome_id, "is_water") if valid is Array: return biome_id in valid @@ -194,6 +104,7 @@ static func prevents_erosion(improvement_type: String) -> bool: static func get_all_types() -> Array[String]: ## Return all known improvement type IDs. var types: Array[String] = [] - for key: String in FALLBACK_DATA: - types.append(key) + for entry: Dictionary in DataLoader.get_all_improvements(): + if entry.has("id"): + types.append(entry["id"]) return types