Startup speedup (#432)
* etheral * devision by zero * force move in a2 * Only one template finder instance
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user