From 61e75fdca9b533510578b901e3ebcc9d25bdcb8c Mon Sep 17 00:00:00 2001 From: Saffron <263493777+itsmiso-ai@users.noreply.github.com> Date: Thu, 9 Jul 2026 21:35:18 +0000 Subject: [PATCH] =?UTF-8?q?Deduplicate=20worker=20cap=20calculation=20?= =?UTF-8?q?=E2=80=94=20main.gd=20delegates=20to=20worker=5Fcap=5Flogic.gd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make get_worker_cap() call WorkerCapLogic.calculate_worker_cap() and can_recruit_worker() call WorkerCapLogic.can_recruit(), eliminating the duplicate implementation in main.gd. This ensures the tested module is used in production code, removing test drift risk. Fixes #229 Signed-off-by: Saffron <263493777+itsmiso-ai@users.noreply.github.com> --- scripts/main.gd | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/scripts/main.gd b/scripts/main.gd index 2eebb25..10d77a3 100644 --- a/scripts/main.gd +++ b/scripts/main.gd @@ -18,6 +18,7 @@ const GoalReward := preload("res://scripts/goal_reward.gd") const RESOURCE_TRENDS := Constants.RESOURCE_TRENDS const ColonyStance := preload("res://scripts/colony_stance.gd") const TileRender := preload("res://scripts/tile_render.gd") +const WorkerCapLogic := preload("res://scripts/worker_cap_logic.gd") @onready var world_grid: GridContainer = %WorldGrid @@ -1060,23 +1061,14 @@ func should_bias_to_food_gathering() -> bool: return level == "low" or level == "starving" func get_worker_cap() -> int: - var cap := Constants.BASE_WORKER_CAP - for build in state.get("builds", []): - if bool(build.complete): - var kind := String(build.kind) - cap += int(Constants.WORKER_CAP_BONUSES.get(kind, 0)) - return cap + return WorkerCapLogic.calculate_worker_cap(state.get("builds", [])) # ── Recruit worker decision (issue #149, links to #133, #135) ───────────────── func can_recruit_worker() -> bool: """Return true if the colony has capacity for another worker.""" - if not state.has("workers"): - return true - var current: int = state.workers.size() - var worker_cap := get_worker_cap() - return current < worker_cap + return WorkerCapLogic.can_recruit(state.get("workers", []), state.get("builds", [])) func recruit_worker() -> void: