Startup speedup (#432)

* etheral

* devision by zero

* force move in a2

* Only one template finder instance
This commit is contained in:
aeon0
2022-01-11 21:21:19 +01:00
committed by GitHub
parent 7f7acf1e2a
commit c8b59c338b
7 changed files with 25 additions and 18 deletions

View File

@@ -40,12 +40,12 @@ from messenger import Messenger
from utils.dclone_ip import get_d2r_game_ip
class Bot:
def __init__(self, screen: Screen, game_stats: GameStats, pick_corpse: bool = False):
def __init__(self, screen: Screen, game_stats: GameStats, template_finder: TemplateFinder, pick_corpse: bool = False):
self._screen = screen
self._game_stats = game_stats
self._messenger = Messenger()
self._config = Config()
self._template_finder = TemplateFinder(self._screen)
self._template_finder = template_finder
self._item_finder = ItemFinder(self._config)
self._ui_manager = UiManager(self._screen, self._template_finder, self._game_stats)
self._belt_manager = BeltManager(self._screen, self._template_finder)

View File

@@ -10,10 +10,10 @@ import time
class DeathManager:
def __init__(self, screen: Screen):
def __init__(self, screen: Screen, template_finder: TemplateFinder):
self._config = Config()
self._screen = screen
self._template_finder = TemplateFinder(screen)
self._template_finder = template_finder
self._died = False
self._do_monitor = False
self._loop_delay = 1.0

View File

@@ -3,6 +3,7 @@ import threading
import time
import cv2
from template_finder import TemplateFinder
from utils.auto_settings import check_settings
from bot import Bot
@@ -25,6 +26,7 @@ class GameController:
def __init__(self, config: Config):
self._config = config
self.screen = None
self.template_finder = None
self.health_monitor_thread = None
self.health_manager = None
self.death_manager = None
@@ -45,7 +47,7 @@ class GameController:
Logger.info("Saving top-most char as template")
self.char_selector.save_char_template()
# Start bot thread
self.bot = Bot(self.screen, self.game_stats, pick_corpse)
self.bot = Bot(self.screen, self.game_stats, self.template_finder, pick_corpse)
self.bot_thread = threading.Thread(target=self.bot.start)
self.bot_thread.daemon = True
self.bot_thread.start()
@@ -93,7 +95,7 @@ class GameController:
if self.setup_screen():
self.start_health_manager_thread()
self.start_death_manager_thread()
self.game_recovery = GameRecovery(self.screen, self.death_manager)
self.game_recovery = GameRecovery(self.screen, self.death_manager, self.template_finder)
return self.run_bot(True)
Logger.error(f"{self._config.general['name']} could not restart the game. Quitting.")
messenger.send_message("Got stuck and could not restart the game. Quitting.")
@@ -109,11 +111,12 @@ class GameController:
if self._config.advanced_options['d2r_windows_always_on_top']:
set_d2r_always_on_top()
self.setup_screen()
self.template_finder = TemplateFinder(self.screen)
self.start_health_manager_thread()
self.start_death_manager_thread()
self.game_recovery = GameRecovery(self.screen, self.death_manager)
self.game_recovery = GameRecovery(self.screen, self.death_manager, self.template_finder)
self.game_stats = GameStats()
self.char_selector = CharSelector(self.screen, self._config)
self.char_selector = CharSelector(self.screen, self._config, self.template_finder)
self.start_game_controller_thread()
GameController.is_running = True
@@ -134,14 +137,14 @@ class GameController:
def start_health_manager_thread(self):
# Run health monitor thread
self.health_manager = HealthManager(self.screen)
self.health_manager = HealthManager(self.screen, self.template_finder)
self.health_monitor_thread = threading.Thread(target=self.health_manager.start_monitor)
self.health_monitor_thread.daemon = True
self.health_monitor_thread.start()
def start_death_manager_thread(self):
# Run death monitor thread
self.death_manager = DeathManager(self.screen)
self.death_manager = DeathManager(self.screen, self.template_finder)
self.death_monitor_thread = threading.Thread(target=self.death_manager.start_monitor)
self.death_monitor_thread.daemon = True
self.death_monitor_thread.start()

View File

@@ -9,12 +9,13 @@ import keyboard
from utils.misc import set_d2r_always_on_top
from utils.custom_mouse import mouse
class GameRecovery:
def __init__(self, screen: Screen, death_manager: DeathManager):
def __init__(self, screen: Screen, death_manager: DeathManager, template_finder: TemplateFinder):
self._config = Config()
self._screen = screen
self._death_manager = death_manager
self._template_finder = TemplateFinder(self._screen)
self._template_finder = template_finder
self._ui_manager = UiManager(self._screen, self._template_finder)
def go_to_hero_selection(self):

View File

@@ -15,10 +15,10 @@ from config import Config
class HealthManager:
def __init__(self, screen: Screen):
def __init__(self, screen: Screen, template_finder: TemplateFinder):
self._config = Config()
self._screen = screen
self._template_finder = TemplateFinder(screen)
self._template_finder = template_finder
self._ui_manager = UiManager(screen, self._template_finder)
self._belt_manager = None # must be set with the belt manager form bot.py
self._do_monitor = False

View File

@@ -6,11 +6,11 @@ from template_finder import TemplateFinder
class CharSelector:
def __init__(self, screen: Screen, config: Config):
def __init__(self, screen: Screen, config: Config, template_finder: TemplateFinder):
self._config = config
self._char_template = None
self._screen = screen
self._template_finder = TemplateFinder(screen)
self._template_finder = template_finder
def has_char_template_saved(self):
return self._char_template is not None
@@ -55,7 +55,8 @@ if __name__ == "__main__":
from config import Config
config = Config()
screen = Screen(config.general["monitor"])
selector = CharSelector(screen, config)
tf = TemplateFinder(screen)
selector = CharSelector(screen, config, tf)
if not selector.has_char_template_saved():
selector.save_char_template()
selector.select_char()

View File

@@ -2,6 +2,7 @@ from version import __version__
from logger import Logger
from game_stats import GameStats
from bot import Bot
from template_finder import TemplateFinder
from mocks.screen_mock import ScreenMock
@@ -16,4 +17,5 @@ class TestSmoke:
def test_smoke(self):
screen = ScreenMock()
game_stats = GameStats()
bot = Bot(screen, game_stats)
template_finder = TemplateFinder(screen)
bot = Bot(screen, game_stats, template_finder)