예제 #1
0
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()
예제 #2
0
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)
예제 #3
0
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()