All checks were successful
ci/woodpecker/push/check_format Pipeline was successful
67 lines
2.2 KiB
Python
67 lines
2.2 KiB
Python
from datetime import datetime, timedelta
|
|
|
|
from mower.solvers.infra.base_mixin import BaseMixin
|
|
from mower.solvers.infra.enter_room import EnterRoomSolver
|
|
from mower.utils import config
|
|
from mower.utils import typealias as tp
|
|
from mower.utils.log import logger
|
|
from mower.utils.recognize import Scene
|
|
from mower.utils.solver import BaseSolver
|
|
|
|
|
|
class GetOrderRemainingTimeSolver(BaseSolver, BaseMixin):
|
|
solver_name = "订单剩余时间"
|
|
|
|
def run(self, room: str) -> int:
|
|
"""
|
|
Returns:
|
|
剩余时间(单位为秒)
|
|
"""
|
|
self.room = room
|
|
self.res = None
|
|
self.wait_start()
|
|
super().run()
|
|
return self.res
|
|
|
|
def number(self, scope: tp.Scope, height: int, thres: int) -> str:
|
|
"数字识别"
|
|
rect_limits = [{"w": 10, "h": 10, "char": ":"}]
|
|
return config.recog.num.number(
|
|
"riic_base", scope, height, thres, rect_limits=rect_limits
|
|
)
|
|
|
|
def read_remain_time(self, pos) -> int:
|
|
h, m, s = self.number(pos, 19, 115).split("::")
|
|
return int(h) * 3600 + int(m) * 60 + int(s)
|
|
|
|
def timeout(self) -> bool:
|
|
return datetime.now() > self.start_time + timedelta(seconds=10)
|
|
|
|
def wait_start(self):
|
|
self.start_time = datetime.now()
|
|
|
|
def transition(self) -> bool:
|
|
if (
|
|
scene := self.scene()
|
|
) == Scene.INFRA_DETAILS and self.detect_room() == self.room:
|
|
self.ctap((200, 1000), 1)
|
|
self.wait_start()
|
|
elif scene == Scene.ORDER_LIST and self.detect_room_inside() == self.room:
|
|
if self.timeout():
|
|
logger.error("读取订单失败")
|
|
return True
|
|
if self.animation():
|
|
return
|
|
elif pos := self.find("bill_accelerate"):
|
|
pos[0][0] += 69
|
|
pos[0][1] -= 214
|
|
pos[1][0] -= 52
|
|
pos[1][1] -= 220
|
|
if res := self.read_remain_time(pos):
|
|
self.res = res
|
|
return True
|
|
|
|
elif scene in self.waiting_scene:
|
|
self.waiting_solver()
|
|
else:
|
|
EnterRoomSolver().run(self.room, detail=False)
|