# 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