Skip to content

Commit acffced

Browse files
committed
enhancement: 修复 switch panel 不稳定的 bug
1 parent 6635706 commit acffced

13 files changed

Lines changed: 43 additions & 1805 deletions

autowsgr/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
"""AutoWSGR — 战舰少女R 自动化框架 (v2)"""
22

3-
__version__ = '2.1.0'
3+
__version__ = '2.1.0r1'

autowsgr/ui/map/base.py

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
identify_page_type,
4343
make_tab_checker,
4444
)
45-
from autowsgr.ui.utils import click_and_wait_for_page
45+
from autowsgr.ui.utils import NavigationError, click_and_wait_for_page
4646
from autowsgr.vision import OCREngine, PixelChecker
4747

4848

@@ -185,6 +185,9 @@ def go_back(self) -> None:
185185
target=PageName.MAIN,
186186
)
187187

188+
_PANEL_SWITCH_MAX_RETRIES = 3
189+
_PANEL_SWITCH_RETRY_DELAY = 1.0
190+
188191
def switch_panel(self, panel: MapPanel) -> None:
189192
"""切换到指定面板标签并验证到达。"""
190193
current = self.get_active_panel(self._ctrl.screenshot())
@@ -194,13 +197,44 @@ def switch_panel(self, panel: MapPanel) -> None:
194197
panel.value,
195198
)
196199
target_idx = PANEL_TO_INDEX[panel]
197-
click_and_wait_for_page(
198-
self._ctrl,
199-
click_coord=CLICK_PANEL[panel],
200-
checker=make_tab_checker(TabbedPageType.MAP, target_idx),
201-
source=f'地图-{current.value if current else "?"}',
202-
target=f'地图-{panel.value}',
203-
)
200+
source = f'地图-{current.value if current else "?"}'
201+
target = f'地图-{panel.value}'
202+
last_err: NavigationError | None = None
203+
204+
for attempt in range(1, self._PANEL_SWITCH_MAX_RETRIES + 1):
205+
if attempt > 1:
206+
_log.warning(
207+
'[UI] 面板切换重试 {}/{}: {} -> {} (等 {:.1f}s)',
208+
attempt,
209+
self._PANEL_SWITCH_MAX_RETRIES,
210+
source,
211+
target,
212+
self._PANEL_SWITCH_RETRY_DELAY,
213+
)
214+
time.sleep(self._PANEL_SWITCH_RETRY_DELAY)
215+
216+
try:
217+
click_and_wait_for_page(
218+
self._ctrl,
219+
click_coord=CLICK_PANEL[panel],
220+
checker=make_tab_checker(TabbedPageType.MAP, target_idx),
221+
source=source,
222+
target=target,
223+
)
224+
return
225+
except NavigationError as e:
226+
last_err = e
227+
_log.warning(
228+
'[UI] 面板切换失败 ({}/{}): {} -> {}',
229+
attempt,
230+
self._PANEL_SWITCH_MAX_RETRIES,
231+
source,
232+
target,
233+
)
234+
235+
raise NavigationError(
236+
f'面板切换失败 (已重试 {self._PANEL_SWITCH_MAX_RETRIES} 次): {source} -> {target}'
237+
) from last_err
204238

205239
def ensure_panel(self, panel: MapPanel) -> None:
206240
"""确保当前处于指定面板,若不是则切换。"""
File renamed without changes.
File renamed without changes.

docs/feature_overview.md

Lines changed: 0 additions & 437 deletions
This file was deleted.

0 commit comments

Comments
 (0)