X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=koperkapel%2Froaches.py;h=da362a306361b6b28006b641ffb5ac3ff4401523;hb=55653b221b6c5ca3c12cdb27412a6773f87c4448;hp=653f085aa6a39f4a64ebc2d9d89311da2dad0f42;hpb=53c90678b40bf45114205afd5ac8e96430420d14;p=koperkapel.git diff --git a/koperkapel/roaches.py b/koperkapel/roaches.py index 653f085..da362a3 100644 --- a/koperkapel/roaches.py +++ b/koperkapel/roaches.py @@ -1,29 +1,71 @@ """ 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 +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 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 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 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: @@ -45,10 +87,12 @@ class RoachFactory: frames = [ self.assemble_frame(i, color, roach_data) for i in range(self.frames)] - return RoachActor(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")