Mercurial > fife-parpg
diff demos/shooter/scripts/weapons.py @ 446:2046a1f2f5f2
Adding the shooter demo. This is still a work in progress.
author | prock@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Wed, 31 Mar 2010 15:40:00 +0000 |
parents | |
children | 64676ea55472 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/demos/shooter/scripts/weapons.py Wed Mar 31 15:40:00 2010 +0000 @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- + +# #################################################################### +# Copyright (C) 2005-2009 by the FIFE team +# http://www.fifengine.de +# 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 +# #################################################################### + +from fife import fife + +class Projectile(object): + def __init__(self, model, projectileName, layer, timeToLive): + self._model = model + self._name = projectileName + self._layer = layer + self._instance = None + self._velocity = None + self._obj = self._model.getObject(self._name, "http://www.fifengine.de/xml/tutorial") + self._running = False + self._ttl = timeToLive + self._starttime = 0 + + def create(self, location): + self._instance = self._layer.createInstance(self._obj, location.getExactLayerCoordinates(), "bullet") + fife.InstanceVisual.create(self._instance) + + def run(self, velocity, location, time): + if not self._running: + self._velocity = velocity + + self.create(location) + self._running = True + + self._starttime = time + + def destroy(self): + if self._running and self._instance: + self._layer.deleteInstance(self._instance) + self._running = False + + def _getLocation(self): + return self._instance.getLocation() + + def _setLocation(self, loc): + self._instance.setLocation(loc) + + def _isRunning(self): + return self._running + + def _getTTL(self): + return self._ttl + + def update(self, curtime): + if self._running and (curtime - self._starttime) < self._ttl: + projloc = self.location + exactloc = projloc.getExactLayerCoordinates() + + exactloc.x += self._velocity.x + exactloc.y += self._velocity.y + + projloc.setExactLayerCoordinates(exactloc) + self.location = projloc + else: + self.destroy() + + location = property(_getLocation,_setLocation) + running = property(_isRunning) + ttl = property(_getTTL) + +class Weapon(object): + def __init__(self, model, layer, ship, firerate): + self._model = model + self._layer = layer + self._ship = ship + self._firerate = firerate + self._lastfired = 0 + + def fire(self, curtime): + if (curtime - self._lastfired) > self._firerate: + pjctl = Projectile(self._model, "bullet1", self._layer, 2000 ) + pjctl.run(fife.DoublePoint(0.075,0), self._ship.location, curtime) + self._lastfired = curtime + return pjctl + + return None +