cc9f324b5a49a32b5a77b52c8c5be52b4f497216
[koperkapel.git] / koperkapel / weapons.py
1 """ Tools for dealing with weapons. """
2
3 from pgzero.loaders import images
4 from .actors.surf import SurfActor
5
6
7 class Weapon:
8     def __init__(self, name, damage, image_name=None, bullet_range=0,
9                  can_tape=True):
10         self.name = name
11         self.image_name = image_name or name
12         self.damage = damage
13         self.bullet_range = bullet_range
14         self.can_tape = can_tape
15
16
17 WEAPONS = [
18     Weapon("spit", damage=1, bullet_range=2, can_tape=False,
19            image_name="blank"),
20     Weapon("butter_knife", damage=2),
21     Weapon("crowbar", damage=4),
22     Weapon("gun", damage=4, bullet_range=4),
23 ]
24
25 WEAPON_LOOKUP = {w.name: w for w in WEAPONS}
26
27
28 class WeaponActor(SurfActor):
29     def __init__(self, weapon, **kw):
30         super().__init__(**kw)
31         self.weapon = weapon
32
33
34 class WeaponFactory:
35
36     def assemble(self, weapon_name, tape=False):
37         weapon = WEAPON_LOOKUP[weapon_name]
38         surf = images.load("weapons/%s" % (weapon.image_name,))
39         surf = surf.copy()
40         if tape and weapon.can_tape:
41             tape_surf = images.load("weapons/tape")
42             surf.blit(tape_surf, (0, 0))
43         return WeaponActor(weapon, surf=surf)
44
45
46 default_weapons = WeaponFactory()