Mercurial > parpg-source
annotate components/equip.py @ 115:26e65f27dbd7
"Open" will now not be shown in the context menu when the lockable is locked.
"Lock" will not not be shown in the context menu when the lockable is open.
author | KarstenBock@gmx.net |
---|---|
date | Mon, 03 Oct 2011 14:12:17 +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 | 24 @property |
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 | 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 | 90 |