annotate src/parpg/components/equip.py @ 116:9b5498e3bda0

Move the identifier field from the FifeAgent component to the new General component. Added General Entity.
author KarstenBock@gmx.net
date Sat, 24 Sep 2011 15:48:24 +0200
parents 7829eb185d6f
children 3564a46544bc
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
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
14 from parpg.bGrease.component import Component
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
15
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
16 class Equip(Component):
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):
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
22 Component.__init__(self, head=object, body=object, leg=object, feet=object, l_arm=object, r_arm=object)
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
23
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
24 class SlotInvalidError(Exception):
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
25 """Error that gets raised when the slot is invalid."""
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
26
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
27 def __init__(self, slot):
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
28 self.slot = slot
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
29
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
30 def __str__(self):
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
31 return "\"%s\" is not a valid slot." % self.slot
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
32
101
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
33 class AlreadyEquippedError(Exception):
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
34 """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
35
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
36 def __str__(self):
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
37 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
38
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
39 class CannotBeEquippedInSlot(Exception):
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
40 """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
41
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
42 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
43 self.slot = slot
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
44 self.equipable = equipable
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 __str__(self):
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
47 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
48
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
49
92
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
50 def equip(wearer, equipable, slot):
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
51 """Equip the wearer with the given equipable.
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
52 @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
53 if equipable.wearer:
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
54 raise AlreadyEquippedError
92
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
55 if slot in equipable.possible_slots:
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
56 try:
105
7829eb185d6f (Re)added setting of inventory and equipment in the object files.
KarstenBock@gmx.net
parents: 101
diff changeset
57 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
58 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
59 equipable.in_slot = slot
853ec1b277c7 Functions in equip.py will now correctly set the equipable's attributes.
KarstenBock@gmx.net
parents: 98
diff changeset
60 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
61 if old_item:
3d9b6405bd86 Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 100
diff changeset
62 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
63 old_item.wearer = None
92
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
64 return old_item
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
65 except AttributeError:
0f659c7675f6 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 91
diff changeset
66 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
67 raise CannotBeEquippedInSlot(slot, equipable)
98
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
68
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
69 def get_equipable(wearer, slot):
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
70 """Return the equipable in the given slot"""
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
71 try:
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
72 item = getattr(wearer, slot)
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
73 return item
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
74 except AttributeError:
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
75 raise SlotInvalidError(slot)
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
76
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
77 def take_equipable(wearer, slot):
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
78 """Remove equipable from the given slot and return it"""
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
79 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
80 setattr(wearer, slot, None)
853ec1b277c7 Functions in equip.py will now correctly set the equipable's attributes.
KarstenBock@gmx.net
parents: 98
diff changeset
81 if item:
853ec1b277c7 Functions in equip.py will now correctly set the equipable's attributes.
KarstenBock@gmx.net
parents: 98
diff changeset
82 item.in_slot = None
853ec1b277c7 Functions in equip.py will now correctly set the equipable's attributes.
KarstenBock@gmx.net
parents: 98
diff changeset
83 item.wearer = None
98
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
84 return item
c4c940fcbc83 Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 92
diff changeset
85
91
1bd609af9329 Added equip function.
KarstenBock@gmx.net
parents: 90
diff changeset
86