Mercurial > fife-parpg
changeset 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 | e4cd18a179af |
files | demos/rpg/objects/actors/player/warrior/object.xml demos/rpg/objects/actors/player/warrior/stand/045.png demos/rpg/objects/actors/player/warrior/stand/animation.xml demos/rpg/scripts/actors/baseactor.py demos/rpg/scripts/gamecontroller.py demos/rpg/scripts/objects/__init__.py demos/rpg/scripts/objects/baseobject.py |
diffstat | 6 files changed, 149 insertions(+), 59 deletions(-) [+] |
line wrap: on
line diff
--- a/demos/rpg/objects/actors/player/warrior/object.xml Tue May 25 21:41:59 2010 +0000 +++ b/demos/rpg/objects/actors/player/warrior/object.xml Wed May 26 15:28:25 2010 +0000 @@ -1,5 +1,8 @@ <?fife type="object"?> <object id="warrior" namespace="http://www.fifengine.de/xml/rpg" blocking="1" static="1"> + <action id="stand"> + <animation source="stand/animation.xml" direction="45" /> + </action> <action id="walk"> <animation source="walk/animation.xml" direction="45" /> </action>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/demos/rpg/objects/actors/player/warrior/stand/animation.xml Wed May 26 15:28:25 2010 +0000 @@ -0,0 +1,4 @@ +<animation delay="2000" namespace="http://www.fifengine.de/xml/rpg" id="warrior:walk" x_offset="0" y_offset="0"> + <frame source="045.png" /> +</animation> +
--- 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)
--- a/demos/rpg/scripts/gamecontroller.py Tue May 25 21:41:59 2010 +0000 +++ b/demos/rpg/scripts/gamecontroller.py Wed May 26 15:28:25 2010 +0000 @@ -28,9 +28,12 @@ from fife import fife +from fife.extensions.soundmanager import SoundManager +from fife.extensions.loaders import loadImportFile + from scripts.scene import Scene from scripts.guicontroller import GUIController -from fife.extensions.loaders import loadImportFile + class KeyState(object): def __init__(self): @@ -54,6 +57,7 @@ self._gamecontroller = gamecontroller self._settings = gamecontroller.settings self._eventmanager = self._engine.getEventManager() + self._soundmanager = SoundManager(self._engine) fife.IMouseListener.__init__(self) fife.IKeyListener.__init__(self) @@ -101,24 +105,29 @@ return pt = fife.ScreenPoint(event.getX(), event.getY()) - instances = self.getInstancesAt(pt); + instances = self._gamecontroller.scene.getInstancesAt(pt); + for i in instances: renderer.addOutlined(i, 173, 255, 47, 2) def mouseEntered(self, event): pass + def mouseExited(self, event): pass + def mouseClicked(self, event): pass + def mouseWheelMovedUp(self, event): pass + def mouseWheelMovedDown(self, event): pass - def mouseMoved(self, event): - pass + def mouseDragged(self, event): pass + def keyPressed(self, event): keyval = event.getKey().getValue() keystr = event.getKey().getAsString().lower()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/demos/rpg/scripts/objects/baseobject.py Wed May 26 15:28:25 2010 +0000 @@ -0,0 +1,100 @@ +#!/usr/bin/env python + +# -*- coding: utf-8 -*- + +# #################################################################### +# Copyright (C) 2005-2010 by the FIFE team +# http://www.fifengine.net +# This file is part of FIFE. +# +# FIFE is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# #################################################################### +# This is the rio de hola client for FIFE. + +import sys, os, re, math, random, shutil + +from fife import fife +from fife.extensions.loaders import loadMapFile + +class ObjectActionListener(fife.InstanceActionListener): + def __init__(self, gamecontroller, obj): + fife.InstanceActionListener.__init__(self) + obj.instance.addActionListener(self) + self._gamecontroller = gamecontroller + self._object = obj + + def onInstanceActionFinished(self, instance, action): + pass + + +class BaseGameObject(object): + 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 + + if createInstance: + self._createFIFEInstance() + else: + self._instance = self._gamecontroller.scene.actorlayer.getInstance(self._id) + self._instance.thisown = 0 + + 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 _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")) + + 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) + + def _getInstance(self): + return self._instance + + location = property(_getLocation, _setLocation) + instance = property(_getInstance)