Merge branch 'master' of ctpug.org.za:koperkapel
authorSimon Cross <hodgestar@gmail.com>
Fri, 4 Mar 2016 22:43:19 +0000 (00:43 +0200)
committerSimon Cross <hodgestar@gmail.com>
Fri, 4 Mar 2016 22:43:19 +0000 (00:43 +0200)
koperkapel/roaches.py
koperkapel/scenes/base.py
koperkapel/scenes/roach_management.py
koperkapel/serums.py
koperkapel/world.py

index 08440ccda8333e1b3e7369585682038a12991100..653f085aa6a39f4a64ebc2d9d89311da2dad0f42 100644 (file)
@@ -35,10 +35,10 @@ class RoachFactory:
     def assemble_frame(self, i, color, roach_data):
         roach = images.load("roach%s/roach_%d" % (self.suffix, i + 1))
         eyes = images.load("roach%s/eyes_%d" % (self.suffix, i + 1))
-        roach = roach.copy()
-        roach.fill(color, None, BLEND_RGBA_MULT)
-        roach.blit(eyes, (0, 0))
-        return roach
+        frame = roach.copy()
+        frame.fill(color, None, BLEND_RGBA_MULT)
+        frame.blit(eyes, (0, 0))
+        return frame
 
     def assemble(self, roach_data):
         color = roach_serum_color(roach_data)
index 47891a6582784613cf4f12ae81415e32be097d53..481850b2533153afa5ccbb12ea090aae5995bcf9 100644 (file)
@@ -129,6 +129,9 @@ class Layer:
         self.actors.append(actor)
         return actor
 
+    def clear(self):
+        self.actors.clear()
+
     def remove(self, actor):
         self.actors.remove(actor)
         return actor
index 935b3cbacd94d3b8c1924cd5d9d4cf799306ba21..f960a5e18eccbf8d6a4d9f340ab614248459fb3a 100644 (file)
@@ -2,9 +2,10 @@
 
 from pgzero.constants import keys, mouse
 from pgzero.actor import Actor
-from ..actors.buttons import TextButton, ImageButton
+from ..actors.buttons import ImageButton
 from ..constants import WIDTH, HEIGHT
 from ..roaches import big_roaches
+from ..serums import big_serums
 from ..vehicles.base import Vehicle
 from .base import Scene, ChangeSceneEvent
 
@@ -28,7 +29,10 @@ class RoachesScene(Scene):
 
     def __init__(self):
         super().__init__()
+        self._outside_roach_pos = 0
+        self._inventory_pos = 0
         self._roaches = self.actors.add_layer("roaches", level=10)
+        self._serums = self.actors.add_layer("serums", level=10)
         self._pads = self.actors.add_layer("pads", level=5)
         self._seats = self.actors.add_layer("seats", level=5)
         self._buttons = self.actors.add_layer("buttons", level=6)
@@ -40,6 +44,7 @@ class RoachesScene(Scene):
         self._init_bg()
         self._init_seats()
         self._init_roaches(world.roaches)
+        self._update_serums(world.serums)
 
     def _init_bg(self):
         self.actors.default.add(self._vehicle.background)
@@ -59,6 +64,15 @@ class RoachesScene(Scene):
             if i < len(self._seats):
                 roach_actor.pos = self._seats[i].pos
 
+    def _update_serums(self, serums):
+        self._serums.clear()
+        if not serums:
+            return
+        self._inventory_pos %= len(serums)
+        serum_actor = self._serums.add(
+            big_serums.assemble(serums[self._inventory_pos]))
+        serum_actor.pos = self._inventory_pad.center
+
     def _init_pads(self):
         self._roach_pad = self._pads.add(
             Actor("roach_management/roach_pad", anchor=("left", "bottom")))
@@ -95,20 +109,23 @@ class RoachesScene(Scene):
             (TOOLBAR_LEFT_X, TOOLBAR_TOP_Y), self._eject_roach)
 
     def _roach_left(self):
-        print("Cycle outside roaches left.")
+        self._outside_roach_pos -= 1
 
     def _roach_right(self):
-        print("Cycle outside roaches right.")
+        self._outside_roach_pos += 1
 
     def _inventory_left(self):
-        print("Cycle inventory left.")
+        self._inventory_pos -= 1
 
     def _inventory_right(self):
-        print("Cycle inventory right.")
+        self._inventory_pos += 1
 
     def _eject_roach(self):
         print("Eject roach.")
 
+    def update(self, world, dt):
+        self._update_serums(world.serums)
+
     def on_key_down(self, key, mod, unicode):
         if key == keys.ESCAPE:
             from .menu import MenuScene
index 951d002490bc7fbb14b9273fcdd1338fd27354d9..c2a52bba6ff0e10525597d2b1a1760108ef95036 100644 (file)
@@ -1,8 +1,17 @@
 """ Tools for creating serum actors. """
 
+from pgzero.loaders import images
+from pygame.constants import BLEND_RGBA_MULT
+from .actors.surf import SurfActor
 
 SERUMS = ["smart", "fast", "strong"]
 
+SERUM_TILENAME_MAP = {
+    "smart": "intelligence",
+    "fast": "speed",
+    "strong": "strength",
+}
+
 SERUM_OVERLAY_COLORS = {
     "smart": (0, 0, 255, 255),  # blue
     "fast": (0, 255, 0, 255),  # green
@@ -16,3 +25,22 @@ def roach_serum_color(roach):
         if getattr(roach, serum_name):
             return SERUM_OVERLAY_COLORS[serum_name]
     return SERUM_OVERLAY_COLORS["none"]
+
+
+class SerumFactory:
+    def __init__(self, suffix):
+        self.suffix = suffix
+
+    def assemble(self, name):
+        assert name in SERUMS
+        puddle = images.load("serum%s/serum" % (self.suffix,))
+        serum_icon = images.load("serum%s/%s" % (
+            self.suffix, SERUM_TILENAME_MAP[name],))
+        frame = puddle.copy()
+        frame.fill(SERUM_OVERLAY_COLORS[name], None, BLEND_RGBA_MULT)
+        frame.blit(serum_icon, (0, 0))
+        return SurfActor(frame)
+
+
+default_serums = SerumFactory("")
+big_serums = SerumFactory("_big")
index b0e3debfd16d830ee8d030aee2aa2eb4e5be8a3a..6a81f4c8a958fff21d419a1ee762c653e14828df 100644 (file)
@@ -128,3 +128,9 @@ class WorldListProxy(WorldBaseProxy):
 
     def __getitem__(self, index):
         return _maybe_subproxy(self, index, self._state[index])
+
+    def __len__(self):
+        return len(self._state)
+
+    def __bool__(self):
+        return bool(self._state)