annotate components/equip.py @ 99:6e4daff93e7d

If Items in containers or being equipped have no type the game will now try to get the object using the ID.
author KarstenBock@gmx.net
date Wed, 28 Sep 2011 12:58:18 +0200
parents f94d4577ca5e
children f2ef124128db
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 """
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
18 Component that stores the equipment (what is being worn/wieled).
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):
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
22 Base.__init__(self, head=object, body=object, 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
23
94
5ab004fa4a2e Added saveable_fields to Equip.
KarstenBock@gmx.net
parents: 89
diff changeset
24 @property
5ab004fa4a2e Added saveable_fields to Equip.
KarstenBock@gmx.net
parents: 89
diff changeset
25 def saveable_fields(self):
97
f94d4577ca5e saveable_fields property of components is now a List.
KarstenBock@gmx.net
parents: 94
diff changeset
26 return []
94
5ab004fa4a2e Added saveable_fields to Equip.
KarstenBock@gmx.net
parents: 89
diff changeset
27
65
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
28 class SlotInvalidError(Exception):
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
29 """Error that gets raised when the slot is invalid."""
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
30
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
31 def __init__(self, slot):
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
32 self.slot = slot
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
33
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
34 def __str__(self):
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
35 return "\"%s\" is not a valid slot." % self.slot
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
36
72
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
37 class AlreadyEquippedError(Exception):
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
38 """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
39
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
40 def __str__(self):
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
41 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
42
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
43 class CannotBeEquippedInSlot(Exception):
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
44 """Error that gets raised when the equipable can't be equiped in that slot"""
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
45
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
46 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
47 self.slot = slot
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
48 self.equipable = equipable
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
49
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
50 def __str__(self):
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
51 return "%s is not in the equipables slots. (%s)" % (self.slot, ', '.join(self.equipable.possible_slots))
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
52
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
53
65
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
54 def equip(wearer, equipable, slot):
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
55 """Equip the wearer with the given equipable.
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
56 @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
57 if equipable.wearer:
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
58 raise AlreadyEquippedError
65
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
59 if slot in equipable.possible_slots:
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
60 try:
75
9e03f7816061 (Re)added setting of inventory and equipment in the object files.
KarstenBock@gmx.net
parents: 72
diff changeset
61 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
62 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
63 equipable.in_slot = slot
8f1edcab5602 Functions in equip.py will now correctly set the equipable's attributes.
KarstenBock@gmx.net
parents: 69
diff changeset
64 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
65 if old_item:
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
66 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
67 old_item.wearer = None
65
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
68 return old_item
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
69 except AttributeError:
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
70 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
71 raise CannotBeEquippedInSlot(slot, equipable)
69
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
72
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
73 def get_equipable(wearer, slot):
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
74 """Return the equipable in the given slot"""
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
75 try:
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
76 item = getattr(wearer, slot)
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
77 return item
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
78 except AttributeError:
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
79 raise SlotInvalidError(slot)
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
80
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
81 def take_equipable(wearer, slot):
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
82 """Remove equipable from the given slot and return it"""
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
83 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
84 setattr(wearer, slot, None)
8f1edcab5602 Functions in equip.py will now correctly set the equipable's attributes.
KarstenBock@gmx.net
parents: 69
diff changeset
85 if item:
8f1edcab5602 Functions in equip.py will now correctly set the equipable's attributes.
KarstenBock@gmx.net
parents: 69
diff changeset
86 item.in_slot = None
8f1edcab5602 Functions in equip.py will now correctly set the equipable's attributes.
KarstenBock@gmx.net
parents: 69
diff changeset
87 item.wearer = None
69
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
88 return item
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
89
64
b73050f98411 Added equip function.
KarstenBock@gmx.net
parents: 63
diff changeset
90