diff --git a/assets/npc/anya/anya_gold.png b/assets/npc/anya/anya_name_tag_gold.png similarity index 100% rename from assets/npc/anya/anya_gold.png rename to assets/npc/anya/anya_name_tag_gold.png diff --git a/assets/npc/anya/anya_white.png b/assets/npc/anya/anya_name_tag_white.png similarity index 100% rename from assets/npc/anya/anya_white.png rename to assets/npc/anya/anya_name_tag_white.png diff --git a/assets/npc/larzuk/larzuk_gold.png b/assets/npc/larzuk/larzuk_name_tag_gold.png similarity index 100% rename from assets/npc/larzuk/larzuk_gold.png rename to assets/npc/larzuk/larzuk_name_tag_gold.png diff --git a/assets/npc/larzuk/larzuk_white.png b/assets/npc/larzuk/larzuk_name_tag_white.png similarity index 100% rename from assets/npc/larzuk/larzuk_white.png rename to assets/npc/larzuk/larzuk_name_tag_white.png diff --git a/assets/npc/malah/malah_gold.png b/assets/npc/malah/malah_name_tag_gold.png similarity index 100% rename from assets/npc/malah/malah_gold.png rename to assets/npc/malah/malah_name_tag_gold.png diff --git a/assets/npc/malah/malah_white.png b/assets/npc/malah/malah_name_tag_white.png similarity index 100% rename from assets/npc/malah/malah_white.png rename to assets/npc/malah/malah_name_tag_white.png diff --git a/assets/npc/malah/trade_btn.png b/assets/npc/malah/trade_btn.png deleted file mode 100644 index 0ba0b78..0000000 Binary files a/assets/npc/malah/trade_btn.png and /dev/null differ diff --git a/assets/npc/qual_kehk/qual_kehk_gold.png b/assets/npc/qual_kehk/qual_name_tag_gold.png similarity index 100% rename from assets/npc/qual_kehk/qual_kehk_gold.png rename to assets/npc/qual_kehk/qual_name_tag_gold.png diff --git a/assets/npc/qual_kehk/qual_kehk_white.png b/assets/npc/qual_kehk/qual_name_tag_white.png similarity index 100% rename from assets/npc/qual_kehk/qual_kehk_white.png rename to assets/npc/qual_kehk/qual_name_tag_white.png diff --git a/assets/templates/a5_red_portal_with_text.png b/assets/templates/a5_red_portal_text.png similarity index 100% rename from assets/templates/a5_red_portal_with_text.png rename to assets/templates/a5_red_portal_text.png diff --git a/assets/templates/shenk/shenk_5.png b/assets/templates/shenk/shenk_5.png deleted file mode 100644 index 2c99ddf..0000000 Binary files a/assets/templates/shenk/shenk_5.png and /dev/null differ diff --git a/src/template_finder.py b/src/template_finder.py index 7bf0940..8be776e 100644 --- a/src/template_finder.py +++ b/src/template_finder.py @@ -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] diff --git a/src/utils/misc.py b/src/utils/misc.py index 8d93cee..c67a864 100644 --- a/src/utils/misc.py +++ b/src/utils/misc.py @@ -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