Mercurial > parpg-source
annotate behaviours/base.py @ 119:2399a8c3da0c
Modified EquipmentSlot to display an image instead of a text.
Added EquipmentGui class, which handles the equipment slots of the player screen.
An EquipmentGui instance will be created in the InventoryGUI constructor.
The initializeInventory method of the Hud class supplies the players inventory and equipment to the InventoryGUI constructor.
author | KarstenBock@gmx.net |
---|---|
date | Wed, 05 Oct 2011 11:04:39 +0200 |
parents | 57f1cff9a75d |
children | 4c11d9d8b19d |
rev | line source |
---|---|
86
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
1 # This file is part of PARPG. |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
2 |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
3 # PARPG is free software: you can redistribute it and/or modify |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
4 # it under the terms of the GNU General Public License as published by |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
5 # the Free Software Foundation, either version 3 of the License, or |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
6 # (at your option) any later version. |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
7 |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
8 # PARPG is distributed in the hope that it will be useful, |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
11 # GNU General Public License for more details. |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
12 |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
13 # You should have received a copy of the GNU General Public License |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
14 # along with PARPG. If not, see <http://www.gnu.org/licenses/>. |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
15 |
103
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
16 from collections import deque |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
17 |
86
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
18 from fife import fife |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
19 |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
20 _AGENT_STATE_NONE, _AGENT_STATE_IDLE, _AGENT_STATE_APPROACH, _AGENT_STATE_RUN, _AGENT_STATE_WANDER, _AGENT_STATE_TALK = xrange(6) |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
21 |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
22 class BaseBehaviour (fife.InstanceActionListener): |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
23 """Fife agent listener""" |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
24 def __init__(self): |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
25 fife.InstanceActionListener.__init__(self) |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
26 self.agent = None |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
27 self.state = None |
103
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
28 self.animation_queue = deque() |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
29 self.nextAction = None |
86
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
30 |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
31 def attachToLayer(self, agent_ID, layer): |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
32 """Attaches to a certain layer |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
33 @type agent_ID: String |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
34 @param agent_ID: ID of the layer to attach to. |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
35 @type layer: Fife layer |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
36 @param layer: Layer of the agent to attach the behaviour to |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
37 @return: None""" |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
38 self.agent = layer.getInstance(agent_ID) |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
39 self.agent.addActionListener(self) |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
40 self.state = _AGENT_STATE_NONE |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
41 |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
42 def getX(self): |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
43 """Get the NPC's x position on the map. |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
44 @rtype: integer" |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
45 @return: the x coordinate of the NPC's location""" |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
46 return self.agent.getLocation().getLayerCoordinates().x |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
47 |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
48 def getY(self): |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
49 """Get the NPC's y position on the map. |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
50 @rtype: integer |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
51 @return: the y coordinate of the NPC's location""" |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
52 return self.agent.getLocation().getLayerCoordinates().y |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
53 |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
54 def onNewMap(self, layer): |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
55 """Sets the agent onto the new layer.""" |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
56 if self.agent is not None: |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
57 self.agent.removeActionListener(self) |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
58 |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
59 self.agent = layer.getInstance(self.parent.general.identifier) |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
60 self.agent.addActionListener(self) |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
61 self.state = _AGENT_STATE_NONE |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
62 |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
63 def idle(self): |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
64 """@return: None""" |
103
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
65 self.state = _AGENT_STATE_IDLE |
86
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
66 |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
67 def onInstanceActionFinished(self, instance, action): |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
68 """@type instance: ??? |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
69 @param instance: ??? |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
70 @type action: ??? |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
71 @param action: ??? |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
72 @return: None""" |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
73 # First we reset the next behavior |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
74 act = self.nextAction |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
75 self.nextAction = None |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
76 self.idle() |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
77 |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
78 if act: |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
79 act.execute() |
103
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
80 try: |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
81 animtion = self.animation_queue.popleft() |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
82 self.animate(**animtion) |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
83 except IndexError: |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
84 self.idle() |
86
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
85 |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
86 |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
87 def getLocation(self): |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
88 """Get the agents position as a fife.Location object. |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
89 @rtype: fife.Location |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
90 @return: the location of the agent""" |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
91 return self.agent.getLocation() |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
92 |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
93 |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
94 def talk(self, pc): |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
95 """Makes the agent ready to talk to the PC |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
96 @return: None""" |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
97 self.state = _AGENT_STATE_TALK |
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
98 self.pc = pc.behaviour.agent |
103
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
99 self.clear_animations() |
86
a9cc5559ec2a
Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents:
61
diff
changeset
|
100 self.idle() |
103
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
101 |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
102 def animate(self, action, direction = None, repeating = False): |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
103 """Perform an animation""" |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
104 direction = direction or self.agent.getFacingLocation() |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
105 self.agent.act(action, direction, repeating) |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
106 |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
107 def queue_animation(self, action, direction = None, repeating = False): |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
108 """Add an action to the queue""" |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
109 self.animation_queue.append({"action": action, "direction": direction, |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
110 "repeating": repeating}) |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
111 |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
112 def clear_animations(self): |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
113 """Remove all actions from the queue""" |
57f1cff9a75d
Added animation queue and method the base behaviour class.
KarstenBock@gmx.net
parents:
86
diff
changeset
|
114 self.animation_queue.clear() |