+""" Tools for dealing with weapons. """
+
+from pgzero.loaders import images
+from .actors.surf import SurfActor
+
+
+class Weapon:
+ def __init__(self, name, damage, image_name=None, bullet_range=0,
+ can_tape=True):
+ self.name = name
+ self.image_name = image_name or name
+ self.damage = damage
+ self.bullet_range = bullet_range
+ self.can_tape = can_tape
+
+
+WEAPONS = [
+ Weapon("spit", damage=1, bullet_range=2, can_tape=False,
+ image_name="blank"),
+ Weapon("butter_knife", damage=2),
+ Weapon("crowbar", damage=4),
+ Weapon("gun", damage=4, bullet_range=4),
+]
+
+WEAPON_LOOKUP = {w.name: w for w in WEAPONS}
+
+
+class WeaponActor(SurfActor):
+ def __init__(self, weapon, **kw):
+ super().__init__(**kw)
+ self.weapon = weapon
+
+
+class WeaponFactory:
+
+ def assemble(self, weapon_name, tape=False):
+ weapon = WEAPON_LOOKUP[weapon_name]
+ surf = images.load("weapons/%s" % (weapon.image_name,))
+ surf = surf.copy()
+ if tape and weapon.can_tape:
+ tape_surf = images.load("weapons/tape")
+ surf.blit(tape_surf, (0, 0))
+ return WeaponActor(weapon, surf=surf)
+
+
+default_weapons = WeaponFactory()