X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=koperkapel%2Froaches.py;h=4995c8a6949c8908d1c4a789b8c9b0e35f5cc8ea;hb=11ff8390096b6205f4f7aaa38a8922775fabd1d4;hp=904b8c7dfc9bdf927018cb200372080ce97ca635;hpb=0aef1803b665e1c1a50564c2c4ca8c3dd8ae4c2a;p=koperkapel.git diff --git a/koperkapel/roaches.py b/koperkapel/roaches.py index 904b8c7..4995c8a 100644 --- a/koperkapel/roaches.py +++ b/koperkapel/roaches.py @@ -1,34 +1,72 @@ """ Tools for creating roach actors. """ -import random -from pgzero.clock import each_tick from pgzero.loaders import images from pygame.constants import BLEND_RGBA_MULT -from .actors.surf import SurfActor +from .actors.animsurf import AnimatedSurfActor +from .serums import roach_serum_color +from .util import safepath -ROACH_COLORS = { - "blue": (0, 0, 255, 255), - "green": (0, 255, 0, 255), - "purple": (255, 0, 255, 255), -} +NAMES = [ + "roupert", + "roachel", + "roeginald", + "roichard", + "rory", + "roalph", + "roabia", + "roafi", + "roaman", + "roemus", + "roadley", + "roanaell", + "roashwan", + "roashid", + "roaphael", + "roenfield", + "roani", + "roaya", + "roaza", + "robekka", + "rogan", + "roiana", + "roberta", +] -class RoachActor(SurfActor): - def __init__(self, frames): - self._frames = frames - self._frame = random.randint(0, len(frames) - 1) - self._dt = 0 - self._cycle_dt = 0.2 - each_tick(self.update) - super().__init__(surf=frames[self._frame]) +def roach_by_name(world, roach_name): + roaches = [r for r in world.roaches if r.name == roach_name] + if not roaches: + return None + return roaches[0] - def update(self, dt): - self._dt += dt - while self._dt > self._cycle_dt: - self._dt -= self._cycle_dt - self._frame += 1 - self._frame %= len(self._frames) - self.surf = self._frames[self._frame] + +def next_roach_name(world): + roach_names = [x['name'] for x in world.roaches] + for cand in NAMES: + if cand not in roach_names: + return cand + + +def build_roach(world, name=None, health=5, **kw): + if name is None: + name = next_roach_name(world) + if name is None: + return + roach = { + "name": name, + "health": health, + } + roach.update(kw) + return roach + + +class WorldRoach(object): + """A roach proxy with no properties for display on the game level.""" + + def __init__(self): + self.smart = False + self.strong = False + self.fast = False class RoachFactory: @@ -37,26 +75,47 @@ class RoachFactory: self.suffix = suffix self.frames = 4 - def roach_color(self, roach_data): - return random.choice(list(ROACH_COLORS.values())) + def assemble_frame(self, i, color, roach_data, weapon=None): + roach = images.load(safepath("roach%s/roach_%d") % (self.suffix, i + 1)) + eyes = images.load(safepath("roach%s/eyes_%d") % (self.suffix, i + 1)) + if weapon is None: + frame = roach.copy() + frame.fill(color, None, BLEND_RGBA_MULT) + else: + frame = weapon.surf.copy() + roach = roach.copy() + roach.fill(color, None, BLEND_RGBA_MULT) + frame.blit(roach, (0, 0)) + frame.blit(eyes, (0, 0)) + return frame - 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 - - def assemble(self, roach_data): - color = self.roach_color(roach_data) + def assemble(self, roach_data, color=None, weapon=None): + if not color: + color = roach_serum_color(roach_data) + frames = [] frames = [ - self.assemble_frame(i, color, roach_data) + self.assemble_frame(i, color, roach_data, weapon) for i in range(self.frames)] - return RoachActor(frames) + return AnimatedSurfActor(frames) + + +class RatFactory: + + def __init__(self, frames=4): + self.frames = 4 + + def assemble_frame(self, i): + roach = images.load(safepath("rat/rat_%d") % (i + 1)) + return roach + def assemble(self): + frames = [self.assemble_frame(i) for i in range(self.frames)] + return AnimatedSurfActor(frames) default_roaches = RoachFactory("") t32_roaches = RoachFactory("_32") t21_roaches = RoachFactory("_21") big_roaches = RoachFactory("_big") +roaches_quartet = RoachFactory("_quartet") +roaches_nonet = RoachFactory("_nonet") +default_rats = RatFactory()