class GameController:

    def __init__(self):
        self.grid = Grid(10, 20)
        self.game_display_mode = pygame.display.set_mode((380, 443))
        self.game_display = GameDisplay(self.game_display_mode, (0, 0, 0))
        self.grid_display = GridDisplay(self.game_display_mode, self.grid)
        self.pygame_display = PygameDisplay()
        self.colour = (5, 205, 25)
        self.velocity_time = 0.4

    def start(self):
        self.grid.addObserver(self.game_display)
        self.grid.addObserver(self.grid_display)
        self.grid.addObserver(self.pygame_display)
        self.pygame_display.start()
        self.grid.set_falling_piece(Piece([(5, 1), (5, 2), (6, 1), (6, 2)], self.colour))

    def iterate(self):
        if self.grid.current_piece.block_list:
            self.grid.gravity()
        else:
            self.grid.set_falling_piece(Piece([(5, 1), (5, 2), (6, 1), (6, 2)], self.colour))

    def sleep(self):
        time.sleep(float(self.velocity_time))

    def event_handling_process(self):
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            if event.type == KEYDOWN:
                if event.key == K_LEFT:
                    self.grid.move_to_left()
                elif event.key == K_RIGHT:
                    self.grid.move_to_right()
                elif event.key == K_DOWN:
                    self.velocity_time = 0.1
            if event.type == KEYUP:
                if event.key == K_DOWN:
                    self.velocity_time = 0.4