Add weapons.
[koperkapel.git] / koperkapel / weapons.py
diff --git a/koperkapel/weapons.py b/koperkapel/weapons.py
new file mode 100644 (file)
index 0000000..cc9f324
--- /dev/null
@@ -0,0 +1,46 @@
+""" 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()