feat(improvement): ✨ Add new fields/methods to the Improvement entity for tracking and applying engine improvements
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
parent
1d3bcd95b7
commit
f6495a989c
1 changed files with 5 additions and 94 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue