annotate components/equip.py @ 120:adbcdb900fa9

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