Exemplo n.º 1
0
class Entity(pygame.sprite.Sprite):
    def __init__(self, size, start_pos, move_speed):
        super().__init__()
        self.surf = pygame.Surface(size)
        self.rect = self.surf.get_rect(center=start_pos)
        self.move_direction = Vector((0, 0))
        self.speed = move_speed

    def update(self):
        if not self.alive():
            return

        new_direction = self.get_move_direction().normalize().multiply(
            self.speed)
        if game_rules.USE_ACCELERATION:
            self.move_direction = self.move_direction.multiply(
                game_rules.ACCELERATION_DECAY).plus(new_direction)
        else:
            self.move_direction = new_direction
        self.rect.move_ip(self.move_direction.values)

    @abstractmethod
    def get_move_direction(self):
        pass

    def draw(self, surface):
        rotation = get_image_rotation_from_direction(self.move_direction)
        if self.get_image():
            image = pygame.transform.rotate(self.get_image(), rotation)
            surface.blit(image, self.rect)

    @abstractmethod
    def get_image(self):
        pass

    @staticmethod
    def load_scaled_image(image_path, scale):
        image = pygame.image.load(image_path)
        return pygame.transform.scale(image, scale)

    @property
    def x(self):
        return self.rect.centerx

    @property
    def y(self):
        return self.rect.centery

    def get_size(self):
        return self.rect.size