diff --git a/src/game/engine/src/modules/ecology/ecosystem_simplified.gd b/src/game/engine/src/modules/ecology/ecosystem_simplified.gd index 78759a76..d9240188 100644 --- a/src/game/engine/src/modules/ecology/ecosystem_simplified.gd +++ b/src/game/engine/src/modules/ecology/ecosystem_simplified.gd @@ -190,7 +190,11 @@ static func _score_to_tier(score: float) -> int: return 1 -static func recompute_biomes(tiles: Array, w: int, h: int, last_canopy: PackedFloat32Array, last_temp: PackedFloat32Array, last_moisture: PackedFloat32Array) -> void: +static func recompute_biomes( + tiles: Array, w: int, h: int, + last_canopy: PackedFloat32Array, last_temp: PackedFloat32Array, + last_moisture: PackedFloat32Array, +) -> void: ## Reclassify biomes where canopy/temp/moisture changed significantly. ## Updates last_* arrays in-place for next turn's comparison. var n: int = tiles.size() @@ -214,7 +218,11 @@ static func recompute_biomes(tiles: Array, w: int, h: int, last_canopy: PackedFl last_canopy[i] = tile.canopy_cover last_temp[i] = tile.temperature last_moisture[i] = tile.moisture - if d_canopy > BIOME_CANOPY_DELTA or d_temp > BIOME_TEMP_DELTA or d_moisture > BIOME_MOISTURE_DELTA: + if ( + d_canopy > BIOME_CANOPY_DELTA + or d_temp > BIOME_TEMP_DELTA + or d_moisture > BIOME_MOISTURE_DELTA + ): # Inline classifier call — will be transpiled to classifyBiome(tile) var new_biome: String = _classify_biome(tile) if new_biome != tile.biome_id: diff --git a/src/game/engine/src/modules/ecology/fauna.gd b/src/game/engine/src/modules/ecology/fauna.gd index 2013ffa3..0e098c56 100644 --- a/src/game/engine/src/modules/ecology/fauna.gd +++ b/src/game/engine/src/modules/ecology/fauna.gd @@ -4,11 +4,12 @@ extends RefCounted ## fish reproduction, reef growth, habitat suitability, carrying capacity, migration. const HexUtilsScript = preload("res://engine/src/map/hex_utils.gd") +const LandFaunaModelScript = preload("res://engine/src/models/world/land_fauna.gd") +var rng: RandomNumberGenerator = RandomNumberGenerator.new() var _biome_regions: Dictionary = {} var _regions_dirty: bool = true -var rng: RandomNumberGenerator = RandomNumberGenerator.new() -var _lp: Variant = null # cached LandFaunaModel for current turn +var _lp: LandFaunaModelScript = null # cached LandFaunaModel for current turn func invalidate_region_cache() -> void: @@ -341,7 +342,12 @@ func _find_target( elif not ct.is_water() and ct.biome_id != ob: continue if _is_whale(sp) and mp != null: - if not ct.is_water() or ct.depth_from_coast < mp.whale_min_depth or ct.depth_from_coast > mp.whale_max_depth or ct.quality < mp.whale_min_quality: + if ( + not ct.is_water() + or ct.depth_from_coast < mp.whale_min_depth + or ct.depth_from_coast > mp.whale_max_depth + or ct.quality < mp.whale_min_quality + ): continue var count: int = ecology_db.get_creature_count_on_tile(c.x, c.y) var cap: float = sp.get("carrying_capacity", 10.0) @@ -478,7 +484,11 @@ func _rebuild_biome_regions(game_map: Variant) -> void: # -- Helpers -- func _is_whale(sp: Dictionary) -> bool: - return sp.get("size", "") == "huge" and sp.get("habitat", "") == "aquatic" and sp.get("diet", "") == "carnivore" + return ( + sp.get("size", "") == "huge" + and sp.get("habitat", "") == "aquatic" + and sp.get("diet", "") == "carnivore" + ) func _perturbation() -> float: var p: float = _lp.perturbation if _lp != null else 0.05 diff --git a/src/game/engine/src/modules/ecology/flora.gd b/src/game/engine/src/modules/ecology/flora.gd index 6232b57a..e15abeb5 100644 --- a/src/game/engine/src/modules/ecology/flora.gd +++ b/src/game/engine/src/modules/ecology/flora.gd @@ -28,7 +28,8 @@ var _des: Dictionary = {} var _params_loaded: bool = false var _regrowth_stages: Array = [] -# Pre-resolved biome data: biome_id -> {canopy, undergrowth, fungi, temp_min, temp_max, moist_min, moist_max} +## Pre-resolved biome data: biome_id -> +## {canopy, undergrowth, fungi, temp_min, temp_max, moist_min, moist_max} var _biome_flora: Dictionary = {} @@ -81,7 +82,9 @@ func process_turn(game_map: RefCounted) -> void: # ========================================================================= -static func tick_pioneer(tiles: Array, biome_flora: Dictionary, veg: Dictionary, o2_fraction: float = 0.21) -> void: +static func tick_pioneer( + tiles: Array, biome_flora: Dictionary, veg: Dictionary, o2_fraction: float = 0.21 +) -> void: ## Pioneer colonization: seeds bare ground with initial flora using raw climate values. ## Uses temperature/moisture directly (not biome climate range) because abiotic-classified ## tiles may have narrow climate ranges that don't match their actual climate conditions @@ -120,7 +123,9 @@ static func tick_pioneer(tiles: Array, biome_flora: Dictionary, veg: Dictionary, tile.canopy_cover = pioneer_rate * 0.5 * hab -static func tick_canopy(tiles: Array, biome_flora: Dictionary, veg: Dictionary, o2_fraction: float = 0.21) -> void: +static func tick_canopy( + tiles: Array, biome_flora: Dictionary, veg: Dictionary, o2_fraction: float = 0.21 +) -> void: ## Grow canopy toward biome climax. Decay when outside climate range. ## Requires existing population (dP/dt = r*P) and sufficient atmospheric O2. var growth_rate: float = veg.get("growth_rate", 0.02) @@ -149,7 +154,9 @@ static func tick_canopy(tiles: Array, biome_flora: Dictionary, veg: Dictionary, tile.canopy_cover = maxf(tile.canopy_cover - decay_rate, 0.0) -static func tick_undergrowth(tiles: Array, biome_flora: Dictionary, veg: Dictionary, o2_fraction: float = 0.21) -> void: +static func tick_undergrowth( + tiles: Array, biome_flora: Dictionary, veg: Dictionary, o2_fraction: float = 0.21 +) -> void: ## Grow undergrowth, capped by canopy shade. Decays faster in drought. ## Requires existing population (dP/dt = r*P) and sufficient atmospheric O2. var growth_rate: float = veg.get("growth_rate", 0.02)