# HG changeset patch # User KarstenBock@gmx.net # Date 1315573523 -7200 # Node ID 7cb53edfb95f4c8b07806ff5eb790cd22a29fce6 # Parent 5508000aceafb5d162e5746507a0530d4a4ca541 Renamed BaseBehaviour to MovingAgentBehaviour diff -r 5508000aceaf -r 7cb53edfb95f src/parpg/behaviours/__init__.py --- a/src/parpg/behaviours/__init__.py Thu Sep 08 18:56:10 2011 +0200 +++ b/src/parpg/behaviours/__init__.py Fri Sep 09 15:05:23 2011 +0200 @@ -13,6 +13,6 @@ # You should have received a copy of the GNU General Public License # along with PARPG. If not, see . -from base import BaseBehaviour as Base +from base import MovingAgentBehaviour as Moving from npc import NPCBehaviour as NonPlayer from player import PlayerBehaviour as Player \ No newline at end of file diff -r 5508000aceaf -r 7cb53edfb95f src/parpg/behaviours/moving.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/parpg/behaviours/moving.py Fri Sep 09 15:05:23 2011 +0200 @@ -0,0 +1,131 @@ +# 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 . + +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 MovingAgentBehaviour (fife.InstanceActionListener): + """Fife agent listener""" + def __init__(self): + fife.InstanceActionListener.__init__(self) + self.agent = None + self.state = None + self.speed = 0 + self.idle_counter = 1 + + 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.fifeagent.identifier) + self.agent.addActionListener(self) + self.state = _AGENT_STATE_NONE + self.idle_counter = 1 + + def idle(self): + """@return: None""" + self.state = _AGENT_STATE_IDLE + self.agent.act('stand', self.agent.getFacingLocation()) + + def approach(self, location, action=None): + """Approaches a location and then perform an action (if set). + @type loc: fife.Location + @param loc: the location to approach + @type action: Action + @param action: The action to schedule for execution after the approach. + @return: None""" + self.state = _AGENT_STATE_APPROACH + self.nextAction = action + boxLocation = tuple([int(float(i)) for i in location]) + l = fife.Location(self.agent.getLocation()) + l.setLayerCoordinates(fife.ModelCoordinate(*boxLocation)) + self.agent.move('run', l, self.speed + 1) + + 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() + + if(action.getId() != 'stand'): + self.idle_counter = 1 + else: + self.idle_counter += 1 + + 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.idle() + + def run(self, location): + """Makes the PC run to a certain location + @type location: fife.ScreenPoint + @param location: Screen position to run to. + @return: None""" + self.state = _AGENT_STATE_RUN + self.nextAction = None + self.agent.move('run', location, self.speed + 1) + + def walk(self, location): + """Makes the PC walk to a certain location. + @type location: fife.ScreenPoint + @param location: Screen position to walk to. + @return: None""" + self.state = _AGENT_STATE_RUN + self.nextAction = None + self.agent.move('walk', location, self.speed - 1) + \ No newline at end of file diff -r 5508000aceaf -r 7cb53edfb95f src/parpg/behaviours/npc.py --- a/src/parpg/behaviours/npc.py Thu Sep 08 18:56:10 2011 +0200 +++ b/src/parpg/behaviours/npc.py Fri Sep 09 15:05:23 2011 +0200 @@ -17,10 +17,10 @@ from fife import fife -import base -from base import BaseBehaviour +import moving +from moving import MovingAgentBehaviour -class NPCBehaviour(BaseBehaviour): +class NPCBehaviour(MovingAgentBehaviour): """This is a basic NPC behaviour""" def __init__(self, parent=None): super(NPCBehaviour, self).__init__() @@ -72,7 +72,7 @@ @return: None""" if self.state == base._AGENT_STATE_WANDER: self.target_loc = self.getTargetLocation() - BaseBehaviour.onInstanceActionFinished(self, instance, action) + MovingAgentBehaviour.onInstanceActionFinished(self, instance, action) def idle(self): diff -r 5508000aceaf -r 7cb53edfb95f src/parpg/behaviours/player.py --- a/src/parpg/behaviours/player.py Thu Sep 08 18:56:10 2011 +0200 +++ b/src/parpg/behaviours/player.py Fri Sep 09 15:05:23 2011 +0200 @@ -13,10 +13,10 @@ # You should have received a copy of the GNU General Public License # along with PARPG. If not, see . -import base -from base import BaseBehaviour +import moving +from moving import MovingAgentBehaviour -class PlayerBehaviour (BaseBehaviour): +class PlayerBehaviour (MovingAgentBehaviour): def __init__(self, parent=None): super(PlayerBehaviour, self).__init__() self.parent = parent