Ejemplo n.º 1
0
    def melt(self, x, y):
        self.explosion = FlameThrowerParticleSystem(self.layer.area)
        self.explosion.start(x, y)
        self.explosion.repeat = True

        self.timer = Timer(60, self.on_melt_timer)
        self.melting = True
Ejemplo n.º 2
0
    def __init__(self, area):
        # Settings
        self.particle_filename = None
        self.min_particles = 0
        self.max_particles = 0
        self.min_initial_speed = 0
        self.max_initial_speed = 0
        self.min_acceleration = 0
        self.max_acceleration = 0
        self.min_lifetime = 0
        self.max_lifetime = 0
        self.min_scale = 0
        self.max_scale = 0
        self.min_rotation_speed = 0
        self.max_rotation_speed = 0
        self.min_angle = 0
        self.max_angle = 2 * math.pi
        self.repeat = False

        # State
        self.area = area
        self.image = None
        self.particles = []
        self.free_particles = []
        self.pos = None

        self.timer = Timer(60, self.on_particle_update)
Ejemplo n.º 3
0
    def on_artifact_grabbed(self):
        if self.artifact.grabbed:
            player = self.engine.player
            player.block_events = True
            player.velocity = (0, 0)
            player.fall()

            timer = Timer(1000, self.engine.next_level, one_shot=True)
            timer.start()
Ejemplo n.º 4
0
    def game_over(self):
        def on_timeout():
            widget.close()
            self._setup_game()
            #sys.exit(0)

        widget = self.ui_manager.show_textbox('Game Over')
        self.paused = True

        timer = Timer(2000, on_timeout, one_shot=True)
Ejemplo n.º 5
0
    def on_platforms_button_pressed(self):
        if self.platforms_on:
            return

        for platform in self.platforms:
            platform.power_on()

        self.platforms_on = True
        self.platforms_timer = Timer(self.PLATFORM_DELAY_TIME,
                                     self.next_platform)
Ejemplo n.º 6
0
    def on_dynamite_placed(self, obj):
        assert obj == self.level.dynamite

        if self.exploding or self.exploded:
            return

        self.level.dynamite.light()
        self.exploding = True

        self.detonate_timer = Timer(1000, self.start_explosion)
Ejemplo n.º 7
0
    def dead(self):
        def on_timeout():
            widget.close()
            self.restart_level()

        widget = self.ui_manager.show_textbox([
            "It's okay! You had another guy!",
            "%s lives left." % self.player.lives
        ])
        self.paused = True

        timer = Timer(2000, on_timeout, one_shot=True)
Ejemplo n.º 8
0
    def start_explosion(self):
        self.detonate_timer.stop()
        self.detonate_timer = None

        self.level.dynamite.remove()
        self.level.dynamite = None

        self.explosion = ExplosionParticleSystem(self)
        self.explosion.start(2040, 1500)

        self.explosion_timer = Timer(350, self.on_explosion_done)
        self.explosion_timer.start()
Ejemplo n.º 9
0
    def next_level(self):
        def on_timeout():
            widget.close()
            unload_images()
            self.switch_level(next_level)

        next_level = self.levels.index(self.active_level) + 1
        widget = self.ui_manager.show_textbox([
            'You got the artifact! %s left to go.' %
            (len(self.levels) - next_level),
        ])

        timer = Timer(2000, on_timeout, one_shot=True)
        timer.start()
Ejemplo n.º 10
0
    def on_tick(self):
        if not self.engine.paused and self.engine.active_level == self:
            self.active_area.tick()

            if (len(self.time_periods) > 1 and
                len(self.crossovers) + len(self.pending_crossovers) <
                self.MAX_CROSSOVERS):
                crossover_id = self.next_crossover_id
                self.next_crossover_id += 1
                timer = Timer(
                    random.randint(*self.CROSSOVER_TIME_INTERVAL),
                    lambda: self.show_crossover(crossover_id),
                    one_shot=True)
                self.pending_crossovers[crossover_id] = timer
Ejemplo n.º 11
0
    def show_level(self, level):
        timeline_attrs = {
            'font': self.small_font,
            'padding_top': 20,
        }

        widget = self.show_textbox([({
            'padding_top': 10
        }, level.name),
                                    [(timeline_attrs, time_period.name)
                                     for time_period in level.time_periods]],
                                   line_spacing=0)

        timer = Timer(2000, lambda: self.close(widget), one_shot=True)
        timer.start()

        return widget
Ejemplo n.º 12
0
    def show_crossover(self, crossover_id):
        def hide_crossover():
            crossover_sprite.remove()
            self.crossovers.remove((crossover_sprite, timer))

        self.pending_crossovers[crossover_id].stop()
        del self.pending_crossovers[crossover_id]

        key = self.active_area.key

        time_periods = [
            time_period.areas[key]
            for time_period in self.time_periods
            if (time_period != self.active_time_period and
                key in time_period.areas)
        ]

        if len(time_periods) - 1 <= 0:
            return

        i = random.randint(0, len(time_periods) - 1)


        crossover_sprite = Crossover(time_periods[i])
        crossover_sprite.rect = self.engine.camera.rect

        if random.randint(0, 5) <= 3:
            layer = self.active_area.bg_layer
        else:
            layer = self.active_area.main_layer

        layer.add(crossover_sprite)

        timer = Timer(500, hide_crossover, one_shot=True)
        timer.start()
        self.crossovers.append((crossover_sprite, timer))
Ejemplo n.º 13
0
 def start(self):
     assert not self.timer
     self.pre_start()
     self.timer = Timer(self.timer_ms, self.on_tick)
     self.timer.start()
     self.started.emit()
Ejemplo n.º 14
0
 def start(self):
     self.timer = Timer(self.delay_ms, self.stop, one_shot=True)
Ejemplo n.º 15
0
    def close(self):
        self.name = self.platform_closing_name
        self.update_image()

        timer = Timer(self.CLOSING_TIME, self.on_close_timeout, one_shot=True)
        timer.start()
Ejemplo n.º 16
0
    def open(self):
        self.name = self.platform_opening_name
        self.update_image()

        timer = Timer(self.OPENING_TIME, self.on_open_timeout, one_shot=True)
        timer.start()