diff --git a/game.py b/game.py index 7814b53..dc7397f 100644 --- a/game.py +++ b/game.py @@ -2,6 +2,7 @@ import pygame # ty: ignore[unresolved-import] import sys import random import math +import os from scripts.entities import Enemy, Player from scripts.utils import load_image from scripts.utils import load_images @@ -76,7 +77,7 @@ class Game: self.tilemap: Tilemap = Tilemap(game=self, tile_size=16) - self.level: int | str = 0 + self.level: int = 0 self.load_level(map_id=self.level) self.screenshake = 0 @@ -102,6 +103,7 @@ class Game: for spawner in self.tilemap.extract(id_pairs=[("spawners", 0), ("spawners", 1)]): if spawner["variant"] == 0: self.player.pos = spawner["pos"] + self.player.air_time = 0 else: self.enemies.append(Enemy(game=self, pos=spawner["pos"], size=(8, 15))) @@ -110,6 +112,9 @@ class Game: self.sparks: list[Spark] = [] self.dead: int = 0 self.scroll: list[float] = [0, 0] + self.transition: int = -30 + + def run(self) -> None: while self.running: @@ -123,6 +128,14 @@ class Game: self.screenshake = max(0, self.screenshake - 1) + if not len(self.enemies): + self.transition += 1 + if self.transition > 30: + self.level = min(self.level + 1, len(os.listdir("data/maps")) - 1) + self.load_level(self.level) + if self.transition < 0: + self.transition += 1 + self.scroll[0] += ( self.player.rect().centerx - self.display.get_width() / 2 @@ -272,6 +285,17 @@ class Game: if event.key == pygame.K_m: self.boost = False + if self.transition: + transition_surface = pygame.Surface(self.display.get_size()) + pygame.draw.circle( + transition_surface, + (255, 255, 255), + (self.display.get_width() // 2, self.display.get_height() // 2), + (30 - abs(self.transition)) * 8, + ) + transition_surface.set_colorkey((255, 255, 255)) + self.display.blit(transition_surface, (0, 0)) + screenshake_offset = ( random.random() * self.screenshake - self.screenshake / 2, random.random() * self.screenshake - self.screenshake / 2,