Template finder auto load based on filenames (#178)
* Fix gamerecovery creating 2 bot instances * Auto load template based on filenames * Actually load the correct templates
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 70 KiB |
@@ -7,7 +7,7 @@ from logger import Logger
|
||||
import time
|
||||
import os
|
||||
from config import Config
|
||||
from utils.misc import load_template
|
||||
from utils.misc import load_template, list_files_in_folder
|
||||
|
||||
|
||||
@dataclass
|
||||
@@ -18,7 +18,7 @@ class TemplateMatch:
|
||||
valid: bool = False
|
||||
|
||||
class TemplateFinder:
|
||||
def __init__(self, screen: Screen, scale_factor: float = None):
|
||||
def __init__(self, screen: Screen):
|
||||
"""
|
||||
:param screen: Screen object
|
||||
:param scale_factor: Scale factor that is used for templates. Note: UI and NPC templates will always have scale of 1.0
|
||||
@@ -27,123 +27,15 @@ class TemplateFinder:
|
||||
self._config = Config()
|
||||
self._scale_factor = 1.0
|
||||
self.last_res = None
|
||||
self._templates = {
|
||||
# Templates for node in A5 Town
|
||||
"A5_TOWN_0": [load_template(f"assets/templates/a5_town/a5_town_0.png", self._scale_factor), self._scale_factor],
|
||||
"A5_TOWN_0.5": [load_template(f"assets/templates/a5_town/a5_town_0.5.png", self._scale_factor), self._scale_factor],
|
||||
"A5_TOWN_1": [load_template(f"assets/templates/a5_town/a5_town_1.png", self._scale_factor), self._scale_factor],
|
||||
"A5_TOWN_2": [load_template(f"assets/templates/a5_town/a5_town_2.png", self._scale_factor), self._scale_factor],
|
||||
"A5_TOWN_3": [load_template(f"assets/templates/a5_town/a5_town_3.png", self._scale_factor), self._scale_factor],
|
||||
"A5_TOWN_4": [load_template(f"assets/templates/a5_town/a5_town_4.png", self._scale_factor), self._scale_factor],
|
||||
"A5_TOWN_5": [load_template(f"assets/templates/a5_town/a5_town_5.png", self._scale_factor), self._scale_factor],
|
||||
"A5_TOWN_6": [load_template(f"assets/templates/a5_town/a5_town_6.png", self._scale_factor), self._scale_factor],
|
||||
"A5_TOWN_7": [load_template(f"assets/templates/a5_town/a5_town_7.png", self._scale_factor), self._scale_factor],
|
||||
"A5_TOWN_8": [load_template(f"assets/templates/a5_town/a5_town_8.png", self._scale_factor), self._scale_factor],
|
||||
"A5_TOWN_9": [load_template(f"assets/templates/a5_town/a5_town_9.png", self._scale_factor), self._scale_factor],
|
||||
"A5_TOWN_10": [load_template(f"assets/templates/a5_town/a5_town_10.png", self._scale_factor), self._scale_factor],
|
||||
# Templates for nod at Pindle
|
||||
"PINDLE_0": [load_template(f"assets/templates/pindle/pindle_0.png", self._scale_factor), self._scale_factor],
|
||||
"PINDLE_1": [load_template(f"assets/templates/pindle/pindle_1.png", self._scale_factor), self._scale_factor],
|
||||
"PINDLE_2": [load_template(f"assets/templates/pindle/pindle_2.png", self._scale_factor), self._scale_factor],
|
||||
"PINDLE_3": [load_template(f"assets/templates/pindle/pindle_3.png", self._scale_factor), self._scale_factor],
|
||||
"PINDLE_4": [load_template(f"assets/templates/pindle/pindle_4.png", self._scale_factor), self._scale_factor],
|
||||
"PINDLE_5": [load_template(f"assets/templates/pindle/pindle_5.png", self._scale_factor), self._scale_factor],
|
||||
"PINDLE_6": [load_template(f"assets/templates/pindle/pindle_6.png", self._scale_factor), self._scale_factor],
|
||||
"PINDLE_7": [load_template(f"assets/templates/pindle/pindle_7.png", self._scale_factor), self._scale_factor],
|
||||
# Templates for nodes to Eldritch
|
||||
"ELDRITCH_START": [load_template(f"assets/templates/eldritch/eldritch_start.png", self._scale_factor), self._scale_factor],
|
||||
"ELDRITCH_0": [load_template(f"assets/templates/eldritch/eldritch_0.png", self._scale_factor), self._scale_factor],
|
||||
"ELDRITCH_1": [load_template(f"assets/templates/eldritch/eldritch_1.png", self._scale_factor), self._scale_factor],
|
||||
"ELDRITCH_2": [load_template(f"assets/templates/eldritch/eldritch_2.png", self._scale_factor), self._scale_factor],
|
||||
"ELDRITCH_3": [load_template(f"assets/templates/eldritch/eldritch_3.png", self._scale_factor), self._scale_factor],
|
||||
"ELDRITCH_4": [load_template(f"assets/templates/eldritch/eldritch_4.png", self._scale_factor), self._scale_factor],
|
||||
# Templates for nodes to Shenk (from Eldritch)
|
||||
"SHENK_0": [load_template(f"assets/templates/shenk/shenk_0.png", self._scale_factor), self._scale_factor],
|
||||
"SHENK_1": [load_template(f"assets/templates/shenk/shenk_1.png", self._scale_factor), self._scale_factor],
|
||||
"SHENK_2": [load_template(f"assets/templates/shenk/shenk_2.png", self._scale_factor), self._scale_factor],
|
||||
"SHENK_3": [load_template(f"assets/templates/shenk/shenk_3.png", self._scale_factor), self._scale_factor],
|
||||
"SHENK_4": [load_template(f"assets/templates/shenk/shenk_4.png", self._scale_factor), self._scale_factor],
|
||||
"SHENK_6": [load_template(f"assets/templates/shenk/shenk_6.png", self._scale_factor), self._scale_factor],
|
||||
"SHENK_7": [load_template(f"assets/templates/shenk/shenk_7.png", self._scale_factor), self._scale_factor],
|
||||
"SHENK_8": [load_template(f"assets/templates/shenk/shenk_8.png", self._scale_factor), self._scale_factor],
|
||||
"SHENK_9": [load_template(f"assets/templates/shenk/shenk_9.png", self._scale_factor), self._scale_factor],
|
||||
"SHENK_10": [load_template(f"assets/templates/shenk/shenk_10.png", self._scale_factor), self._scale_factor],
|
||||
"SHENK_11": [load_template(f"assets/templates/shenk/shenk_11.png", self._scale_factor), self._scale_factor],
|
||||
"SHENK_12": [load_template(f"assets/templates/shenk/shenk_12.png", self._scale_factor), self._scale_factor],
|
||||
"SHENK_13": [load_template(f"assets/templates/shenk/shenk_13.png", self._scale_factor), self._scale_factor],
|
||||
"SHENK_15": [load_template(f"assets/templates/shenk/shenk_15.png", self._scale_factor), self._scale_factor],
|
||||
"SHENK_16": [load_template(f"assets/templates/shenk/shenk_16.png", self._scale_factor), self._scale_factor],
|
||||
"SHENK_17": [load_template(f"assets/templates/shenk/shenk_17.png", self._scale_factor), self._scale_factor],
|
||||
# Template Selectables
|
||||
"A5_STASH": [load_template(f"assets/templates/a5_stash.png", self._scale_factor), self._scale_factor],
|
||||
"A5_WP": [load_template(f"assets/templates/a5_wp.png", self._scale_factor), self._scale_factor],
|
||||
"A5_RED_PORTAL": [load_template(f"assets/templates/a5_red_portal.png", self._scale_factor), self._scale_factor],
|
||||
"A5_RED_PORTAL_TEXT": [load_template(f"assets/templates/a5_red_portal_with_text.png", self._scale_factor), self._scale_factor],
|
||||
"BLUE_PORTAL": [load_template(f"assets/templates/blue_portal.png", self._scale_factor), self._scale_factor],
|
||||
"BLUE_PORTAL_2": [load_template(f"assets/templates/blue_portal_2.png", self._scale_factor), self._scale_factor],
|
||||
# Template Inventory / UI
|
||||
"INVENTORY_GOLD_BTN": [load_template(f"assets/templates/inventory_gold_btn.png", 1.0), 1.0],
|
||||
"D2_LOGO_HS": [load_template(f"assets/templates/d2_logo_hs.png", 1.0), 1.0],
|
||||
"LOADING": [load_template(f"assets/templates/loading.png", 1.0), 1.0],
|
||||
"PLAY_BTN": [load_template(f"assets/templates/play_btn.png", 1.0), 1.0],
|
||||
"PLAY_BTN_GRAY": [load_template(f"assets/templates/play_btn_gray.png", 1.0), 1.0],
|
||||
"NORMAL_BTN": [load_template(f"assets/templates/normal_btn.png", 1.0), 1.0],
|
||||
"NIGHTMARE_BTN": [load_template(f"assets/templates/nightmare_btn.png", 1.0), 1.0],
|
||||
"HELL_BTN": [load_template(f"assets/templates/hell_btn.png", 1.0), 1.0],
|
||||
"SAVE_AND_EXIT_NO_HIGHLIGHT": [load_template(f"assets/templates/save_and_exit_no_highlight.png", 1.0), 1.0],
|
||||
"SAVE_AND_EXIT_HIGHLIGHT": [load_template(f"assets/templates/save_and_exit_highlight.png", 1.0), 1.0],
|
||||
"SERVER_ISSUES": [load_template(f"assets/templates/server_issues.png", 1.0), 1.0],
|
||||
"WAYPOINT_MENU": [load_template(f"assets/templates/waypoint_menu.png", 1.0), 1.0],
|
||||
"MERC": [load_template(f"assets/templates/merc.png", 1.0), 1.0],
|
||||
"TELE_ACTIVE": [load_template(f"assets/templates/tele_active.png", 1.0), 1.0],
|
||||
"TELE_INACTIVE": [load_template(f"assets/templates/tele_inactive.png", 1.0), 1.0],
|
||||
"VIGOR": [load_template(f"assets/templates/vigor.png", 1.0), 1.0],
|
||||
"REPAIR_BTN": [load_template(f"assets/templates/repair_btn.png", 1.0), 1.0],
|
||||
"TP_TOME": [load_template(f"assets/templates/tp_tome.png", 1.0), 1.0],
|
||||
"SUPER_HEALING_POTION": [load_template(f"assets/templates/super_healing_potion.png", 1.0), 1.0],
|
||||
"SUPER_MANA_POTION": [load_template(f"assets/templates/super_mana_potion.png", 1.0), 1.0],
|
||||
"FULL_REJUV_POTION": [load_template(f"assets/templates/full_rejuv_potion.png", 1.0), 1.0],
|
||||
"REJUV_POTION": [load_template(f"assets/templates/rejuv_potion.png", 1.0), 1.0],
|
||||
"WINDOW_INGAME_OFFSET_REFERENCE":[load_template(f"assets/templates/window_ingame_offset_reference.png", 1.0), 1.0],
|
||||
# NPC: Action buttons
|
||||
"TRADE": [load_template(f"assets/npc/action_btn/trade.png", 1.0), 1.0],
|
||||
"TRADE_BLUE": [load_template(f"assets/npc/action_btn/trade_blue.png", 1.0), 1.0],
|
||||
"RESURRECT": [load_template(f"assets/npc/action_btn/resurrect.png", 1.0), 1.0],
|
||||
"RESURRECT_BLUE": [load_template(f"assets/npc/action_btn/resurrect_blue.png", 1.0), 1.0],
|
||||
"TRADE_REPAIR": [load_template(f"assets/npc/action_btn/trade_repair.png", 1.0), 1.0],
|
||||
"TRADE_REPAIR_BLUE": [load_template(f"assets/npc/action_btn/trade_repair_blue.png", 1.0), 1.0],
|
||||
# NPC: Qual-Kehk
|
||||
"QUAL_FRONT": [load_template(f"assets/npc/qual_kehk/qual_front.png", 1.0), 1.0],
|
||||
"QUAL_SIDE": [load_template(f"assets/npc/qual_kehk/qual_side.png", 1.0), 1.0],
|
||||
"QUAL_BACK": [load_template(f"assets/npc/qual_kehk/qual_back.png", 1.0), 1.0],
|
||||
"QUAL_45": [load_template(f"assets/npc/qual_kehk/qual_45.png", 1.0), 1.0],
|
||||
"QUAL_45_2": [load_template(f"assets/npc/qual_kehk/qual_45_2.png", 1.0), 1.0],
|
||||
"QUAL_45_3": [load_template(f"assets/npc/qual_kehk/qual_45_3.png", 1.0), 1.0],
|
||||
"QUAL_NAME_TAG_WHITE": [load_template(f"assets/npc/qual_kehk/qual_kehk_white.png", 1.0), 1.0],
|
||||
"QUAL_NAME_TAG_GOLD": [load_template(f"assets/npc/qual_kehk/qual_kehk_gold.png", 1.0), 1.0],
|
||||
# NPC: Malah
|
||||
"MALAH_FRONT": [load_template(f"assets/npc/malah/malah_front.png", 1.0), 1.0],
|
||||
"MALAH_BACK": [load_template(f"assets/npc/malah/malah_BACK.png", 1.0), 1.0],
|
||||
"MALAH_45": [load_template(f"assets/npc/malah/malah_45.png", 1.0), 1.0],
|
||||
"MALAH_SIDE": [load_template(f"assets/npc/malah/malah_side.png", 1.0), 1.0],
|
||||
"MALAH_SIDE_2": [load_template(f"assets/npc/malah/malah_side_2.png", 1.0), 1.0],
|
||||
"MALAH_NAME_TAG_WHITE": [load_template(f"assets/npc/malah/malah_white.png", 1.0), 1.0],
|
||||
"MALAH_NAME_TAG_GOLD": [load_template(f"assets/npc/malah/malah_gold.png", 1.0), 1.0],
|
||||
# NPC: Larzuk
|
||||
"LARZUK_FRONT": [load_template(f"assets/npc/larzuk/larzuk_front.png", 1.0), 1.0],
|
||||
"LARZUK_BACK": [load_template(f"assets/npc/larzuk/larzuk_back.png", 1.0), 1.0],
|
||||
"LARZUK_SIDE": [load_template(f"assets/npc/larzuk/larzuk_side.png", 1.0), 1.0],
|
||||
"LARZUK_SIDE_2": [load_template(f"assets/npc/larzuk/larzuk_side_2.png", 1.0), 1.0],
|
||||
"LARZUK_SIDE_3": [load_template(f"assets/npc/larzuk/larzuk_side_3.png", 1.0), 1.0],
|
||||
"LARZUK_NAME_TAG_WHITE": [load_template(f"assets/npc/larzuk/larzuk_white.png", 1.0), 1.0],
|
||||
"LARZUK_NAME_TAG_GOLD": [load_template(f"assets/npc/larzuk/larzuk_gold.png", 1.0), 1.0],
|
||||
# NPC: Anya
|
||||
"ANYA_FRONT": [load_template(f"assets/npc/anya/anya_front.png", 1.0), 1.0],
|
||||
"ANYA_BACK": [load_template(f"assets/npc/anya/anya_back.png", 1.0), 1.0],
|
||||
"ANYA_SIDE": [load_template(f"assets/npc/anya/anya_side.png", 1.0), 1.0],
|
||||
"ANYA_NAME_TAG_GOLD": [load_template(f"assets/npc/anya/anya_gold.png", 1.0), 1.0],
|
||||
"ANYA_NAME_TAG_WHITE": [load_template(f"assets/npc/anya/anya_white.png", 1.0), 1.0],
|
||||
}
|
||||
template_path = "assets\\templates"
|
||||
npc_path = "assets\\npc"
|
||||
pathes = list_files_in_folder(npc_path) + list_files_in_folder(template_path)
|
||||
self._templates = {}
|
||||
for file_path in pathes:
|
||||
file_name: str = os.path.basename(file_path)
|
||||
if file_name.endswith('.png'):
|
||||
key = file_name[:-4].upper()
|
||||
self._templates[key] = [load_template(file_path, 1.0), 1.0]
|
||||
|
||||
def get_template(self, key):
|
||||
return self._templates[key][0]
|
||||
|
||||
@@ -57,3 +57,10 @@ def load_template(path, scale_factor):
|
||||
template_img = cv2.resize(template_img, None, fx=scale_factor, fy=scale_factor, interpolation=cv2.INTER_NEAREST)
|
||||
return template_img
|
||||
return None
|
||||
|
||||
def list_files_in_folder(path: str):
|
||||
r = []
|
||||
for root, _, files in os.walk(path):
|
||||
for name in files:
|
||||
r.append(os.path.join(root, name))
|
||||
return r
|
||||
|
||||