Support applying serums.
authorSimon Cross <hodgestar@gmail.com>
Sat, 5 Mar 2016 13:29:34 +0000 (15:29 +0200)
committerSimon Cross <hodgestar@gmail.com>
Sat, 5 Mar 2016 13:29:34 +0000 (15:29 +0200)
koperkapel/scenes/roach_management.py

index d5fc67ffe749bcb3039778b2f7142e29c96d47ec..9a356ac918c9f8932b49e135b85abd0262fac4ea 100644 (file)
@@ -4,8 +4,8 @@ from pgzero.constants import keys, mouse
 from pgzero.actor import Actor
 from ..actors.buttons import ImageButton
 from ..constants import WIDTH, HEIGHT
-from ..roaches import big_roaches
-from ..serums import big_serums, SERUMS
+from ..roaches import big_roaches, roach_by_name
+from ..serums import big_serums, roach_is_serumless, SERUMS
 from ..vehicles.base import Vehicle
 from .base import Scene, ChangeSceneEvent
 
@@ -184,11 +184,32 @@ class RoachesScene(Scene):
         if world is None:
             self._update_calls.append(self._click_inventory_pad)
             return
+        roach_name = self._vehicle.roach_at(world, self._seat_pos)
+        if roach_name is None:
+            return
+        roach = roach_by_name(world, roach_name)
+        if roach is None:
+            return
+        serums = list(world.serums)
+        if self._inventory_pos >= len(serums):
+            return
+        serum = serums.pop(self._inventory_pos)
+        if roach_is_serumless(roach):
+            roach[serum] = True
+            world.serums = serums
+            self._update_calls.append((self._update_roach_actor, roach_name))
+
+    def _update_roach_actor(self, world, roach_name):
+        roach = roach_by_name(world, roach_name)
+        self._roach_actors[roach_name] = big_roaches.assemble(roach)
 
     def update(self, world, engine, dt):
-        while self._update_calls:
-            f = self._update_calls.pop()
-            f(world)
+        update_calls, self._update_calls = self._update_calls, []
+        while update_calls:
+            f, args = update_calls.pop(), ()
+            if type(f) is tuple:
+                f, args = f[0], f[1:]
+            f(world, *args)
         events = world.pop_events()
         self._update_inventory(world)
         self._update_roaches(world)