def Update(self):
        self.counter += 1
        self.auxillaryCounter += 1

        self.level.Update()

        timeLeft = self.GetTimeLeft()

        if timeLeft == 0:
            self.next = GamePlay.LoseScene(self)

        self.UpdateCamera()
        self.EnsureSelectionValid()
        self.progress = self.level.GetProgress()
        if self.specializer.Shortcircuited(
                self.levelSeed.specialName
        ) or self.specializer.MoveToNextLevel(self.counter, self.progress):
            self.next = GamePlay.LevelUpTransition(self)

        messages = self.specializer.ShouldShowMessage(self.counter,
                                                      self.progress)
        if messages != None:
            self.next = ShowMessageOverlay(messages[0], messages[1:], self)

        self.specializer.DoSomethingInteresting(self.counter,
                                                self.auxillaryCounter,
                                                self.progress, self,
                                                self.level)

        if self.progress == 0 and self.levelSeed.specialName != 'level1':
            self.next = GamePlay.LoseScene(self)