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
def enter(self, world):
if self._level is not None:
+ for generator in self._generators:
+ generator.unpause()
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._generators = self.actors.add_layer("enemy generators", level=8)
+ self._enemies = self.actors.add_layer("enemies", level=7)
self._vehicle = Vehicle.current(world)
self._mode = 'walk'
self._angle = 0
+ self._init_items()
+ self._init_friendly_roaches()
+ self._init_generators()
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 exit(self, world):
+ for generator in self._generators:
+ # We don't want these running while we're on other levels, but we don't want to delete them
+ # here either (because of the vehicle management view)
+ generator.pause()
+
+ def _init_generators(self):
+ for generator in self._level.enemy_generators:
+ self._generators.add(generator)
+ generator.unpause()
+
def _init_roaches(self, world):
x, y = self._level.start_pos
self._level_layer = 'floor'
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((
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):
self._mode = 'walk'
elif self._level.is_keypad(x, y):
self._level.press_keypad(x, y, self._roaches)
- elif self._level.is_on_friend(x, y):
- friend = self._level.remove_friend(x, y)
+ elif self._level.friend_at(x, y):
+ friend = self._level.friend_at(x, y)
+ self._level.remove_friend(friend)
self._friends.remove(friend)
self._add_roach()
+ elif self._level.item_at(x, y):
+ item = self._level.item_at(x, y)
+ self._level.remove_item(item)
+ self._items.remove(item)
+ 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')