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