import os import pygame class Camera(pygame.sprite.Group): def __init__(self): super().__init__() # General Setup self.display_surface = pygame.display.get_surface() self.half_width = self.display_surface.get_size()[0] // 2 self.half_height = self.display_surface.get_size()[1] // 2 self.offset = pygame.math.Vector2(100, 200) # Creating the floor script_dir = os.path.dirname(os.path.abspath(__file__)) image_path = os.path.join( script_dir, '..', 'assets', 'graphics', 'tilemap', 'ground.png') self.floor_surf = pygame.image.load(image_path).convert() self.floor_rect = self.floor_surf.get_rect(topleft=(0, 0)) def custom_draw(self, player): self.sprite_type = player.sprite_type # Getting the offset self.offset.x = player.rect.centerx - self.half_width self.offset.y = player.rect.centery - self.half_height # Drawing the floor floor_offset_pos = self.floor_rect.topleft - self.offset self.display_surface.blit(self.floor_surf, floor_offset_pos) for sprite in sorted(self.sprites(), key=lambda sprite: sprite.rect.centery): offset_pos = sprite.rect.topleft - self.offset self.display_surface.blit(sprite.image, offset_pos) def enemy_update(self, player): enemy_sprites = [sprite for sprite in self.sprites() if hasattr( sprite, 'sprite_type') and sprite.sprite_type == 'enemy'] for enemy in enemy_sprites: enemy.enemy_update(player)