randomly rotate serum puddles
[koperkapel.git] / koperkapel / serums.py
index 951d002490bc7fbb14b9273fcdd1338fd27354d9..38794fd4926834bba5129b650f836e944c534490 100644 (file)
@@ -1,8 +1,19 @@
 """ Tools for creating serum actors. """
 
+import random
+from pgzero.loaders import images
+from pygame.constants import BLEND_RGBA_MULT
+from pygame.transform import rotate
+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 +27,30 @@ def roach_serum_color(roach):
         if getattr(roach, serum_name):
             return SERUM_OVERLAY_COLORS[serum_name]
     return SERUM_OVERLAY_COLORS["none"]
+
+
+def roach_is_serumless(roach):
+    for serum_name in SERUMS:
+        if getattr(roach, serum_name):
+            return False
+    return True
+
+
+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,))
+        puddle = rotate(puddle, 90 * random.randint(0, 3))
+        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")