1 """ Tools for dealing with weapons. """
3 from pgzero.loaders import images, sounds
4 from .actors.animsurf import AnimatedSurfActor
5 from .util import safepath
9 def __init__(self, name, damage, image_name=None, bullet_range=0,
10 can_tape=True, frames=("_1",), sound=None):
12 self.image_name = image_name or name
15 self.bullet_range = bullet_range
16 self.can_tape = can_tape
19 self.sound = sounds.load(sound)
27 Weapon("spit", damage=1, bullet_range=2, can_tape=False,
28 image_name="blank", frames=("",), sound="fire_spit"),
29 Weapon("butter_knife", damage=2),
30 Weapon("crowbar", damage=4),
31 Weapon("gun", damage=4, bullet_range=4, sound='gun_fire'),
34 WEAPON_LOOKUP = {w.name: w for w in WEAPONS}
37 def weapon_by_name(weapon_name):
38 return WEAPON_LOOKUP[weapon_name]
41 class WeaponActor(AnimatedSurfActor):
42 def __init__(self, weapon, **kw):
43 super().__init__(**kw)
49 def assemble_frame(self, suffix, weapon, tape):
50 surf = images.load(safepath("weapons/%s%s")
51 % (weapon.image_name, suffix))
54 tape_surf = images.load(safepath("weapons/tape"))
55 frame.blit(tape_surf, (0, 0))
58 def assemble(self, weapon_name, tape=False):
59 weapon = weapon_by_name(weapon_name)
60 tape = tape and weapon.can_tape
62 self.assemble_frame(suffix, weapon, tape)
63 for suffix in weapon.frames]
64 return WeaponActor(weapon, frames=frames)
67 default_weapons = WeaponFactory()