X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=koperkapel%2Fscenes%2Flevel.py;h=60e230568575670baa72e1de4a4d3f1ffce1dab2;hb=0cc8d28563e4caeec279a0207ac160bb9fffb217;hp=a17de55d70ece5aa8a37e2bf88891580eadf728c;hpb=9aca3c6140fda947a208d75ffb2390b2a5e88939;p=koperkapel.git diff --git a/koperkapel/scenes/level.py b/koperkapel/scenes/level.py index a17de55..60e2305 100644 --- a/koperkapel/scenes/level.py +++ b/koperkapel/scenes/level.py @@ -4,7 +4,7 @@ from pgzero.constants import keys from pygame import Surface import pygame.locals as pgl from ..loaders.levelloader import levels -from .base import Scene, ChangeSceneEvent, MoveViewportEvent, defer_to_update +from .base import Scene, ChangeSceneEvent, MoveViewportEvent, WorldEvent, defer_to_update from ..constants import TILE_SIZE, WIDTH, HEIGHT from ..roaches import build_roach from ..vehicles.base import Vehicle @@ -84,16 +84,28 @@ class BaseLevelScene(Scene): class GameLevelScene(BaseLevelScene): def enter(self, world): + print('enter', world['level']['name'], self._level) if self._level is not None: return super().enter(world) self._roaches = self.actors.add_layer("roaches", level=10) self._friends = self.actors.add_layer("friendly roaches", level=9) + self._items = self.actors.add_layer("items", level=9) self._vehicle = Vehicle.current(world) self._mode = 'walk' self._angle = 0 + self._init_items() + self._init_friendly_roaches() return self._init_roaches(world) + def _init_items(self): + for item in self._level.items: + self._items.add(item) + + def _init_friendly_roaches(self): + for friend in self._level.friends: + self._friends.add(friend) + def _init_roaches(self, world): x, y = self._level.start_pos self._level_layer = 'floor' @@ -101,8 +113,6 @@ class GameLevelScene(BaseLevelScene): self._set_pos(x, y) self._avatar.pos = (WIDTH // 2, HEIGHT // 2) self._roaches.add(self._avatar) - for friend in self._level.friends: - self._friends.add(friend) # Fix viewport offset return [ MoveViewportEvent(( @@ -151,6 +161,9 @@ class GameLevelScene(BaseLevelScene): for friend in self._friends: friend.pos = self.calc_offset( friend.game_pos[0] * TILE_SIZE, friend.game_pos[1] * TILE_SIZE) + for item in self._items: + item.pos = self.calc_offset( + item.game_pos[0] * TILE_SIZE, item.game_pos[1] * TILE_SIZE) return events def _movement_key(self, key): @@ -187,6 +200,9 @@ class GameLevelScene(BaseLevelScene): friend = self._level.remove_friend(x, y) self._friends.remove(friend) self._add_roach() + elif self._level.is_exit(x, y): + next_level = self._level.get_exit_level() + return [WorldEvent('set', {'level.name': next_level}), ChangeSceneEvent(GameLevelScene())] def _fire_key(self): print('Boom')