X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=koperkapel%2Fscenes%2Flevel.py;h=e5d102a265d9772b9095d3915166c1bbf479dceb;hb=c3d7223fd37b42f88390aa2c299588a10daa9984;hp=0cde6515992a4dd49717719a38d7e14c54bd8da8;hpb=e5e352ddf3eba667d40a015f646eaaae95015077;p=koperkapel.git diff --git a/koperkapel/scenes/level.py b/koperkapel/scenes/level.py index 0cde651..e5d102a 100644 --- a/koperkapel/scenes/level.py +++ b/koperkapel/scenes/level.py @@ -7,6 +7,7 @@ from ..loaders.levelloader import levels from .base import ( Scene, ChangeSceneEvent, MoveViewportEvent, WorldEvent, defer_to_update) from ..constants import TILE_SIZE, WIDTH, HEIGHT +from ..gamelib.items import clone_old_item from ..roaches import build_roach from ..vehicles.base import Vehicle @@ -145,7 +146,9 @@ class GameLevelScene(BaseLevelScene): def _can_move(self, x, y): if self._mode == 'walk': - return self._level.can_walk(x, y, self._level_layer) + if not self._level.is_on_enemy(x, y): + return self._level.can_walk(x, y, self._level_layer) + return False elif self._mode == 'fly': return self._level.can_fly(x, y, self._level_layer) elif self._mode == 'crawl': @@ -169,6 +172,19 @@ class GameLevelScene(BaseLevelScene): world.roaches.append(build_roach(world)) self._vehicle_changed() + @defer_to_update + def _gain_item(self, world, item): + if item.item_type == "serum": + world.serums.append(item.item_data["serum"]) + elif item.item_type == "weapon": + old_weapon = world.weapons.current + world.weapons.current = item.item_data["weapon"] + if old_weapon != "spit": + clone = clone_old_item(item, weapon=old_weapon) + self._level.items.append(clone) + self._items.add(clone) + self._vehicle_changed() + @defer_to_update def _change_vehicle(self, world): vehicle = Vehicle.random() @@ -184,11 +200,22 @@ class GameLevelScene(BaseLevelScene): for item in self._items: item.pos = self.calc_offset( item.game_pos[0] * TILE_SIZE, item.game_pos[1] * TILE_SIZE) + self._check_enemies() + for enemy in self._enemies: + enemy.pos = self.calc_offset( + enemy.game_pos[0] * TILE_SIZE, enemy.game_pos[1] * TILE_SIZE) more = self._check_held_keys(dt) if more: events.extend(more) return events + def _check_enemies(self): + if len(self._level.enemies) != len(self._enemies): + # New nemy has spawned + for enemy in self._level.enemies: + if enemy not in self._enemies: + self._enemies.add(enemy) + def _check_held_keys(self, dt): for key in self._held_keys: self._last_key_down += dt @@ -242,6 +269,7 @@ class GameLevelScene(BaseLevelScene): item = self._level.item_at(x, y) self._level.remove_item(item) self._items.remove(item) + self._gain_item(item) elif self._level.is_exit(x, y): next_level = self._level.get_exit_level() return [