diff --git a/src/bot.py b/src/bot.py index ac10293..01121d1 100644 --- a/src/bot.py +++ b/src/bot.py @@ -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) diff --git a/src/death_manager.py b/src/death_manager.py index ec6e698..37f021a 100644 --- a/src/death_manager.py +++ b/src/death_manager.py @@ -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 diff --git a/src/game_controller.py b/src/game_controller.py index 16dc370..3c2f172 100644 --- a/src/game_controller.py +++ b/src/game_controller.py @@ -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() diff --git a/src/game_recovery.py b/src/game_recovery.py index 1ccb217..f9e2362 100644 --- a/src/game_recovery.py +++ b/src/game_recovery.py @@ -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): diff --git a/src/health_manager.py b/src/health_manager.py index c77db55..e7d31d7 100644 --- a/src/health_manager.py +++ b/src/health_manager.py @@ -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 diff --git a/src/ui/char_selector.py b/src/ui/char_selector.py index b3cdd74..9345de3 100644 --- a/src/ui/char_selector.py +++ b/src/ui/char_selector.py @@ -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() diff --git a/test/smoke_test.py b/test/smoke_test.py index 9e96804..17770af 100644 --- a/test/smoke_test.py +++ b/test/smoke_test.py @@ -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)