annotate components/equip.py @ 72:783dc57eca7c

Fixed old equipable values not reset when equippin another equipable in its slot. Added Exceptions for the Equip components.
author KarstenBock@gmx.net
date Wed, 21 Sep 2011 19:51:37 +0200
parents 8f1edcab5602
children 9e03f7816061
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
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
14 from parpg.bGrease.component import Component
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
15
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
16 class Equip(Component):
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):
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
22 Component.__init__(self, head=object, body=object, leg=object, feet=object, l_arm=object, r_arm=object)
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
23
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
24 class SlotInvalidError(Exception):
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
25 """Error that gets raised when the slot is invalid."""
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
26
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
27 def __init__(self, slot):
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
28 self.slot = slot
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
29
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
30 def __str__(self):
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
31 return "\"%s\" is not a valid slot." % self.slot
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
32
72
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
33 class AlreadyEquippedError(Exception):
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
34 """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
35
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
36 def __str__(self):
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
37 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
38
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
39 class CannotBeEquippedInSlot(Exception):
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
40 """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
41
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
42 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
43 self.slot = slot
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
44 self.equipable = equipable
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 __str__(self):
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
47 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
48
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
49
65
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
50 def equip(wearer, equipable, slot):
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
51 """Equip the wearer with the given equipable.
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
52 @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
53 if equipable.wearer:
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
54 raise AlreadyEquippedError
65
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
55 if slot in equipable.possible_slots:
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
56 try:
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
57 old_item = getattr(wearer, slot)
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
58 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
59 equipable.in_slot = slot
8f1edcab5602 Functions in equip.py will now correctly set the equipable's attributes.
KarstenBock@gmx.net
parents: 69
diff changeset
60 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
61 if old_item:
783dc57eca7c Fixed old equipable values not reset when equippin another equipable in its slot.
KarstenBock@gmx.net
parents: 71
diff changeset
62 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
63 old_item.wearer = None
65
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
64 return old_item
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
65 except AttributeError:
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 64
diff changeset
66 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
67 raise CannotBeEquippedInSlot(slot, equipable)
69
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
68
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
69 def get_equipable(wearer, slot):
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
70 """Return the equipable in the given slot"""
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
71 try:
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
72 item = getattr(wearer, slot)
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
73 return item
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
74 except AttributeError:
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
75 raise SlotInvalidError(slot)
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 take_equipable(wearer, slot):
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
78 """Remove equipable from the given slot and return it"""
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
79 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
80 setattr(wearer, slot, None)
8f1edcab5602 Functions in equip.py will now correctly set the equipable's attributes.
KarstenBock@gmx.net
parents: 69
diff changeset
81 if item:
8f1edcab5602 Functions in equip.py will now correctly set the equipable's attributes.
KarstenBock@gmx.net
parents: 69
diff changeset
82 item.in_slot = None
8f1edcab5602 Functions in equip.py will now correctly set the equipable's attributes.
KarstenBock@gmx.net
parents: 69
diff changeset
83 item.wearer = None
69
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
84 return item
c1959525efda Added get_equipable and take_equipable functions.
KarstenBock@gmx.net
parents: 65
diff changeset
85
64
b73050f98411 Added equip function.
KarstenBock@gmx.net
parents: 63
diff changeset
86