Mercurial > fife-parpg
diff demos/rpg/scripts/objects/baseobject.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 | |
children | e4cd18a179af |
line wrap: on
line diff
--- /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)