Mercurial > fife-parpg
diff demos/rpg/scripts/actors/baseactor.py @ 517:c3a026cdd91b
Added the BaseGameObject class and put it in it's own file. All game object will inherit it. Added instance action listeners.
author | prock@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Wed, 26 May 2010 15:28:25 +0000 |
parents | d70fc46c8aa5 |
children | 14f777be6b94 |
line wrap: on
line diff
--- a/demos/rpg/scripts/actors/baseactor.py Tue May 25 21:41:59 2010 +0000 +++ b/demos/rpg/scripts/actors/baseactor.py Wed May 26 15:28:25 2010 +0000 @@ -29,68 +29,42 @@ from fife import fife from fife.extensions.loaders import loadMapFile -ActorStates = {'IDLE':0, +from scripts.objects.baseobject import ObjectActionListener, BaseGameObject + +ActorStates = {'STAND':0, 'WALK':1, 'ATTACK':2} -class Actor(object): +class ActorActionListener(ObjectActionListener): + def __init__(self, gamecontroller, obj): + super(ActorActionListener, self).__init__(gamecontroller, obj) + + def onInstanceActionFinished(self, instance, action): + if action.getId() == 'walk': + self._object.stand() + +class Actor(BaseGameObject): def __init__(self, gamecontroller, instancename, instanceid=None, createInstance=False): - """ - @param gamecontroller: A reference to the master game controller - @param instancename: The name of the object to load. The object's XML file must - be part of the map file or added with fife.extensions.loaders.loadImportFile - @param instanceid: used if you want to give a specific ID to the instance to - differenciate it from other instances - @param createInstance: If this is True it will attempt to be loaded from disk and not - use one that has already been loaded from the map file. See the note about the - instancename paramater above. - """ - self._gamecontroller = gamecontroller - self._fifeobject = None - self._name = instancename - if instanceid: - self._id = instanceid - else: - self._id = self._name - - self._instance = None + super(Actor, self).__init__(gamecontroller, instancename, instanceid, createInstance) + + self._walkspeed = self._gamecontroller.settings.get("RPG", "DefaultActorWalkSpeed", 4.0) + + self._actionlistener = ActorActionListener(self._gamecontroller, self) - if createInstance: - self._createFIFEInstance() - else: - self._instance = self._gamecontroller.scene.actorlayer.getInstance(self._id) - self._instance.thisown = 0 - - self._walkspeed = self._gamecontroller.settings.get("RPG", "DefaultActorWalkSpeed", 4.0) - self._state = ActorStates["IDLE"] + self.stand() + + def stand(self): + self._state = ActorStates["STAND"] + self._instance.act('stand', self._instance.getFacingLocation()) - def destroy(self): - """ - Deletes the FIFE instance from the actor layer on the map. - """ - if self._instance : - self._gamecontroller.scene.actorlayer.deleteInstance(self._instance) - self._instance = None - def walk(self, location): self._state = ActorStates["WALK"] self._instance.move('walk', location, self._walkspeed) - - def _createFIFEInstance(self): - """ - Should not be called directly. Use the constructor! - """ - mapmodel = self._gamecontroller.engine.getModel() - self._fifeobject = mapmodel.getObject(self._name, self._gamecontroller.settings.get("RPG", "ObjectNamespace", "http://www.fifengine.de/xml/rpg")) + + def _getState(self): + return self._state - self._instance = self._gamecontroller.scene.actorlayer.createInstance(self._fifeobject, fife.ModelCoordinate(0,0), self._id) - fife.InstanceVisual.create(self._instance) - self._instance.thisown = 0 - - def _getLocation(self): - return self._instance.getLocation() - - def _setLocation(self, loc): - self._instance.setLocation(loc) - - location = property(_getLocation,_setLocation) + def _setState(self, state): + self._state = state + + state = property(_getState, _setState)