Mercurial > parpg-source
view 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 |
line wrap: on
line source
# This file is part of PARPG. # PARPG is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # PARPG is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with PARPG. If not, see <http://www.gnu.org/licenses/>. from collections import deque from fife import fife _AGENT_STATE_NONE, _AGENT_STATE_IDLE, _AGENT_STATE_APPROACH, _AGENT_STATE_RUN, _AGENT_STATE_WANDER, _AGENT_STATE_TALK = xrange(6) class BaseBehaviour (fife.InstanceActionListener): """Fife agent listener""" def __init__(self): fife.InstanceActionListener.__init__(self) self.agent = None self.state = None self.animation_queue = deque() self.nextAction = None def attachToLayer(self, agent_ID, layer): """Attaches to a certain layer @type agent_ID: String @param agent_ID: ID of the layer to attach to. @type layer: Fife layer @param layer: Layer of the agent to attach the behaviour to @return: None""" self.agent = layer.getInstance(agent_ID) self.agent.addActionListener(self) self.state = _AGENT_STATE_NONE def getX(self): """Get the NPC's x position on the map. @rtype: integer" @return: the x coordinate of the NPC's location""" return self.agent.getLocation().getLayerCoordinates().x def getY(self): """Get the NPC's y position on the map. @rtype: integer @return: the y coordinate of the NPC's location""" return self.agent.getLocation().getLayerCoordinates().y def onNewMap(self, layer): """Sets the agent onto the new layer.""" if self.agent is not None: self.agent.removeActionListener(self) self.agent = layer.getInstance(self.parent.general.identifier) self.agent.addActionListener(self) self.state = _AGENT_STATE_NONE def idle(self): """@return: None""" self.state = _AGENT_STATE_IDLE def onInstanceActionFinished(self, instance, action): """@type instance: ??? @param instance: ??? @type action: ??? @param action: ??? @return: None""" # First we reset the next behavior act = self.nextAction self.nextAction = None self.idle() if act: act.execute() try: animtion = self.animation_queue.popleft() self.animate(**animtion) except IndexError: self.idle() def getLocation(self): """Get the agents position as a fife.Location object. @rtype: fife.Location @return: the location of the agent""" return self.agent.getLocation() def talk(self, pc): """Makes the agent ready to talk to the PC @return: None""" self.state = _AGENT_STATE_TALK self.pc = pc.behaviour.agent self.clear_animations() self.idle() def animate(self, action, direction = None, repeating = False): """Perform an animation""" direction = direction or self.agent.getFacingLocation() self.agent.act(action, direction, repeating) def queue_animation(self, action, direction = None, repeating = False): """Add an action to the queue""" self.animation_queue.append({"action": action, "direction": direction, "repeating": repeating}) def clear_animations(self): """Remove all actions from the queue""" self.animation_queue.clear()