Example #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)