Пример #1
0
class Crossover(Sprite):
    def __init__(self, area):
        super(Crossover, self).__init__(None)
        self.collidable = False
        self.obey_gravity = False
        self.crossover_area = area

    def on_added(self, layer):
        self.effect = ShakeEffect(self)
        self.effect.start()

    def on_removed(self, layer):
        self.effect.stop()

    def update_image(self):
        if not self.image:
            possible_sprites = []
            new_rect = pygame.Rect(0, 0, 0, 0)

            for layer in self.crossover_area.layers:
                if layer.index == self.layer.index:
                    for sprite in layer.quad_tree.get_sprites(self.rect):
                        if new_rect.width == 0:
                            new_rect = sprite.rect
                        else:
                            new_rect = new_rect.union(sprite.rect)

                    break

            if new_rect.width == 0:
                self.hide()
                return

            w = random.randint(300, 600)
            h = random.randint(300, 600)

            try:
                x = random.randint(max(new_rect.left, self.rect.left),
                                   min(new_rect.right, self.rect.right))
                y = random.randint(max(new_rect.top, self.rect.top),
                                   min(new_rect.bottom, self.rect.bottom))
            except ValueError:
                self.hide()
                return

            self.rect = pygame.Rect(x, y, w, h)

            self.image = pygame.Surface(self.rect.size).convert_alpha()
            self.image.fill((0, 0, 0, 0))

            for sprite in layer.quad_tree.get_sprites(self.rect):
                pos = (sprite.rect.left - self.rect.left,
                       sprite.rect.top - self.rect.top)
                self.image.blit(sprite.image, pos)
Пример #2
0
class Crossover(Sprite):
    def __init__(self, area):
        super(Crossover, self).__init__(None)
        self.collidable = False
        self.obey_gravity = False
        self.crossover_area = area

    def on_added(self, layer):
        self.effect = ShakeEffect(self)
        self.effect.start()

    def on_removed(self, layer):
        self.effect.stop()

    def update_image(self):
        if not self.image:
            possible_sprites = []
            new_rect = pygame.Rect(0, 0, 0, 0)

            for layer in self.crossover_area.layers:
                if layer.index == self.layer.index:
                    for sprite in layer.quad_tree.get_sprites(self.rect):
                        if new_rect.width == 0:
                            new_rect = sprite.rect
                        else:
                            new_rect = new_rect.union(sprite.rect)

                    break

            if new_rect.width == 0:
                self.hide()
                return

            w = random.randint(300, 600)
            h = random.randint(300, 600)

            try:
                x = random.randint(max(new_rect.left, self.rect.left),
                                   min(new_rect.right, self.rect.right))
                y = random.randint(max(new_rect.top, self.rect.top),
                                   min(new_rect.bottom, self.rect.bottom))
            except ValueError:
                self.hide()
                return

            self.rect = pygame.Rect(x, y, w, h)

            self.image = pygame.Surface(self.rect.size).convert_alpha()
            self.image.fill((0, 0, 0, 0))

            for sprite in layer.quad_tree.get_sprites(self.rect):
                pos = (sprite.rect.left - self.rect.left,
                       sprite.rect.top - self.rect.top)
                self.image.blit(sprite.image, pos)
Пример #3
0
    def prepare_launch(self):
        player = self.level.engine.player
        self.explosion = ExplosionParticleSystem(self)
        self.explosion.max_lifetime = 1
        self.explosion.min_lifetime = 0.5
        self.explosion.min_particles = 30
        self.explosion.max_particles = 40
        self.explosion.max_scale = 0.4
        self.explosion.min_angle = -(4 * math.pi) / 3
        self.explosion.max_angle = -(5 * math.pi) / 3
        self.explosion.repeat = True
        self.explosion.start(self.container.rect.centerx,
                             self.large_probe.rect.bottom)

        shake_effect = ShakeEffect(self.large_probe)
        shake_effect.start()

        timer = Timer(3000, self.launch_probe, one_shot=True)
        timer.start()
Пример #4
0
 def on_added(self, layer):
     self.effect = ShakeEffect(self)
     self.effect.start()
Пример #5
0
 def on_added(self, layer):
     self.effect = ShakeEffect(self)
     self.effect.start()