class DrawHandler(threading.Thread): def __init__(self, handler): threading.Thread.__init__(self) self.max_rate = 60 self.rate = Rate(self.max_rate) self.cursor_pos = (0, 0) # self.image = cv2.imread('test2.jpg') self.image = np.zeros((800, 800, 3)) self.width = self.image.shape[1] self.height = self.image.shape[0] self.screen = None self.zero = (400, 400) self.meter2pix_scale = 5.0 self.overlay = Overlay() self.name = "Roundabout Map" cv2.namedWindow(self.name) cv2.setMouseCallback(self.name, self.mouse_event) self.event = 200 self.handler = handler self.scenario = Scenario(handler) handler.overlay = self.overlay def mouse_event(self, event, x, y, flags, param): self.event = 200 self.cursor_pos = (x, y) self.handler.mouse_event(event, x, y) def run(self): while True: key = cv2.waitKey(1) & 0xFF if key == 27: self.handler.shutdown() self.shutdown() break self.handler.keyboard_event(key) self.handler.overlay_event() if self.handler.update(): self.screen = copy.copy(self.image) for obj in self.handler.graph.drawables: obj.draw(self.screen, self.meter2pix_scale, self.zero) vis = copy.copy(self.screen) self.overlay.setCursor(self.cursor_pos) self.overlay.draw(vis) self.overlay.clear() if self.event > 1: self.event -= 1 cv2.imshow(self.name, vis) self.rate.sleep_rate(self.event) def shutdown(self): cv2.destroyAllWindows()
class Interaction: def __init__(self, dimensions, kbd, frame): self.frame = frame self.time = TimeHandler() self.time.pause() self.lastFrameTime = self.time.time() self.dimensions = dimensions self.back = Bg(dimensions, self.time) #creates a school of 30 fish self.fish = School(30, dimensions, self.time, self) self.keyboard = kbd self.overlay = Overlay(kbd, self, dimensions, self.frame) self.start(False) #separte method to start and reset the game without calling init def start(self, resetFish=True): self.player = Player(self.dimensions, self.time) if resetFish: self.fish.restart() self.hearts = Hearts(self.dimensions, self.time, self.overlay) self.score = Score(self.time, self.dimensions, self.overlay, self.frame) self.rod = Rod(self.player, self.dimensions[1], self.time) self.time.pause() #called by draw method to check user in bounds and if fish caught def update(self): self.back.update() #self.fish.update() self.rod.catch_fish(self.fish) if self.player.inBounds(): if self.keyboard.right: self.player.addVel(Vector(1, 0) * 40) elif self.keyboard.left: self.player.addVel(Vector(-1, 0) * 40) elif self.keyboard.down: self.rod.down() else: self.player.set() if self.player.vel.length() > 5: #checks whether player has moved and so fish would be released self.rod.playermoved() self.player.update() #updates hearts and score when fish/shark caught def catch(self, fish): if type(fish) == Shark: self.hearts.loseLife() else: self.score.incScore(10) self.rod.catch(fish) #calls draw method on all objects to draw to the canvas def debugfps(self): delta = self.time.time( ) - self.lastFrameTime #calcuralte the amount of time that has passed self.lastFrameTime = self.time.time() if (delta != 0): print("fps: " + str(1 / delta)) def draw(self, canvas): #profiling code # pr = cProfile.Profile() # pr.enable() self.debugfps() if self.time.isPlaying(): self.update() self.time.prove_running() self.back.draw(canvas) self.fish.draw(canvas) self.player.draw(canvas) self.rod.draw(canvas) self.hearts.draw(canvas) self.score.draw(canvas) self.overlay.draw(canvas)
class DrawHandler(threading.Thread): def __init__(self, handler): threading.Thread.__init__(self) self.max_rate = 60 self.rate = Rate(self.max_rate) self.cursor_pos = (0, 0) self.image = cv2.imread('test.png') self.width = self.image.shape[1] self.height = self.image.shape[0] self.screen = None self.overlay = Overlay() self.name = "Roundabout Map" cv2.namedWindow(self.name) cv2.setMouseCallback(self.name, self.mouse_event) self.event = 200 self.handler = handler handler.overlay=self.overlay def mouse_event(self, event, x, y, flags, param): self.event = 200 self.cursor_pos = (x, y) self.handler.mouse_event(event, x, y) def run(self): while True: key = cv2.waitKey(1) & 0xFF if key == 27: self.handler.shutdown() self.shutdown() break self.handler.keyboard_event(key) self.handler.overlay_event() if self.handler.update(): self.screen = copy.copy(self.image) for node in self.handler.graph.nodes: cv2.circle(self.screen, (node.pos[0], node.pos[1]), 2, (0, 0, 255), 2) for lane in node.lanes: cv_ext.draw_arrowed_polyline(self.screen, lane.points, (0, 255, 255)) for lane in self.handler.graph.lanes: cv2.polylines(self.screen, [np.array(lane.polygon)], False, (0, 255, 255)) if self.handler.mark is not None: cv2.circle(self.screen, self.handler.mark, 5, (0, 0, 255), 1) if self.handler.snapy is not None: cv2.circle(self.screen, self.handler.snapy, 5, (0, 0, 0), 1) vis = copy.copy(self.screen) self.overlay.setCursor(self.cursor_pos) self.overlay.draw(vis) self.overlay.clear() if self.event > 1: self.event -= 1 cv2.imshow(self.name, vis) self.rate.sleep_rate(self.event) def shutdown(self): cv2.destroyAllWindows()