mirror of
https://github.com/LmeSzinc/StarRailCopilot.git
synced 2024-11-16 06:25:24 +00:00
Add: Route framework
This commit is contained in:
parent
fd84240d38
commit
e26be58a05
@ -47,7 +47,7 @@ class PositionPredictState:
|
|||||||
|
|
||||||
class Minimap(MapResource):
|
class Minimap(MapResource):
|
||||||
def init_position(self, position: tuple[int | float, int | float]):
|
def init_position(self, position: tuple[int | float, int | float]):
|
||||||
logger.info(f"init_position:{position}")
|
logger.info(f"init_position: {position}")
|
||||||
self.position = position
|
self.position = position
|
||||||
|
|
||||||
def _predict_position(self, image, scale=1.0):
|
def _predict_position(self, image, scale=1.0):
|
||||||
|
50
tasks/map/route/base.py
Normal file
50
tasks/map/route/base.py
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
from tasks.map.control.control import MapControl
|
||||||
|
from tasks.map.control.waypoint import Waypoint
|
||||||
|
from tasks.map.keywords import MapPlane
|
||||||
|
|
||||||
|
|
||||||
|
class RouteBase(MapControl):
|
||||||
|
"""
|
||||||
|
Base class of `Route`
|
||||||
|
Every `Route` class must implement method `route()`
|
||||||
|
"""
|
||||||
|
|
||||||
|
def route_example(self):
|
||||||
|
"""
|
||||||
|
Pages:
|
||||||
|
in: page_main
|
||||||
|
out: page_main
|
||||||
|
Doesn't matter if in/out are not page_main, just be clear what you're doing
|
||||||
|
"""
|
||||||
|
self.map_init(
|
||||||
|
plane=...,
|
||||||
|
floor=...,
|
||||||
|
position=...,
|
||||||
|
)
|
||||||
|
self.clear_enemy(
|
||||||
|
Waypoint(...).run_2x(),
|
||||||
|
Waypoint(...),
|
||||||
|
)
|
||||||
|
|
||||||
|
def map_init(
|
||||||
|
self,
|
||||||
|
plane: MapPlane | str,
|
||||||
|
floor: str = 'F1',
|
||||||
|
position: tuple[int | float, int | float] = None
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
Args:
|
||||||
|
plane (MapPlane, str): Such as Jarilo_AdministrativeDistrict
|
||||||
|
floor (str):
|
||||||
|
position: Initialize the starter point of minimap tracking
|
||||||
|
Leaving None will trigger brute-force starter point finding.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
if self.device.image is None:
|
||||||
|
self.device.screenshot()
|
||||||
|
except AttributeError:
|
||||||
|
self.device.screenshot()
|
||||||
|
|
||||||
|
self.minimap.set_plane(plane, floor=floor)
|
||||||
|
if position is not None:
|
||||||
|
self.minimap.init_position(position)
|
38
tasks/map/route/loader.py
Normal file
38
tasks/map/route/loader.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import importlib
|
||||||
|
import os
|
||||||
|
|
||||||
|
from module.exception import RequestHumanTakeover
|
||||||
|
from module.logger import logger
|
||||||
|
from tasks.base.ui import UI
|
||||||
|
from tasks.map.route.base import RouteBase
|
||||||
|
|
||||||
|
|
||||||
|
class RouteLoader(UI):
|
||||||
|
route: RouteBase
|
||||||
|
|
||||||
|
def route_run(self, route: str):
|
||||||
|
"""
|
||||||
|
Args:
|
||||||
|
route: .py module path such as `daily.forgotten_hall.stage1`
|
||||||
|
which will load `./route/daily/forgotten_hall/stage1.py`
|
||||||
|
"""
|
||||||
|
folder, name = route.rsplit('.', maxsplit=1)
|
||||||
|
path = f'./route/{route.replace(".", "/")}.py'
|
||||||
|
try:
|
||||||
|
module = importlib.import_module(f'route.{folder}.{name}')
|
||||||
|
except ModuleNotFoundError:
|
||||||
|
logger.critical(f'Route file not found: {route} ({path})')
|
||||||
|
if not os.path.exists(path):
|
||||||
|
logger.critical(f'Route file not exists: {path}')
|
||||||
|
raise RequestHumanTakeover
|
||||||
|
|
||||||
|
# config = copy.deepcopy(self.config).merge(module.Config())
|
||||||
|
config = self.config
|
||||||
|
device = self.device
|
||||||
|
try:
|
||||||
|
self.route = module.Route(config=config, device=device)
|
||||||
|
return self.route.route()
|
||||||
|
except AttributeError as e:
|
||||||
|
logger.critical(e)
|
||||||
|
logger.critical(f'Route file {route} ({path}) must define Route.route()')
|
||||||
|
raise RequestHumanTakeover
|
Loading…
Reference in New Issue
Block a user