Chore: [ALAS] Move func methods to the Alas class

This commit is contained in:
LmeSzinc 2024-05-30 17:30:09 +08:00
parent 0dd8c6b921
commit 8dfac73f30
6 changed files with 70 additions and 29 deletions

View File

@ -28,6 +28,8 @@ class ModuleBase:
""" """
if isinstance(config, AzurLaneConfig): if isinstance(config, AzurLaneConfig):
self.config = config self.config = config
if task is not None:
self.config.init_task(task)
elif isinstance(config, str): elif isinstance(config, str):
self.config = AzurLaneConfig(config, task=task) self.config = AzurLaneConfig(config, task=task)
else: else:

View File

@ -106,17 +106,22 @@ class AzurLaneConfig(ConfigUpdater, ManualConfig, GeneratedConfig, ConfigWatcher
logger.info("Using template config, which is read only") logger.info("Using template config, which is read only")
self.auto_update = False self.auto_update = False
self.task = name_to_function("template") self.task = name_to_function("template")
self.init_task(task)
def init_task(self, task=None):
if self.is_template_config:
return
self.load()
if task is None:
# Bind `Alas` by default which includes emulator settings.
task = name_to_function("Alas")
else: else:
self.load() # Bind a specific task for debug purpose.
if task is None: task = name_to_function(task)
# Bind `Alas` by default which includes emulator settings. self.bind(task)
task = name_to_function("Alas") self.task = task
else: self.save()
# Bind a specific task for debug purpose.
task = name_to_function(task)
self.bind(task)
self.task = task
self.save()
def load(self): def load(self):
self.data = self.read_file(self.config_name) self.data = self.read_file(self.config_name)

View File

@ -68,17 +68,19 @@ class Benchmark(DaemonBase):
if not isinstance(cost, (float, int)): if not isinstance(cost, (float, int)):
return Text(cost, style="bold bright_red") return Text(cost, style="bold bright_red")
if cost < 0.10: if cost < 0.025:
return Text('Insane Fast', style="bold bright_green")
if cost < 0.100:
return Text('Ultra Fast', style="bold bright_green") return Text('Ultra Fast', style="bold bright_green")
if cost < 0.20: if cost < 0.200:
return Text('Very Fast', style="bright_green") return Text('Very Fast', style="bright_green")
if cost < 0.30: if cost < 0.300:
return Text('Fast', style="green") return Text('Fast', style="green")
if cost < 0.50: if cost < 0.500:
return Text('Medium', style="yellow") return Text('Medium', style="yellow")
if cost < 0.75: if cost < 0.750:
return Text('Slow', style="red") return Text('Slow', style="red")
if cost < 1.00: if cost < 1.000:
return Text('Very Slow', style="bright_red") return Text('Very Slow', style="bright_red")
return Text('Ultra Slow', style="bold bright_red") return Text('Ultra Slow', style="bold bright_red")
@ -87,11 +89,11 @@ class Benchmark(DaemonBase):
if not isinstance(cost, (float, int)): if not isinstance(cost, (float, int)):
return Text(cost, style="bold bright_red") return Text(cost, style="bold bright_red")
if cost < 0.1: if cost < 0.100:
return Text('Fast', style="bright_green") return Text('Fast', style="bright_green")
if cost < 0.2: if cost < 0.200:
return Text('Medium', style="yellow") return Text('Medium', style="yellow")
if cost < 0.4: if cost < 0.400:
return Text('Slow', style="red") return Text('Slow', style="red")
return Text('Very Slow', style="bright_red") return Text('Very Slow', style="bright_red")
@ -177,7 +179,9 @@ class Benchmark(DaemonBase):
return [l for l in screenshot if l not in args] return [l for l in screenshot if l not in args]
# No ascreencap on Android > 9 # No ascreencap on Android > 9
if device in ['emulator_android_12', 'android_phone_12']: sdk = self.device.sdk_ver
logger.info(f'sdk_ver: {sdk}')
if not (21 <= sdk <= 28):
screenshot = remove('aScreenCap', 'aScreenCap_nc') screenshot = remove('aScreenCap', 'aScreenCap_nc')
# No nc loopback # No nc loopback
if device in ['plone_cloud_with_adb']: if device in ['plone_cloud_with_adb']:
@ -186,6 +190,8 @@ class Benchmark(DaemonBase):
if device == 'android_phone_vmos': if device == 'android_phone_vmos':
screenshot = ['ADB', 'aScreenCap', 'DroidCast', 'DroidCast_raw'] screenshot = ['ADB', 'aScreenCap', 'DroidCast', 'DroidCast_raw']
click = ['ADB', 'Hermit', 'MaaTouch'] click = ['ADB', 'Hermit', 'MaaTouch']
if self.device.nemu_ipc_available():
screenshot.append('nemu_ipc')
scene = self.config.Benchmark_TestScene scene = self.config.Benchmark_TestScene
if 'screenshot' not in scene: if 'screenshot' not in scene:
@ -224,6 +230,8 @@ class Benchmark(DaemonBase):
screenshot = remove('aScreenCap', 'aScreenCap_nc') screenshot = remove('aScreenCap', 'aScreenCap_nc')
if self.device.is_chinac_phone_cloud: if self.device.is_chinac_phone_cloud:
screenshot = remove('ADB_nc', 'aScreenCap_nc') screenshot = remove('ADB_nc', 'aScreenCap_nc')
if self.device.nemu_ipc_available():
screenshot.append('nemu_ipc')
screenshot = tuple(screenshot) screenshot = tuple(screenshot)
self.TEST_TOTAL = 3 self.TEST_TOTAL = 3
@ -233,6 +241,15 @@ class Benchmark(DaemonBase):
return method return method
def run_benchmark(config):
try:
Benchmark(config, task='Benchmark').run()
return True
except RequestHumanTakeover:
logger.critical('Request human takeover')
return False
if __name__ == '__main__': if __name__ == '__main__':
b = Benchmark('alas', task='Benchmark') b = Benchmark('src', task='Benchmark')
b.run() b.run()

View File

@ -5,12 +5,15 @@ import threading
from multiprocessing import Process from multiprocessing import Process
from typing import Dict, List, Union from typing import Dict, List, Union
import inflection
from filelock import FileLock from filelock import FileLock
from rich.console import Console, ConsoleRenderable
from module.config.utils import filepath_config from module.config.utils import filepath_config
from module.logger import logger, set_file_logger, set_func_logger from module.logger import logger, set_file_logger, set_func_logger
from module.webui.fake import get_config_mod, mod_instance from module.webui.fake import get_config_mod, mod_instance
from module.webui.setting import State from module.webui.setting import State
from rich.console import Console, ConsoleRenderable from module.webui.submodule.utils import get_available_func
class ProcessManager: class ProcessManager:
@ -147,14 +150,10 @@ class ProcessManager:
if e is not None: if e is not None:
AzurLaneAutoScript.stop_event = e AzurLaneAutoScript.stop_event = e
StarRailCopilot(config_name=config_name).loop() StarRailCopilot(config_name=config_name).loop()
elif func == "Daemon": elif func in get_available_func():
from tasks.base.daemon import Daemon from src import StarRailCopilot
Daemon(config=config_name, task="Daemon").run() StarRailCopilot(config_name=config_name).run(inflection.underscore(func))
elif func == "PlannerScan":
from tasks.planner.scan import PlannerScan
PlannerScan(config=config_name, task="PlannerScan").run()
else: else:
logger.critical(f"No function matched: {func}") logger.critical(f"No function matched: {func}")
logger.info(f"[{config_name}] exited. Reason: Finish\n") logger.info(f"[{config_name}] exited. Reason: Finish\n")

View File

@ -0,0 +1,6 @@
def get_available_func():
return (
'Daemon',
'Benchmark',
'PlannerScan',
)

12
src.py
View File

@ -58,6 +58,18 @@ class StarRailCopilot(AzurLaneAutoScript):
from tasks.rogue.rogue import Rogue from tasks.rogue.rogue import Rogue
Rogue(config=self.config, device=self.device).run() Rogue(config=self.config, device=self.device).run()
def benchmark(self):
from module.daemon.benchmark import run_benchmark
run_benchmark(config=self.config)
def daemon(self):
from tasks.base.daemon import Daemon
Daemon(config=self.config, device=self.device, task="Daemon").run()
def planner_scan(self):
from tasks.planner.scan import PlannerScan
PlannerScan(config=self.config, device=self.device, task="PlannerScan").run()
if __name__ == '__main__': if __name__ == '__main__':
src = StarRailCopilot('src') src = StarRailCopilot('src')