"""Module providing a fishing agent.""" import os from threading import Thread import time import cv2 as cv import numpy as np import pyautogui from core.Logger import Logger class FishingAgent: def __init__(self, monitor) -> None: self.logger = Logger("Fishing Agent") self.monitor = monitor assetPath = os.path.join( os.path.dirname(os.path.realpath(__file__)), "..\\..\\assets" ) self.fishingBobberImg = cv.imread(os.path.join(assetPath,"fishing","Bobber.png"), cv.IMREAD_GRAYSCALE) self.fishingThread = None def castLure(self): self.agentLog("Casting Lure.") # pyautogui.press('1') time.sleep(1) self.findLure() def findLure(self): if self.mainAgent.currImg is not None: self.agentLog("Searching for Bobber.") cv.imshow("Bobber", self.fishingBobber) lureLoc = cv.matchTemplate(self.mainAgent.currImg, self.fishingBobber, cv.TM_CCORR_NORMED) lureLocArray = np.array(lureLoc) minVal, maxVal, minLoc, maxLoc = cv.minMaxLoc(lureLocArray) self.moveToLure(maxLoc) else: print("No curr img") def moveToLure(self, maxLoc): if maxLoc: self.agentLog("Moving to Bobber.") pyautogui.moveTo(maxLoc) def watchLure(self): self.agentLog("Waiting for fish...") def pullLine(self): self.agentLog("Pulling line!") def test(self): while True: time.sleep(1) self.logger.log("###") point = self.monitor.findMatch(self.fishingBobberImg) pyautogui.moveTo(point[0], point[1]) def run(self): if self.monitor.screenshot is None: self.logger.log("Screenshot capture not found...") return self.logger.log("Starting fishing thread in 3 seconds...") time.sleep(3) # print("Switching to fishing hotbar (hotbar 4)") # pyautogui.keyDown('shift') # pyautogui.press('4') # pyautogui.keyUp('shift') # time.sleep(1) self.fishingThread = Thread( target=self.castLure, args=(), name="fishing thread", daemon=True) self.fishingThread.start()