"""Module providing a fishing agent.""" import os from threading import Thread import time import cv2 as cv import numpy as np import pyautogui class FishingAgent: def __init__(self, mainAgent) -> None: self.mainAgent = mainAgent # interpolate here_path to get the path to the fishing target image assetPath = os.path.join( os.path.dirname(os.path.realpath(__file__)), "assets" ) assetPath = os.path.dirname(os.path.realpath(__file__)) print(assetPath) self.fishingBobber = cv.imread( os.path.join( assetPath, "assets", "Bobber.png" ) ) self.fishingThread = None def agentLog(self, log: str): print("Fishing Agent: " + log) 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 run(self): if self.mainAgent.currImg is None: print("Image capture not found! Did you start the screen capture thread?") return print("Starting fishing thread in 10 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()