annotate src/parpg/components/equip.py @ 127:90b49fda0340

saveable_fields property of components is now a List.
author KarstenBock@gmx.net
date Tue, 27 Sep 2011 16:27:36 +0200
parents 0ac4403404ea
children 3aff9dee1b4f
rev   line source
92
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
1 # This program is free software: you can redistribute it and/or modify
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
2 # it under the terms of the GNU General Public License as published by
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
3 # the Free Software Foundation, either version 3 of the License, or
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
4 # (at your option) any later version.
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
5 #
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
6 # This program is distributed in the hope that it will be useful,
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
7 # but WITHOUT ANY WARRANTY; without even the implied warranty of
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
8 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
9 # GNU General Public License for more details.
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
10 #
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
11 # You should have received a copy of the GNU General Public License
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
12 # along with this program. If not, see <http://www.gnu.org/licenses/>.
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
13
119
3564a46544bc Added Base component, which has a saveable_fields property. It is supposed to be derived from, thus it is not in the components list.
KarstenBock@gmx.net
parents: 105
diff changeset
14 from base import Base
92
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
15
119
3564a46544bc Added Base component, which has a saveable_fields property. It is supposed to be derived from, thus it is not in the components list.
KarstenBock@gmx.net
parents: 105
diff changeset
16 class Equip(Base):
92
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
17 """
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
18 Component that stores the equipment (what is being worn/wieled).
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
19 """
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
20
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
21 def __init__(self):
119
3564a46544bc Added Base component, which has a saveable_fields property. It is supposed to be derived from, thus it is not in the components list.
KarstenBock@gmx.net
parents: 105
diff changeset
22 Base.__init__(self, head=object, body=object, leg=object, feet=object, l_arm=object, r_arm=object)
92
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
23
124
0ac4403404ea Added saveable_fields to Equip.
KarstenBock@gmx.net
parents: 119
diff changeset
24 @property
0ac4403404ea Added saveable_fields to Equip.
KarstenBock@gmx.net
parents: 119
diff changeset
25 def saveable_fields(self):
127
90b49fda0340 saveable_fields property of components is now a List.
KarstenBock@gmx.net
parents: 124
diff changeset
26 return []
124
0ac4403404ea Added saveable_fields to Equip.
KarstenBock@gmx.net
parents: 119
diff changeset
27
92
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
28 class SlotInvalidError(Exception):
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
29 """Error that gets raised when the slot is invalid."""
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
30
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
31 def __init__(self, slot):
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
32 self.slot = slot
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
33
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
34 def __str__(self):
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
35 return "\"%s\" is not a valid slot." % self.slot
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
36
101
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
37 class AlreadyEquippedError(Exception):
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
38 """Error that gets raised when the equipable already has a wearer"""
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
39
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
40 def __str__(self):
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
41 return "The equipable is already weared."
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
42
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
43 class CannotBeEquippedInSlot(Exception):
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
44 """Error that gets raised when the equipable can't be equiped in that slot"""
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
45
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
46 def __init__(self, slot, equipable):
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
47 self.slot = slot
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
48 self.equipable = equipable
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
49
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
50 def __str__(self):
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
51 return "%s is not in the equipables slots. (%s)" % (self.slot, ', '.join(self.equipable.possible_slots))
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
52
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
53
92
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
54 def equip(wearer, equipable, slot):
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
55 """Equip the wearer with the given equipable.
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
56 @returns The equipable that was at the given slot, or None"""
101
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
57 if equipable.wearer:
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
58 raise AlreadyEquippedError
92
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
59 if slot in equipable.possible_slots:
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
60 try:
105
7829eb185d6f (Re)added setting of inventory and equipment in the object files.
KarstenBock@gmx.net
parents: 101
diff changeset
61 old_item = getattr(wearer, slot) if hasattr(wearer, slot) else None
92
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
62 setattr(wearer, slot, equipable)
100
853ec1b277c7 Functions in equip.py will now correctly set the equipable's attributes.
KarstenBock@gmx.net
parents: 98
diff changeset
63 equipable.in_slot = slot
853ec1b277c7 Functions in equip.py will now correctly set the equipable's attributes.
KarstenBock@gmx.net
parents: 98
diff changeset
64 equipable.wearer = wearer
101
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
65 if old_item:
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
66 old_item.in_slot = None
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
67 old_item.wearer = None
92
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
68 return old_item
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
69 except AttributeError:
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
70 raise SlotInvalidError(slot)
101
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
71 raise CannotBeEquippedInSlot(slot, equipable)
98
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
72
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
73 def get_equipable(wearer, slot):
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
74 """Return the equipable in the given slot"""
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
75 try:
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
76 item = getattr(wearer, slot)
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
77 return item
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
78 except AttributeError:
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
79 raise SlotInvalidError(slot)
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
80
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
81 def take_equipable(wearer, slot):
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
82 """Remove equipable from the given slot and return it"""
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
83 item = get_equipable(wearer, slot)
100
853ec1b277c7 Functions in equip.py will now correctly set the equipable's attributes.
KarstenBock@gmx.net
parents: 98
diff changeset
84 setattr(wearer, slot, None)
853ec1b277c7 Functions in equip.py will now correctly set the equipable's attributes.
KarstenBock@gmx.net
parents: 98
diff changeset
85 if item:
853ec1b277c7 Functions in equip.py will now correctly set the equipable's attributes.
KarstenBock@gmx.net
parents: 98
diff changeset
86 item.in_slot = None
853ec1b277c7 Functions in equip.py will now correctly set the equipable's attributes.
KarstenBock@gmx.net
parents: 98
diff changeset
87 item.wearer = None
98
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
88 return item
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
89
91
1bd609af9329 Added equip function.
KarstenBock@gmx.net
parents: 90
diff changeset
90