Enemies should not hide under the keypad
[koperkapel.git] / koperkapel / scenes / level.py
index 73573ac61f79204d4e758c227a2d7b2ab7d592d5..0aaa33d487dea765feeaa6776552fc26cefdfb3e 100644 (file)
@@ -7,7 +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 ..gamelib.items import clone_old_item, create_new_item
 from ..roaches import build_roach
 from ..vehicles.base import Vehicle
 from ..weapons import weapon_by_name
@@ -98,7 +98,7 @@ class GameLevelScene(BaseLevelScene):
         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._enemies = self.actors.add_layer("enemies", level=11)
         self._vehicle = Vehicle.current(world)
         self._mode = 'walk'
         self._angle = 0  # up
@@ -238,8 +238,25 @@ class GameLevelScene(BaseLevelScene):
 
     @defer_to_update
     def _change_vehicle(self, world):
-        vehicle = Vehicle.random()
-        world.vehicles.current = vehicle
+        x, y = self._player_pos
+
+        old_vehicle = world.vehicles.current
+
+        item = self._level.item_at(x, y)
+
+        if item and item.item_type == "vehicle":
+            world.vehicles.current = item.item_data["vehicle"]
+            self._level.remove_item(item)
+            self._items.remove(item)
+        else:
+            world.vehicles.current = "walking"
+
+        if old_vehicle != "walking":
+            dropped_vehicle = create_new_item(
+                "vehicle", (x, y), vehicle=old_vehicle)
+            self._level.items.append(dropped_vehicle)
+            self._items.add(dropped_vehicle)
+
         self._vehicle_changed()
 
     def update(self, world, engine, dt):
@@ -324,9 +341,10 @@ class GameLevelScene(BaseLevelScene):
             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)
-            self._gain_item(item)
+            if item.item_type != "vehicle":
+                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 [