diff --git a/equipment_main.py b/equipment_main.py index 010f990..188b021 100644 --- a/equipment_main.py +++ b/equipment_main.py @@ -17,13 +17,15 @@ EMITTER_SWORD = "sword" EMITTER_STAFF = "staff" EMITTER_WAND = "wand" EMITTER_RING = "ring" +EMITTER_ALL = "all" HSV_DEFAULT = HsvFilter(0, 0, 0, 179, 255, 255, 0, 0, 0, 0) def run(): - EMITTER_TO_USE = EMITTER_WAND + EMITTER_TO_USE = EMITTER_ALL SPAWN_COUNT = 15 + ENERGY_TO_USE = 3000 # initialize the user-class config = UserConfigs() @@ -46,152 +48,168 @@ def run(): hsvs = [] tresholds = [] masks = [] + emitters = [] - if EMITTER_TO_USE == 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_TO_USE == EMITTER_AMU: - include_books(needles, hsvs, tresholds, masks) - include_amus(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) - elif EMITTER_TO_USE == 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_TO_USE == EMITTER_SWORD: - include_books(needles, hsvs, tresholds, masks) - include_swords(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) - elif EMITTER_TO_USE == EMITTER_STAFF: - include_books(needles, hsvs, tresholds, masks) - include_staffs(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) - elif EMITTER_TO_USE == EMITTER_RING: - include_books(needles, hsvs, tresholds, masks) - include_rings(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) - elif EMITTER_TO_USE == EMITTER_WAND: - include_books(needles, hsvs, tresholds, masks) - include_wands(needles, hsvs, tresholds, masks) - include_bags(needles, hsvs, tresholds, masks) + if EMITTER_TO_USE == EMITTER_ALL: + emitters.append(EMITTER_RING) + emitters.append(EMITTER_WAND) + emitters.append(EMITTER_SWORD) + emitters.append(EMITTER_STAFF) + emitters.append(EMITTER_AMU) + else: + emitters.append(EMITTER_TO_USE) + energy_counter = 0 pause = True - while True: - if keyboard.is_pressed('p') == True: - pause = True - print('q pressed') - elif keyboard.is_pressed('o') == True: - pause = False - print('o pressed') - if pause: - # cv.waitKey(500) - print("pausing") - continue + for emitter in emitters: + 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) - 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 - spawn_0_location = [] - spawn_1 = find_emitter(EMITTER_TO_USE, 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]) - if keyboard.is_pressed('p') == True or pause == True: - pause = True - break - else: - spawn_0 = find_emitter(EMITTER_TO_USE, 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]) + while True: + if keyboard.is_pressed('p') == True: + pause = True + print('q pressed') + elif keyboard.is_pressed('o') == True: + pause = False + print('o pressed') + if pause: + # cv.waitKey(500) + print("pausing") + continue - if keyboard.is_pressed('p') == True or pause == True: - pause = True - break - continue - - cv.waitKey(500) - for rer in range(0, len(needles), 1): - screenshot = capture_window.get_screenshot_by_area(config.returnOKWindowPos()) - rectangles = vision_stun.find(screenshot, cv.imread("dig/ok_button.jpg", cv.IMREAD_UNCHANGED), 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 - while True: - # do object detection + try: + # get an updated image of the game 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]) + # 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 - 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) + 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 + if keyboard.is_pressed('p') == True or pause == True: + pause = True + 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 len(rectangles) is not 5: - break - if keyboard.is_pressed('p') == True or pause == True: - pause = True - break + if keyboard.is_pressed('p') == True or pause == True: + pause = True + break + continue - # sort rectangles by top - rectangles = sorted(rectangles, key=itemgetter(1)) + cv.waitKey(500) + for rer in range(0, len(needles), 1): + screenshot = capture_window.get_screenshot_by_area(config.returnOKWindowPos()) + rectangles = vision_stun.find(screenshot, cv.imread("dig/ok_button.jpg", cv.IMREAD_UNCHANGED), 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 + while True: + # 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]) - points = vision_stun.get_click_points(rectangles) + 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) - 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 keyboard.is_pressed('p') == True or pause == True: - pause = True - 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 keyboard.is_pressed('p') == True or pause == True: - pause = True - 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 keyboard.is_pressed('p') == True or pause == True: - pause = True - break - # debug the loop rate - print('FPS {}'.format(1 / (time() - loop_time))) - loop_time = time() - cv.waitKey(150) + if len(rectangles) is not 5: + break + if keyboard.is_pressed('p') == True or pause == True: + pause = True + 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 keyboard.is_pressed('p') == True or pause == True: + pause = True + 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 keyboard.is_pressed('p') == True or pause == True: + pause = True + 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 keyboard.is_pressed('p') == True or pause == True: + pause = True + break + # debug the loop rate + print('FPS {}'.format(1 / (time() - loop_time))) + loop_time = time() + cv.waitKey(150) def check_and_move_tile(capture_win, visio, conf, rect, needl, hsv, tresh, mask, point_source, point_dest):