X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=koperkapel%2Fweapons.py;h=7dcb41ed154250bcc009f0f5ce8fdf80261e2a56;hb=c1691479e387f6676f03dbf6e431345eea60dd65;hp=3962ecc96917cd14a3e7908af3dbe03485d40ea1;hpb=41fd09717b0a2a9f3523818f50fa7c3206f005a8;p=koperkapel.git diff --git a/koperkapel/weapons.py b/koperkapel/weapons.py index 3962ecc..7dcb41e 100644 --- a/koperkapel/weapons.py +++ b/koperkapel/weapons.py @@ -1,6 +1,8 @@ """ Tools for dealing with weapons. """ -from pgzero.loaders import images +from pygame.surface import Surface +from pygame.draw import circle +from pgzero.loaders import images, sounds from .actors.animsurf import AnimatedSurfActor from .util import safepath @@ -14,7 +16,16 @@ class Weapon: self.damage = damage self.bullet_range = bullet_range self.can_tape = can_tape - self.sound = sound + self.sound = None + if sound: + self.sound = sounds.load(sound) + + def play_sound(self): + if self.sound: + self.sound.play() + + def assemble_bullet(self): + return BulletActor(self) WEAPONS = [ @@ -28,17 +39,33 @@ WEAPONS = [ WEAPON_LOOKUP = {w.name: w for w in WEAPONS} +def weapon_by_name(weapon_name): + return WEAPON_LOOKUP[weapon_name] + + class WeaponActor(AnimatedSurfActor): def __init__(self, weapon, **kw): super().__init__(**kw) self.weapon = weapon +class BulletActor(AnimatedSurfActor): + def __init__(self, weapon, **kw): + radius = min(weapon.damage * 5, 32) + surf = Surface((radius * 2, radius * 2)) + surf.convert_alpha() + surf.fill((255, 255, 255, 0)) + circle(surf, (255, 0, 255, 32), (radius, radius), radius) + frames = [surf] + super().__init__(frames=frames, **kw) + self.weapon = weapon + + class WeaponFactory: def assemble_frame(self, suffix, weapon, tape): surf = images.load(safepath("weapons/%s%s") - % (weapon.image_name, suffix)) + % (weapon.image_name, suffix)) frame = surf.copy() if tape: tape_surf = images.load(safepath("weapons/tape")) @@ -46,7 +73,7 @@ class WeaponFactory: return frame def assemble(self, weapon_name, tape=False): - weapon = WEAPON_LOOKUP[weapon_name] + weapon = weapon_by_name(weapon_name) tape = tape and weapon.can_tape frames = [ self.assemble_frame(suffix, weapon, tape)