randomly rotate serum puddles
[koperkapel.git] / koperkapel / serums.py
1 """ Tools for creating serum actors. """
2
3 import random
4 from pgzero.loaders import images
5 from pygame.constants import BLEND_RGBA_MULT
6 from pygame.transform import rotate
7 from .actors.surf import SurfActor
8
9 SERUMS = ["smart", "fast", "strong"]
10
11 SERUM_TILENAME_MAP = {
12     "smart": "intelligence",
13     "fast": "speed",
14     "strong": "strength",
15 }
16
17 SERUM_OVERLAY_COLORS = {
18     "smart": (0, 0, 255, 255),  # blue
19     "fast": (0, 255, 0, 255),  # green
20     "strong": (255, 0, 255, 255),  # purple
21     "none": (170, 68, 0, 255),  # brown
22 }
23
24
25 def roach_serum_color(roach):
26     for serum_name in SERUMS:
27         if getattr(roach, serum_name):
28             return SERUM_OVERLAY_COLORS[serum_name]
29     return SERUM_OVERLAY_COLORS["none"]
30
31
32 def roach_is_serumless(roach):
33     for serum_name in SERUMS:
34         if getattr(roach, serum_name):
35             return False
36     return True
37
38
39 class SerumFactory:
40     def __init__(self, suffix):
41         self.suffix = suffix
42
43     def assemble(self, name):
44         assert name in SERUMS
45         puddle = images.load("serum%s/serum" % (self.suffix,))
46         puddle = rotate(puddle, 90 * random.randint(0, 3))
47         serum_icon = images.load("serum%s/%s" % (
48             self.suffix, SERUM_TILENAME_MAP[name],))
49         frame = puddle.copy()
50         frame.fill(SERUM_OVERLAY_COLORS[name], None, BLEND_RGBA_MULT)
51         frame.blit(serum_icon, (0, 0))
52         return SurfActor(frame)
53
54
55 default_serums = SerumFactory("")
56 big_serums = SerumFactory("_big")