X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=koperkapel%2Fscenes%2Flevel.py;h=856f4cec8e9ead960cc666a1866d48fdd38363b1;hb=03537d4fda708994f08f17ae33f461eb6fbd14ba;hp=ebd87e120d3575ff795df1caa253fadab796ff5d;hpb=029b435e6e3a79f122122c47c41bd773149e6480;p=koperkapel.git diff --git a/koperkapel/scenes/level.py b/koperkapel/scenes/level.py index ebd87e1..856f4ce 100644 --- a/koperkapel/scenes/level.py +++ b/koperkapel/scenes/level.py @@ -12,6 +12,10 @@ from ..vehicles.base import Vehicle class BaseLevelScene(Scene): """ Level scene. """ + def __init__(self): + super().__init__() + self._level = None + def enter(self, world): self._level = levels.load(world.level.name) self._tiles = self._level.tiles @@ -48,21 +52,25 @@ class BaseLevelScene(Scene): def update(self, world, engine, dt): """Fix the door and keypad positions""" for door in self._doors: - door.pos = engine.calc_offset(door.game_pos[0] * TILE_SIZE, door.game_pos[1] * TILE_SIZE) + door.pos = self.calc_offset( + door.game_pos[0] * TILE_SIZE, door.game_pos[1] * TILE_SIZE) for keypad in self._keypads: - keypad.pos = engine.calc_offset(keypad.game_pos[0] * TILE_SIZE, keypad.game_pos[1] * TILE_SIZE) + keypad.pos = self.calc_offset( + keypad.game_pos[0] * TILE_SIZE, keypad.game_pos[1] * TILE_SIZE) - def draw(self, screen, viewport): + def draw(self, screen): screen.clear() # Viewport is the position of the screen relative to the # surface. We need the position of the surface relative to # the screen for the blit, so this conversion + viewport = self.viewport screen.surface.blit(self._surfaces[self._level_layer], (0, 0), area=(viewport[0], viewport[1], WIDTH, HEIGHT)) if self._level_layer != 'floor': - screen.surface.blit(self._overlay, (0, 0), - area=(viewport[0], viewport[1], WIDTH, HEIGHT), - special_flags=pgl.BLEND_MULT) + screen.surface.blit( + self._overlay, (0, 0), + area=(viewport[0], viewport[1], WIDTH, HEIGHT), + special_flags=pgl.BLEND_MULT) self.actors.draw(screen) def on_key_down(self, key, mod, unicode): @@ -74,6 +82,8 @@ class BaseLevelScene(Scene): class GameLevelScene(BaseLevelScene): def enter(self, world): + if self._level is not None: + return super().enter(world) self._roaches = self.actors.add_layer("roaches", level=10) self._vehicle = Vehicle.current(world) @@ -89,11 +99,13 @@ class GameLevelScene(BaseLevelScene): self._avatar.pos = (WIDTH // 2, HEIGHT // 2) self._roaches.add(self._avatar) # Fix viewport offset - return [MoveViewportEvent((x * TILE_SIZE - WIDTH // 2, y * TILE_SIZE - HEIGHT // 2))] + return [ + MoveViewportEvent(( + x * TILE_SIZE - WIDTH // 2, + y * TILE_SIZE - HEIGHT // 2))] def _set_pos(self, x, y): self._player_pos = (x, y) - print('Now at ', x, y) def _can_move(self, x, y): if self._mode == 'walk': @@ -162,7 +174,7 @@ class GameLevelScene(BaseLevelScene): elif key == keys.Z: # Vehicle management from .roach_management import RoachesScene - return[ChangeSceneEvent(RoachesScene())] + return[ChangeSceneEvent(RoachesScene(level_scene=self))] if offset: return [MoveViewportEvent(offset)] return super(GameLevelScene, self).on_key_down(key, mod, unicode)