diff --git a/equipment_main_ui.py b/equipment_main_ui.py new file mode 100644 index 0000000..5dc4114 --- /dev/null +++ b/equipment_main_ui.py @@ -0,0 +1,787 @@ +import random +from operator import itemgetter +from time import time + +import equipment_overlay +from window_capture import WindowCapture +from vision import Vision +import cv2 as cv +from hsvfilter import HsvFilter +from config_file import UserConfigs +import pydirectinput +import keyboard +from utils import dig_point +from equipment_overlay import EquipmentOverlay + +EMITTER_MAIN = "main" +EMITTER_MUSH = "mushroom" +EMITTER_AMU = "amulett" +EMITTER_SWORD = "sword" +EMITTER_STAFF = "staff" +EMITTER_WAND = "wand" +EMITTER_RING = "ring" +EMITTER_MULTI = "multi" + +HSV_DEFAULT = HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0) + + +def run(): + config = UserConfigs() + overlay = EquipmentOverlay(config) + + while True: + if overlay.run_mode == 'stopped': + overlay.update_status_label("stopped", "0") + overlay.run_mode = 'init' + continue + elif overlay.run_mode == 'started': + pass + elif overlay.run_mode == 'init': + continue + elif overlay.run_mode == 'paused': + continue + else: + break + + EMITTER_TO_USE = str(overlay.emitter_use.get()) + SPAWN_COUNT = int(overlay.spawn_use.get()) + ENERGY_TO_USE = int(overlay.energy_use.get()) + + # initialize the StunWindowCapture class + try: + capture_window = WindowCapture( + None, "equip", config) + except: + # StunWindowCapture.list_window_names() + print("Game not running, exiting") + # capture_window = cv.VideoCapture("snip_slam.mp4") + return + + # initialize the StunVision class + vision_stun = Vision() + + outer_loop_time = time() + + needles = [] + hsvs = [] + tresholds = [] + masks = [] + emitters = [] + + if EMITTER_TO_USE == EMITTER_MULTI: + emitters.append(EMITTER_RING) + emitters.append(EMITTER_WAND) + emitters.append(EMITTER_SWORD) + emitters.append(EMITTER_AMU) + emitters.append(EMITTER_STAFF) + else: + emitters.append(EMITTER_TO_USE) + + energy_counter = 0 + + for emitter in emitters: + if overlay.run_mode == 'stopped': + break + if emitter == EMITTER_MUSH: + include_books(needles, hsvs, tresholds, masks) + include_mushs(needles, hsvs, tresholds, masks) + include_pots(needles, hsvs, tresholds, masks) + include_bags(needles, hsvs, tresholds, masks) + elif emitter == EMITTER_AMU: + include_books(needles, hsvs, tresholds, masks) + include_amus(needles, hsvs, tresholds, masks) + include_bags(needles, hsvs, tresholds, masks) + elif emitter == EMITTER_MAIN: + include_books(needles, hsvs, tresholds, masks) + include_chests(needles, hsvs, tresholds, masks) + include_keys(needles, hsvs, tresholds, masks) + include_pots(needles, hsvs, tresholds, masks) + include_bags(needles, hsvs, tresholds, masks) + include_coins(needles, hsvs, tresholds, masks) + include_runes(needles, hsvs, tresholds, masks) + elif emitter == EMITTER_SWORD: + include_books(needles, hsvs, tresholds, masks) + include_swords(needles, hsvs, tresholds, masks) + include_bags(needles, hsvs, tresholds, masks) + elif emitter == EMITTER_STAFF: + include_books(needles, hsvs, tresholds, masks) + include_staffs(needles, hsvs, tresholds, masks) + include_bags(needles, hsvs, tresholds, masks) + elif emitter == EMITTER_RING: + include_books(needles, hsvs, tresholds, masks) + include_rings(needles, hsvs, tresholds, masks) + include_bags(needles, hsvs, tresholds, masks) + elif emitter == EMITTER_WAND: + include_books(needles, hsvs, tresholds, masks) + include_wands(needles, hsvs, tresholds, masks) + include_bags(needles, hsvs, tresholds, masks) + + c_needle = cv.imread("equip/chests/chest_4_32.jpg", cv.IMREAD_UNCHANGED) + c_mask = cv.imread("equip/chests/chest_4_32-mask.png", cv.IMREAD_COLOR) + k_needle = cv.imread("equip/keys/key_4_32.jpg", cv.IMREAD_UNCHANGED) + k_mask = cv.imread("equip/keys/key_4_32-mask.png", cv.IMREAD_COLOR) + dig_button = cv.imread("dig/ok_button.jpg", cv.IMREAD_UNCHANGED) + loop_time_p = time() + + while True: + if overlay.run_mode == 'paused': + # cv.waitKey(500) + if (time() - loop_time_p) >= 5: + loop_time_p = time() + print("pausing") + continue + elif overlay.run_mode == 'stopped': + break + + try: + # get an updated image of the game + screenshot = capture_window.get_screenshot() + # screenshot = cv.imread("buffbar.jpg") + except: + capture_window.release() + print("Game window not available - shutting down application") + break + # cv.imshow("screenshot", screenshot) + # cv.waitKey(150) + # continue + if energy_counter >= ENERGY_TO_USE: + energy_counter = 0 + break + + spawn_1 = find_emitter(emitter, vision_stun, screenshot, 1) + if len(spawn_1) == 1: + spawn_button_active = True + points = vision_stun.get_click_points(spawn_1) + for i in range(0, SPAWN_COUNT, 1): + click_point(config, points[0][0], points[0][1]) + energy_counter = energy_counter + 1 + overlay.update_status_label(emitter, ENERGY_TO_USE - energy_counter) + if overlay.run_mode == 'stopped' or overlay.run_mode == 'paused': + break + else: + spawn_0 = find_emitter(emitter, vision_stun, screenshot, 0) + points = vision_stun.get_click_points(spawn_0) + for point in points: + click_point(config, points[0][0], points[0][1]) + + if overlay.run_mode == 'stopped' or overlay.run_mode == 'paused': + break + continue + + cv.waitKey(500) + + if emitter == EMITTER_MAIN: + while True: + screenshot = capture_window.get_screenshot() + c_rectangles = vision_stun.find(screenshot, c_needle, 0.95, 1, True, c_mask) + k_rectangles = vision_stun.find(screenshot, k_needle, 0.95, 1, True, k_mask) + if (len(c_rectangles) == 1) and (len(k_rectangles) == 1): + c_point = vision_stun.get_click_points(c_rectangles)[0] + k_point = vision_stun.get_click_points(k_rectangles)[0] + move_tile(config, k_point, c_point) + else: + break + + for rer in range(0, len(needles), 1): + loop_time = time() + while True: + if (time() - loop_time) >= 60: + break + screenshot = capture_window.get_screenshot_by_area(config.returnOKWindowPos()) + rectangles = vision_stun.find(screenshot, dig_button, 0.5, 1) + if len(rectangles) == 1: + pointis = vision_stun.get_click_points(rectangles) + for pointi in pointis: + dig_point(pointi[0] + config.returnOKWindowPos()[2], + pointi[1] + config.returnOKWindowPos()[3], 150) + cv.waitKey(60000) + continue + # do object detection + screenshot = capture_window.get_screenshot() + # processed_screenshot = vision_stun.apply_hsv_filter(screenshot, hsvs[rer]) + # processed_needle = vision_stun.apply_hsv_filter(needles[rer], hsvs[rer]) + + rectangles = vision_stun.find_by_mask_and_validate(screenshot, needles[rer], masks[rer], 5) + # draw the detection results onto the original image + # output_image = vision_stun.draw_rectangles(screenshot, rectangles) + # cv.imshow("output_image", output_image) + # cv.waitKey(150) + + if len(rectangles) is not 5: + break + if overlay.run_mode == 'stopped' or overlay.run_mode == 'paused': + break + + # sort rectangles by top + rectangles = sorted(rectangles, key=itemgetter(1)) + + points = vision_stun.get_click_points(rectangles) + + move_breaker = check_and_move_tile(capture_window, vision_stun, config, + [70, 70, rectangles[0][0] + 70, rectangles[0][1]], + needles[rer], + hsvs[rer], tresholds[rer], masks[rer], + points[1], [points[0][0] + 70, points[0][1]]) + if move_breaker: + break + if overlay.run_mode == 'stopped' or overlay.run_mode == 'paused': + break + move_breaker = check_and_move_tile(capture_window, vision_stun, config, + [70, 70, rectangles[0][0], rectangles[0][1] + 70], + needles[rer], + hsvs[rer], tresholds[rer], masks[rer], + points[2], [points[0][0], points[0][1] + 70]) + if move_breaker: + break + if overlay.run_mode == 'stopped' or overlay.run_mode == 'paused': + break + move_breaker = check_and_move_tile(capture_window, vision_stun, config, + [70, 70, rectangles[0][0] + 70, rectangles[0][1] + 70], + needles[rer], hsvs[rer], tresholds[rer], masks[rer], + points[3], [points[0][0] + 70, points[0][1] + 70]) + if move_breaker: + break + move_tile(config, points[4], [points[0][0], points[0][1]]) + if overlay.run_mode == 'stopped' or overlay.run_mode == 'paused': + break + if overlay.run_mode == 'stopped' or overlay.run_mode == 'paused': + break + # debug the loop rate + print('FPS {}'.format(1 / (time() - outer_loop_time))) + outer_loop_time = time() + cv.waitKey(150) + + +def check_and_move_tile(capture_win, visio, conf, rect, needl, hsv, tresh, mask, point_source, point_dest): + screenshot_p = capture_win.get_screenshot() + screenshot_p_w = screenshot_p.shape[1] + screenshot_p_h = screenshot_p.shape[0] + w = rect[0] + h = rect[1] + x = rect[2] + y = rect[3] + if h >= screenshot_p_h or w >= screenshot_p_w: + return True + + screenshot_pos = screenshot_p[y:y + h, x:x + w] # (w, h, x+w, y+h) + # processed_screenshot = visio.apply_hsv_filter(screenshot_pos, hsv) + # processed_needle = visio.apply_hsv_filter(needl, hsv) + result2 = cv.matchTemplate(screenshot_pos, needl, cv.TM_CCOEFF_NORMED) + _minVal2, _maxVal2, minLoc2, maxLoc2 = cv.minMaxLoc(result2, None) + # rectangles2 = visio.find(screenshot_pos, needl, tresh, 1, True, mask) + # output_by_area = vision_stun.draw_rectangles(screenshot_pos2, rectangles) + # cv.imshow("output_image_by_area", screenshot_pos) + # cv.waitKey(150) + # print("thresh in movecheck:" + str(_maxVal2)) + if _maxVal2 <= 0.9: + move_tile(conf, point_source, point_dest) + + return False + + +def click_point(conf, x, y): + offset_left = conf.returnEquipmentWindowPos()[2] + offset_down = conf.returnEquipmentWindowPos()[3] + pydirectinput.moveTo(x + offset_left, y + offset_down) + pydirectinput.mouseDown() + w = random.randint(1, 50) + cv.waitKey(30 + w) + pydirectinput.mouseUp() + + +def move_tile(conf, point_source, point_dest): + offset_left = conf.returnEquipmentWindowPos()[2] + offset_down = conf.returnEquipmentWindowPos()[3] + pydirectinput.moveTo(point_source[0] + offset_left, point_source[1] + offset_down) + pydirectinput.mouseDown() + w = random.randint(25, 50) + cv.waitKey(100 + w) + pydirectinput.moveTo(point_dest[0] + offset_left, point_dest[1] + offset_down) + pydirectinput.mouseUp() + cv.waitKey(400 + w) + + +def find_emitter(emitter_to_use, vis, screen, layer): + if emitter_to_use == EMITTER_MUSH: + if layer == 0: + needle = cv.imread("equip/emitters/mush_e_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/mush_e_32-mask.png", cv.IMREAD_COLOR) + return vis.find(screen, needle, 0.95, 1, True, mask) + else: + needle = cv.imread("equip/emitters/mush_e2_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/mush_e2_32-mask.png", cv.IMREAD_COLOR) + return vis.find(screen, needle, 0.98, 1, True, mask) + elif emitter_to_use == EMITTER_AMU: + if layer == 0: + needle = cv.imread("equip/emitters/amu_e_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/amu_e_32-mask.png", cv.IMREAD_COLOR) + return vis.find(screen, needle, 0.95, 1, True, mask) + else: + needle = cv.imread("equip/emitters/amu_e2_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/amu_e2_32-mask.png", cv.IMREAD_COLOR) + return vis.find(screen, needle, 0.95, 1, True, mask) + elif emitter_to_use == EMITTER_MAIN: + if layer == 0: + needle = cv.imread("equip/emitters/main_e1_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/main_e1_32-mask.png", cv.IMREAD_COLOR) + return vis.find(screen, needle, 0.95, 1, True, mask) + else: + needle = cv.imread("equip/emitters/main_e2_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/main_e2_32-mask.png", cv.IMREAD_COLOR) + return vis.find(screen, needle, 0.95, 1, True, mask) + elif emitter_to_use == EMITTER_SWORD: + if layer == 0: + needle = cv.imread("equip/emitters/sword_e1_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/sword_e1_32-mask.png", cv.IMREAD_COLOR) + return vis.find(screen, needle, 0.95, 1, True, mask) + else: + needle = cv.imread("equip/emitters/sword_e2_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/sword_e2_32-mask.png", cv.IMREAD_COLOR) + return vis.find(screen, needle, 0.98, 1, True, mask) + elif emitter_to_use == EMITTER_STAFF: + if layer == 0: + needle = cv.imread("equip/emitters/staff_e1_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/staff_e1_32-mask.png", cv.IMREAD_COLOR) + return vis.find(screen, needle, 0.95, 1, True, mask) + else: + needle = cv.imread("equip/emitters/staff_e2_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/staff_e2_32-mask.png", cv.IMREAD_COLOR) + return vis.find(screen, needle, 0.99, 1, True, mask) + elif emitter_to_use == EMITTER_RING: + if layer == 0: + needle = cv.imread("equip/emitters/ring_e1_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/ring_e1_32-mask.png", cv.IMREAD_COLOR) + return vis.find(screen, needle, 0.95, 1, True, mask) + else: + needle = cv.imread("equip/emitters/ring_e2_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/ring_e2_32-mask.png", cv.IMREAD_COLOR) + return vis.find(screen, needle, 0.95, 1, True, mask) + elif emitter_to_use == EMITTER_WAND: + if layer == 0: + needle = cv.imread("equip/emitters/wand_e1_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/wand_e1_32-mask.png", cv.IMREAD_COLOR) + return vis.find(screen, needle, 0.95, 1, True, mask) + else: + needle = cv.imread("equip/emitters/wand_e2_32.jpg", cv.IMREAD_UNCHANGED) + mask = cv.imread("equip/emitters/wand_e2_32-mask.png", cv.IMREAD_COLOR) + return vis.find(screen, needle, 0.96, 1, True, mask) + + +def include_chests(needles, hsv, tresh, mask): + needles.append(cv.imread("equip/chests/chest_1_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.95) + mask.append(cv.imread("equip/chests/chest_1_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/chests/chest_2_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.95) + mask.append(cv.imread("equip/chests/chest_2_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/chests/chest_3_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/chests/chest_3_32-mask.png", cv.IMREAD_COLOR)) + + +def include_books(needles, hsv, tresh, mask): + needles.append(cv.imread("equip/books/book_1_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/books/book_1_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/books/book_2_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.9) + mask.append(cv.imread("equip/books/book_2_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/books/book_3_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.87) + mask.append(cv.imread("equip/books/book_3_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/books/book_4_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/books/book_4_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/books/book_5_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/books/book_5_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/books/book_6_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.9) + mask.append(cv.imread("equip/books/book_6_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/books/book_7_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/books/book_7_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/books/book_8_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/books/book_8_32-mask.png", cv.IMREAD_COLOR)) + + +def include_keys(needles, hsv, tresh, mask): + needles.append(cv.imread("equip/keys/key_1_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/keys/key_1_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/keys/key_2_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/keys/key_2_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/keys/key_3_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/keys/key_3_32-mask.png", cv.IMREAD_COLOR)) + + +def include_pots(needles, hsv, tresh, mask): + needles.append(cv.imread("equip/pots/pot_1_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/pots/pot_1_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/pots/pot_2_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/pots/pot_2_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/pots/pot_3_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.94) + mask.append(cv.imread("equip/pots/pot_3_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/pots/pot_4_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/pots/pot_4_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/pots/pot_5_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/pots/pot_5_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/pots/pot_6_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/pots/pot_6_32-mask.png", cv.IMREAD_COLOR)) + + +def include_bags(needles, hsv, tresh, mask): + needles.append(cv.imread("equip/bags/bag_1_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/bags/bag_1_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/bags/bag_2_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.88) + mask.append(cv.imread("equip/bags/bag_2_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/bags/bag_3_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/bags/bag_3_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/bags/bag_4_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/bags/bag_4_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/bags/bag_5_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/bags/bag_5_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/bags/bag_6_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/bags/bag_6_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/bags/bag_7_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/bags/bag_7_32-mask.png", cv.IMREAD_COLOR)) + + +def include_coins(needles, hsv, tresh, mask): + needles.append(cv.imread("equip/coins/coin_1_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/coins/coin_1_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/coins/coin_2_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/coins/coin_2_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/coins/coin_3_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/coins/coin_3_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/coins/coin_4_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/coins/coin_4_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/coins/coin_5_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/coins/coin_5_32-mask.png", cv.IMREAD_COLOR)) + + +def include_runes(needles, hsv, tresh, mask): + needles.append(cv.imread("equip/runes/rune_1_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/runes/rune_1_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/runes/rune_2_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/runes/rune_2_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/runes/rune_3_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/runes/rune_3_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/runes/rune_4_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/runes/rune_4_32-mask.png", cv.IMREAD_COLOR)) + + +def include_mushs(needles, hsv, tresh, mask): + needles.append(cv.imread("equip/mushrooms/mush_1_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/mushrooms/mush_1_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/mushrooms/mush_2_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/mushrooms/mush_2_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/mushrooms/mush_3_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/mushrooms/mush_3_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/mushrooms/mush_4_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/mushrooms/mush_4_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/mushrooms/mush_5_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/mushrooms/mush_5_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/mushrooms/mush_6_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/mushrooms/mush_6_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/mushrooms/mush_7_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/mushrooms/mush_7_32-mask.png", cv.IMREAD_COLOR)) + + +def include_amus(needles, hsv, tresh, mask): + needles.append(cv.imread("equip/amus/amu_1_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.9) + mask.append(cv.imread("equip/amus/amu_1_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/amus/amu_2_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.9) + mask.append(cv.imread("equip/amus/amu_2_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/amus/amu_3_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/amus/amu_3_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/amus/amu_4_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/amus/amu_4_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/amus/amu_5_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/amus/amu_5_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/amus/amu_6_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/amus/amu_6_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/amus/amu_7_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/amus/amu_7_32-mask.png", cv.IMREAD_COLOR)) + + +def include_swords(needles, hsv, tresh, mask): + needles.append(cv.imread("equip/swords/sword_1_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/swords/sword_1_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/swords/sword_2_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/swords/sword_2_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/swords/sword_3_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/swords/sword_3_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/swords/sword_4_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/swords/sword_4_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/swords/sword_5_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/swords/sword_5_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/swords/sword_6_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/swords/sword_6_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/swords/sword_7_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/swords/sword_7_32-mask.png", cv.IMREAD_COLOR)) + + +def include_staffs(needles, hsv, tresh, mask): + needles.append(cv.imread("equip/staffs/staff_1_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/staffs/staff_1_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/staffs/staff_2_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/staffs/staff_2_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/staffs/staff_3_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/staffs/staff_3_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/staffs/staff_4_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/staffs/staff_4_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/staffs/staff_5_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/staffs/staff_5_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/staffs/staff_6_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/staffs/staff_6_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/staffs/staff_7_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/staffs/staff_7_32-mask.png", cv.IMREAD_COLOR)) + + +def include_rings(needles, hsv, tresh, mask): + needles.append(cv.imread("equip/rings/ring_1_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.925) + mask.append(cv.imread("equip/rings/ring_1_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/rings/ring_2_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.94) + mask.append(cv.imread("equip/rings/ring_2_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/rings/ring_3_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/rings/ring_3_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/rings/ring_4_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/rings/ring_4_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/rings/ring_5_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/rings/ring_5_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/rings/ring_6_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.91) + mask.append(cv.imread("equip/rings/ring_6_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/rings/ring_7_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/rings/ring_7_32-mask.png", cv.IMREAD_COLOR)) + + +def include_wands(needles, hsv, tresh, mask): + needles.append(cv.imread("equip/wands/wand_1_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/wands/wand_1_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/wands/wand_2_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/wands/wand_2_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/wands/wand_3_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/wands/wand_3_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/wands/wand_4_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/wands/wand_4_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/wands/wand_5_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/wands/wand_5_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/wands/wand_6_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/wands/wand_6_32-mask.png", cv.IMREAD_COLOR)) + + needles.append(cv.imread("equip/wands/wand_7_32.jpg", cv.IMREAD_UNCHANGED)) + hsv.append(HSV_DEFAULT) + tresh.append(0.93) + mask.append(cv.imread("equip/wands/wand_7_32-mask.png", cv.IMREAD_COLOR)) + + +if __name__ == "__main__": + run() diff --git a/equipment_overlay.py b/equipment_overlay.py new file mode 100644 index 0000000..9a672a2 --- /dev/null +++ b/equipment_overlay.py @@ -0,0 +1,121 @@ +# Run tkinter code in another thread +import threading +import tkinter as tk +from tkinter import ttk + + +class EquipmentOverlay(threading.Thread): + + def __init__(self, config): + threading.Thread.__init__(self) + + self.run_mode = 'init' + + self.root = tk.Tk + + self.energy_use = tk.StringVar + self.spawn_use = tk.StringVar + self.emitter_use = tk.StringVar + + self.EnergyLabel = tk.Label + self.EnergyEntry = tk.Entry + self.SpawnLabel = tk.Label + self.SpawnEntry = tk.Entry + self.EmitterLabel = tk.Label + self.Emitter_Box = ttk.Combobox + + self.StartButton = tk.Button + self.StopButton = tk.Button + self.PauseButton = tk.Button + self.TkPosition = '135x115+60+600' + + self.StatusLabel = tk.Label + + # self.TkPosition = config.returnEnemyPlayerOverlayPos() + self.start() + + def run(self): + self.root = tk.Tk() + + self.energy_use = tk.StringVar(self.root, value='2000') + self.spawn_use = tk.StringVar(self.root, value='25') + self.emitter_use = tk.StringVar(self.root, value='multi') + + self.EnergyLabel = tk.Label(self.root, text="Energy:", font=("Helvetica", 10, "bold"), + background="grey") + self.EnergyLabel.grid(row=0, column=0) + self.EnergyEntry = tk.Entry(self.root, textvariable=self.energy_use, font=("Helvetica", 10, "bold"), width='12') + + self.EnergyEntry.grid(row=0, column=1, columnspan=2) + + self.SpawnLabel = tk.Label(self.root, text="Spawn:", font=("Helvetica", 10, "bold"), + background="grey") + self.SpawnLabel.grid(row=1, column=0) + self.SpawnEntry = tk.Entry(self.root, textvariable=self.spawn_use, font=("Helvetica", 10, "bold"), width='12') + + self.SpawnEntry.grid(row=1, column=1, columnspan=2) + + self.EmitterLabel = tk.Label(self.root, text="Emitter:", font=("Helvetica", 10, "bold"), + background="grey") + self.EmitterLabel.grid(row=2, column=0) + self.Emitter_Box = ttk.Combobox(self.root, textvariable=self.emitter_use, font=("Helvetica", 8, "bold"), + width='10') + self.Emitter_Box['values'] = ('multi', 'main', 'mushroom', 'amulett', 'sword', 'staff', 'wand', 'ring') + self.Emitter_Box.grid(row=2, column=1, columnspan=2, sticky='w') + + # self.EnemyLabel.pack() + self.ButtonFrame = tk.Frame(self.root) + self.StartButton = tk.Button(self.ButtonFrame, text="Start", command=self.start_button_callback, width='5') + self.StartButton.grid(row=0, column=0) + self.StopButton = tk.Button(self.ButtonFrame, text="Stop", command=self.stop_button_callback, width='5', + state=tk.DISABLED) + self.StopButton.grid(row=0, column=1) + self.PauseButton = tk.Button(self.ButtonFrame, text="Pause", command=self.pause_button_callback, width='5', + state=tk.DISABLED) + self.PauseButton.grid(row=0, column=2) + self.ButtonFrame.grid(row=3, column=0, columnspan=2) + + self.StatusLabel = tk.Label(self.root, text="", font=("Helvetica", 10, "bold"), + background="grey") + self.StatusLabel.grid(row=4, column=0, columnspan=2) + + # self.ClearButton.pack(side="top") + self.root.geometry(self.TkPosition) + self.root.overrideredirect(1) # fenster ohne aussen rum :-) + #self.root.attributes('-alpha', 0.7) # fenster transparent + self.root.attributes('-topmost', 1) # fenster immer im vordergrund + # self.root.wm_attributes("-disabled", True) + self.root.configure(background='black') + self.root.mainloop() + + def update_enemy_label(self, _text): + self.EnergyLabel.configure(text=_text) + # self.EnemyLabel.pack() + + def start_button_callback(self): + self.StartButton.configure(state=tk.DISABLED) + self.StopButton.configure(state=tk.NORMAL) + self.PauseButton.configure(state=tk.NORMAL) + self.StatusLabel.configure(text='') + self.run_mode = 'started' + + # self.EnemyLabel.pack() + + def stop_button_callback(self): + self.StartButton.configure(state=tk.NORMAL) + self.StopButton.configure(state=tk.DISABLED) + self.PauseButton.configure(state=tk.DISABLED) + self.run_mode = 'stopped' + + def pause_button_callback(self): + self.StartButton.configure(state=tk.NORMAL) + self.StopButton.configure(state=tk.NORMAL) + self.PauseButton.configure(state=tk.DISABLED) + self.run_mode = 'paused' + + def get_run_mode(self): + return self.run_mode + + def update_status_label(self, emitter, energy_to_go): + text = emitter + ": " + str(energy_to_go) + self.StatusLabel.configure(text=text) \ No newline at end of file