Fix: state loop

This commit is contained in:
Hengyu 2024-06-29 16:18:06 +08:00
parent aaa3c5badb
commit bbe7d10746

View File

@ -3,7 +3,9 @@ from module.logger import logger
from module.ocr.ocr import Digit from module.ocr.ocr import Digit
from tasks.base.assets.assets_base_popup import POPUP_CONFIRM, POPUP_CANCEL from tasks.base.assets.assets_base_popup import POPUP_CONFIRM, POPUP_CANCEL
from tasks.base.ui import UI from tasks.base.ui import UI
from tasks.combat.assets.assets_combat_finish import COMBAT_AGAIN
from tasks.combat.assets.assets_combat_prepare import ( from tasks.combat.assets.assets_combat_prepare import (
COMBAT_PREPARE,
EXTRACT_RESERVED_TRAILBLAZE_POWER, EXTRACT_RESERVED_TRAILBLAZE_POWER,
FUEL, FUEL,
FUEL_SELECTED, FUEL_SELECTED,
@ -15,6 +17,14 @@ from tasks.combat.assets.assets_combat_prepare import (
class Fuel(UI): class Fuel(UI):
def _use_fuel_finish(self):
"""
Two possible finish states after using fuel/extract trailblaze power:
1. COMBAT_PREPARE
2. COMBAT_AGAIN
"""
return self.appear(COMBAT_PREPARE) or self.appear(COMBAT_AGAIN)
def extract_reserved_trailblaze_power(self, skip_first_screenshot=True): def extract_reserved_trailblaze_power(self, skip_first_screenshot=True):
""" """
Extract reserved trailblaze power from previous combat. Extract reserved trailblaze power from previous combat.
@ -34,6 +44,9 @@ class Fuel(UI):
else: else:
self.device.screenshot() self.device.screenshot()
if self._use_fuel_finish():
break
if self.appear_then_click(EXTRACT_RESERVED_TRAILBLAZE_POWER): if self.appear_then_click(EXTRACT_RESERVED_TRAILBLAZE_POWER):
continue continue
if self.appear_then_click(RESERVED_TRAILBLAZE_POWER_ENTRANCE): if self.appear_then_click(RESERVED_TRAILBLAZE_POWER_ENTRANCE):
@ -41,7 +54,7 @@ class Fuel(UI):
if self.appear_then_click(POPUP_CONFIRM): if self.appear_then_click(POPUP_CONFIRM):
continue continue
if self.handle_reward(): if self.handle_reward():
break continue
def use_fuel(self, skip_first_screenshot=True): def use_fuel(self, skip_first_screenshot=True):
logger.info("Use Fuel") logger.info("Use Fuel")
@ -51,7 +64,7 @@ class Fuel(UI):
else: else:
self.device.screenshot() self.device.screenshot()
if not self.appear(FUEL) and not self.appear(FUEL_SELECTED): if self.appear(POPUP_CONFIRM) and not (self.appear(FUEL_SELECTED) and self.appear(FUEL)):
logger.info("No fuel found") logger.info("No fuel found")
return return
if self.appear(FUEL_SELECTED): if self.appear(FUEL_SELECTED):
@ -60,8 +73,6 @@ class Fuel(UI):
continue continue
if self.appear_then_click(FUEL_ENTRANCE): if self.appear_then_click(FUEL_ENTRANCE):
continue continue
if self.handle_reward():
break
offset = FUEL_SELECTED.button_offset offset = FUEL_SELECTED.button_offset
count = Digit(OCR_FUEL).ocr_single_line(crop(self.device.image, area_offset(OCR_FUEL.area, offset)), count = Digit(OCR_FUEL).ocr_single_line(crop(self.device.image, area_offset(OCR_FUEL.area, offset)),
@ -81,8 +92,11 @@ class Fuel(UI):
else: else:
self.device.screenshot() self.device.screenshot()
if self.handle_reward(): if self._use_fuel_finish():
break break
if self.handle_reward():
continue
# by default, use one fuel each time # by default, use one fuel each time
if self.appear_then_click(POPUP_CONFIRM): if self.appear_then_click(POPUP_CONFIRM):
continue continue