From f2ad1471c76f3008af225b4f7a148e7086a303ff Mon Sep 17 00:00:00 2001 From: autocommit Date: Mon, 13 Apr 2026 07:37:39 -0700 Subject: [PATCH] =?UTF-8?q?test(scene):=20=E2=9C=85=20Add=20test=20for=20a?= =?UTF-8?q?uto-play=20target=20re-targeting=20to=20prevent=20stuck=20armie?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- src/game/engine/scenes/tests/auto_play.gd | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/game/engine/scenes/tests/auto_play.gd b/src/game/engine/scenes/tests/auto_play.gd index 8585b009..5de6e956 100644 --- a/src/game/engine/scenes/tests/auto_play.gd +++ b/src/game/engine/scenes/tests/auto_play.gd @@ -18,6 +18,8 @@ var _world_map: Node = null var _founded_city: bool = false var _screenshot_interval: int = 10 var _locked_target: Vector2i = Vector2i(-1, -1) +var _target_stuck_turns: int = 0 +var _last_army_pos: Vector2i = Vector2i(-1, -1) func _ready() -> void: @@ -272,6 +274,22 @@ func _play_turn() -> void: target_alive = true if not target_alive: _locked_target = _find_attack_target(player) + _target_stuck_turns = 0 + # Detect stuck warriors — if army hasn't moved in 20 turns, pick new target + var army_pos: Vector2i = Vector2i.ZERO + for u_chk: Variant in units_snapshot: + if u_chk.is_alive() and u_chk.get("can_found_city") != true: + army_pos = u_chk.position + break + if army_pos == _last_army_pos: + _target_stuck_turns += 1 + else: + _target_stuck_turns = 0 + _last_army_pos = army_pos + if _target_stuck_turns >= 20: + print(" STUCK: army can't reach %s, re-targeting" % _locked_target) + _locked_target = Vector2i(-1, -1) + _target_stuck_turns = 0 var target: Vector2i = _locked_target if target != Vector2i(-1, -1): if _turn_count % 10 == 0: