changeset 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 f855809822cf
children 64676ea55472
files demos/shooter/fonts/FreeSans.ttf demos/shooter/gui/mainwindow.xml demos/shooter/maps/shooter_map1.xml demos/shooter/objects/backgrounds/starfield/object.xml demos/shooter/objects/backgrounds/starfield/starfield.png demos/shooter/objects/projectiles/bullet1/bullet1.png demos/shooter/objects/projectiles/bullet1/object.xml demos/shooter/objects/ships/player/object.xml demos/shooter/objects/ships/player/ship1.png demos/shooter/run.py demos/shooter/scripts/__init__.py demos/shooter/scripts/common/__init__.py demos/shooter/scripts/common/eventlistenerbase.py demos/shooter/scripts/common/helpers.py demos/shooter/scripts/scene.py demos/shooter/scripts/ships/__init__.py demos/shooter/scripts/ships/player.py demos/shooter/scripts/ships/shipbase.py demos/shooter/scripts/weapons.py demos/shooter/scripts/world.py
diffstat 17 files changed, 1362 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
Binary file demos/shooter/fonts/FreeSans.ttf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/demos/shooter/gui/mainwindow.xml	Wed Mar 31 15:40:00 2010 +0000
@@ -0,0 +1,14 @@
+<VBox opaque='0'>
+	<HBox opaque='0'>
+			<Label text = "FPS: "/>
+			<Label name="fps" text="000"/>
+	</HBox>
+	<HBox opaque='0'>
+			<Label text = "Player Position: "/>
+			<Label name="position" text="x,y                           "/>
+	</HBox>
+	<HBox opaque='0'>
+			<Label text = "Player Velocity: "/>
+			<Label name="velocity" text="x,y                           "/>
+	</HBox>
+</VBox>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/demos/shooter/maps/shooter_map1.xml	Wed Mar 31 15:40:00 2010 +0000
@@ -0,0 +1,457 @@
+<?xml version="1.0" encoding="ascii"?>
+<map id="tutorial1" format="1.0">
+	<import file="../objects/backgrounds/starfield/object.xml"></import>
+	<import file="../objects/ships/player/object.xml"></import>
+	<import file="../objects/projectiles/bullet1/object.xml"></import>
+	<layer y_scale="1.0" y_offset="0.0" pathing="cell_edges_and_diagonals" grid_type="square" id="background" rotation="0.0" x_scale="1.0" x_offset="0.0" transparency="0">
+		<instances>
+			<i o="starfield" ns="http://www.fifengine.de/xml/tutorial" x="-2.0" r="0" y="-1.0" z="0.0"></i>
+			<i r="0" x="-2.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="-2.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="-1.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="-1.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="-1.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="0.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="0.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="0.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="1.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="1.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="1.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="2.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="3.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="3.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="2.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="2.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="3.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="-2.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="-1.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="0.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="1.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="2.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="3.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="4.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="4.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="4.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="4.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="-2.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="-1.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="0.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="1.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="2.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="3.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="4.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="5.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="5.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="5.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="5.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="5.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="6.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="6.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="6.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="6.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="6.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="7.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="7.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="7.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="7.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="7.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="8.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="8.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="8.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="8.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="8.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="9.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="10.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="11.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="12.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="13.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="14.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="15.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="15.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="14.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="13.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="12.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="11.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="10.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="9.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="9.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="10.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="11.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="12.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="13.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="14.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="15.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="15.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="14.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="13.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="12.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="11.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="10.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="9.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="9.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="10.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="11.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="12.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="13.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="14.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="15.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="16.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="17.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="18.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="19.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="20.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="21.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="22.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="23.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="24.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="25.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="25.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="25.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="25.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="25.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="24.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="23.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="22.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="21.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="20.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="19.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="18.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="17.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="16.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="16.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="16.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="16.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="17.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="18.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="19.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="20.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="21.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="22.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="23.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="24.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="24.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="24.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="23.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="22.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="21.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="20.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="19.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="18.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="17.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="17.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="18.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="19.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="20.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="21.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="22.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="23.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="26.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="27.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="28.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="29.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="30.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="31.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="32.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="33.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="34.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="34.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="34.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="34.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="34.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="33.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="32.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="31.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="30.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="29.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="28.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="27.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="26.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="26.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="26.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="26.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="27.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="28.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="29.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="30.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="31.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="32.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="33.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="33.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="33.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="32.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="31.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="30.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="29.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="28.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="27.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="27.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="28.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="29.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="30.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="31.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="32.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="35.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="36.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="37.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="38.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="39.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="40.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="41.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="42.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="43.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="43.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="43.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="43.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="43.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="42.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="41.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="40.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="39.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="38.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="37.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="36.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="35.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="35.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="36.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="37.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="38.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="39.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="40.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="41.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="42.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="42.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="41.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="40.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="39.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="38.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="37.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="36.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="35.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="35.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="36.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="37.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="38.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="39.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="40.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="41.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="42.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="-3.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="-3.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="-3.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="-3.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="-3.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="44.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="45.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="46.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="47.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="48.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="49.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="50.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="51.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="52.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="52.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="51.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="50.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="49.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="48.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="47.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="46.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="45.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="44.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="44.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="45.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="46.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="47.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="48.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="49.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="50.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="51.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="52.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="52.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="51.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="50.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="49.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="48.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="47.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="46.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="45.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="44.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="44.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="45.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="46.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="47.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="48.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="49.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="50.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="51.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="52.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="53.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="53.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="53.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="53.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="53.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="54.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="55.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="56.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="57.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="58.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="59.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="59.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="60.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="60.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="60.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="60.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="60.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="59.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="58.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="57.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="56.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="55.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="54.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="54.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="54.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="54.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="55.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="56.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="57.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="58.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="58.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="59.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="59.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="58.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="57.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="56.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="55.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="55.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="56.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="57.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="61.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="62.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="63.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="64.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="65.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="66.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="67.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="67.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="67.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="67.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="67.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="66.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="65.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="64.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="63.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="62.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="61.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="61.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="62.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="63.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="64.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="65.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="66.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="66.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="66.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="65.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="64.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="63.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="62.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="61.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="61.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="62.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="63.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="64.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="65.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="68.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="69.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="70.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="71.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="72.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="73.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="74.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="75.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="76.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="76.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="76.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="76.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="76.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="75.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="74.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="73.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="72.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="71.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="70.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="69.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="68.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="68.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="69.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="70.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="71.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="72.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="73.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="74.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="75.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="75.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="74.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="73.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="72.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="71.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="70.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="69.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="68.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="68.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="69.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="70.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="71.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="72.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="73.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="74.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="75.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="77.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="77.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="77.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="77.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="77.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="78.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="79.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="80.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="81.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="82.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="83.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="83.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="82.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="81.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="80.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="84.0" o="starfield" z="0.0" y="2.0"></i>
+			<i r="0" x="84.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="84.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="84.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="84.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="83.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="82.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="81.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="80.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="79.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="78.0" o="starfield" z="0.0" y="-2.0"></i>
+			<i r="0" x="78.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="78.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="78.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="79.0" o="starfield" z="0.0" y="1.0"></i>
+			<i r="0" x="79.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="79.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="80.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="81.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="82.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="83.0" o="starfield" z="0.0" y="-1.0"></i>
+			<i r="0" x="83.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="82.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="81.0" o="starfield" z="0.0" y="0.0"></i>
+			<i r="0" x="80.0" o="starfield" z="0.0" y="0.0"></i>
+		</instances>
+	</layer>
+	<layer y_scale="1.0" y_offset="0.0" pathing="cell_edges_and_diagonals" grid_type="square" id="objects" rotation="0.0" x_scale="1.0" x_offset="0.0" transparency="0">
+		<instances>
+			<i o="ship1" z="0.0" x="-1.0" r="0" y="0.0" id="player"></i>
+		</instances>
+	</layer>
+	<camera ref_cell_height="256" zoom="1" rotation="0.0" ref_layer_id="background" ref_cell_width="256" id="main" tilt="0.0">
+	</camera>
+</map>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/demos/shooter/objects/backgrounds/starfield/object.xml	Wed Mar 31 15:40:00 2010 +0000
@@ -0,0 +1,4 @@
+<?fife type="object"?>
+<object id="starfield" namespace="http://www.fifengine.de/xml/tutorial" blocking="0" static="1">
+	<image source="starfield.png" direction="0" />
+</object>
Binary file demos/shooter/objects/backgrounds/starfield/starfield.png has changed
Binary file demos/shooter/objects/projectiles/bullet1/bullet1.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/demos/shooter/objects/projectiles/bullet1/object.xml	Wed Mar 31 15:40:00 2010 +0000
@@ -0,0 +1,4 @@
+<?fife type="object"?>
+<object id="bullet1" namespace="http://www.fifengine.de/xml/tutorial" blocking="0" static="1">
+	<image source="bullet1.png" direction="0" />
+</object>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/demos/shooter/objects/ships/player/object.xml	Wed Mar 31 15:40:00 2010 +0000
@@ -0,0 +1,4 @@
+<?fife type="object"?>
+<object id="ship1" namespace="http://www.fifengine.de/xml/tutorial" blocking="0" static="1">
+	<image source="ship1.png" direction="0" />
+</object>
Binary file demos/shooter/objects/ships/player/ship1.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/demos/shooter/run.py	Wed Mar 31 15:40:00 2010 +0000
@@ -0,0 +1,125 @@
+#!/usr/bin/env python
+
+# -*- 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
+# ####################################################################
+# This is the rio de hola client for FIFE.
+
+import sys, os, re, math, random, shutil
+
+fife_path = os.path.join('..','..','engine','python')
+if os.path.isdir(fife_path) and fife_path not in sys.path:
+	sys.path.insert(0,fife_path)
+
+from fife import fife
+print "Using the FIFE python module found here: ", os.path.dirname(fife.__file__)
+
+from fife.extensions import *
+from scripts import world
+from scripts.common import eventlistenerbase
+from fife.extensions.basicapplication import ApplicationBase
+from fife.extensions import pychan
+from fife.extensions.pychan import widgets
+
+class ApplicationListener(eventlistenerbase.EventListenerBase):
+	def __init__(self, engine, world):
+		super(ApplicationListener, self).__init__(engine,regKeys=True,regCmd=True, regMouse=False, regConsole=True, regWidget=True)
+		self.engine = engine
+		self.world = world
+		engine.getEventManager().setNonConsumableKeys([
+			fife.Key.ESCAPE,])
+
+		self.quit = False
+
+	def keyPressed(self, evt):
+		keyval = evt.getKey().getValue()
+		keystr = evt.getKey().getAsString().lower()
+		consumed = False
+		if keyval == fife.Key.ESCAPE:
+			self.quit = True
+			evt.consume()
+
+	def onCommand(self, command):
+		self.quit = (command.getCommandType() == fife.CMD_QUIT_GAME)
+		if self.quit:
+			command.consume()
+
+class Tutorial(ApplicationBase):
+	def __init__(self):
+		super(Tutorial,self).__init__()
+		pychan.init(self.engine, debug=False)
+		self.world = world.World(self.engine)
+		self.listener = ApplicationListener(self.engine, self.world)
+		self.world.load("maps/shooter_map1.xml")
+
+	def loadSettings(self):
+		"""
+		Load the settings from a python file and load them into the engine.
+		Called in the ApplicationBase constructor.
+		"""
+
+		engineSetting = self.engine.getSettings()
+		engineSetting.setDefaultFontGlyphs(" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,!?-+/():;%&amp;`'*#=[]\"")
+		engineSetting.setDefaultFontPath("fonts/FreeSans.ttf")
+		engineSetting.setDefaultFontSize(12)
+		engineSetting.setBitsPerPixel(16)
+		engineSetting.setScreenWidth(1024)
+		engineSetting.setScreenHeight(768)
+		engineSetting.setRenderBackend("OpenGL")
+		engineSetting.setFullScreen(0)
+
+		try:
+			engineSetting.setWindowTitle("FIFE - Shooter")
+		except:
+			pass			
+		try:
+			engineSetting.setImageChunkingSize(256)
+		except:
+			pass
+
+	def initLogging(self):
+		"""
+		Initialize the LogManager.
+		"""
+		#LogModules = list()
+		#LogModules.append("controller")
+		LogModules = ["controller",]
+		self.log = fifelog.LogManager(self.engine, 1, 0)
+		if LogModules:
+			self.log.setVisibleModules(*LogModules)
+
+	def createListener(self):
+		pass # already created in constructor
+
+	def _pump(self):
+		if self.listener.quit:
+			self.breakRequested = True
+		else:
+			self.world.pump()
+
+def main():
+	app = Tutorial()
+	app.run()
+
+
+if __name__ == '__main__':
+	main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/demos/shooter/scripts/common/eventlistenerbase.py	Wed Mar 31 15:40:00 2010 +0000
@@ -0,0 +1,73 @@
+# -*- 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 EventListenerBase(fife.IKeyListener, fife.ICommandListener, fife.IMouseListener, fife.ConsoleExecuter):
+	def __init__(self, engine, regKeys=False, regCmd=False, regMouse=False, regConsole=False, regWidget=False):
+		self.eventmanager = engine.getEventManager()
+
+		fife.IKeyListener.__init__(self)
+		if regKeys:
+			self.eventmanager.addKeyListener(self)
+		fife.ICommandListener.__init__(self)
+		if regCmd:
+			self.eventmanager.addCommandListener(self)
+		fife.IMouseListener.__init__(self)
+		if regMouse:
+			self.eventmanager.addMouseListener(self)
+		fife.ConsoleExecuter.__init__(self)
+		if regConsole:
+			engine.getGuiManager().getConsole().setConsoleExecuter(self)
+
+
+	def mousePressed(self, evt):
+		pass
+	def mouseReleased(self, evt):
+		pass	
+	def mouseEntered(self, evt):
+		pass
+	def mouseExited(self, evt):
+		pass
+	def mouseClicked(self, evt):
+		pass
+	def mouseWheelMovedUp(self, evt):
+		pass	
+	def mouseWheelMovedDown(self, evt):
+		pass
+	def mouseMoved(self, evt):
+		pass
+	def mouseDragged(self, evt):
+		pass
+	def keyPressed(self, evt):
+		pass
+	def keyReleased(self, evt):
+		pass
+	def onCommand(self, command):
+		pass
+	def onToolsClick(self):
+		print "No tools set up yet"
+	def onConsoleCommand(self, command):
+		pass
+	def onWidgetAction(self, evt):
+		pass
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/demos/shooter/scripts/common/helpers.py	Wed Mar 31 15:40:00 2010 +0000
@@ -0,0 +1,102 @@
+# -*- 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
+
+
+def normalize(vector):
+	"""
+	Helper function to normalize a vector
+	"""
+	norm = fife.DoublePoint(0,0) 
+		
+	invLength = 1.0/vector.length()
+	if invLength > 1e-06:
+		norm.x = vector.x * invLength;
+		norm.y = vector.y * invLength;
+	else:
+		norm.x = 0
+		norm.y = 0
+	
+	return norm
+	
+class Rect(object):
+	def __init__(self, x = 0, y = 0, w = 0, h = 0):
+		self._x = x
+		self._y = y
+		self._w = w
+		self._h = h
+		
+	def intersects(self, rect):
+		_x = self._x - rect.x;
+		_y = self._y - rect.y;
+		_w = self._w;
+		_h = self._h;
+
+		if _x < 0:
+			_w += _x
+			_x = 0
+
+		if _y < 0:
+			_h += _y
+			_y = 0
+
+		if _x + _w > rect.w:
+			_w = rect.w - _x
+
+		if _y + _h > rect.h:
+			_h = rect.h - _y
+			
+		if _w <= 0 or _h <= 0:
+			return False
+
+		return True
+
+	def _setX(self, x):
+		self._x = x
+		
+	def _getX(self):
+		return self._x
+
+	def _setY(self, y):
+		self._y = y
+		
+	def _getY(self):
+		return self._y
+		
+	def _setW(self, w):
+		self._w = w
+		
+	def _getW(self):
+		return self._w
+		
+	def _setH(self, h):
+		self._h = h
+		
+	def _getH(self):
+		return self._h
+		
+	x = property(_getX, _setX)
+	y = property(_getY, _setY)
+	w = property(_getW, _setW)
+	h = property(_getH, _setH)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/demos/shooter/scripts/scene.py	Wed Mar 31 15:40:00 2010 +0000
@@ -0,0 +1,75 @@
+# -*- 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
+from scripts.ships.shipbase import Ship
+from scripts.ships.player import Player
+from scripts.common.helpers import Rect
+
+class Scene(object):
+	def __init__(self, engine, objectLayer):
+		self._engine = engine
+		self._model = engine.getModel()
+		self._layer = objectLayer
+		
+		self._player = Player(self._model, 'player', self._layer)
+		self._projectiles = list()
+		self._lasttime = 0
+		
+	def attachCamera(self, cam):
+		self._camera = cam
+		self._camera.setLocation(self._player.location)
+		
+	def _getPlayer(self):
+		return self._player
+
+	def update(self, time, keystate):
+		timedelta = time - self._lasttime
+		self._lasttime = time
+		
+		self._player.update(timedelta, keystate, self._camera)
+		
+		#update camera location
+		loc = self._player.location
+		exactloc = self._camera.getLocation().getExactLayerCoordinates()
+		exactloc.x += timedelta * 0.0005
+		loc.setExactLayerCoordinates(exactloc)
+		self._camera.setLocation(loc)
+		
+		#update the list of projectiles
+		todelete = list()
+		for p in self._projectiles:
+			p.update(time)
+			if not p.running:
+				todelete.append(p)
+		for p in todelete:
+			self._projectiles.remove(p)
+		
+		#fire the currently selected gun
+		if keystate['SPACE']:
+			prjct = self._player.fire(time)
+			if prjct:
+				self._projectiles.append(prjct)
+
+	player = property(_getPlayer)
+		
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/demos/shooter/scripts/ships/player.py	Wed Mar 31 15:40:00 2010 +0000
@@ -0,0 +1,87 @@
+# -*- 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
+from scripts.ships.shipbase import Ship
+from scripts.common.helpers import Rect
+
+
+class Player(Ship):
+	def __init__(self, scene, shipName, layer):
+		super(Player, self).__init__(scene, shipName, layer, True)
+		self._bounds = Rect(-100,-100,200,200)
+		
+	def update(self, timedelta, keystate, camera):
+		key = False
+		
+		oldpos = self.location
+		
+		if keystate['UP']:
+			self.applyThrust(fife.DoublePoint(0,-0.075))
+			key = True
+		if keystate['DOWN']:
+			self.applyThrust(fife.DoublePoint(0,0.075))
+			key = True
+		if keystate['LEFT']:
+			self.applyThrust(fife.DoublePoint(-0.075,0))
+			key = True
+		if keystate['RIGHT']:
+			self.applyThrust(fife.DoublePoint(0.075,0))
+			key = True
+			
+		if not key and self._velocity.length() > 0:
+			self.applyBrake(0.075)
+		
+		super(Player, self).update(timedelta)
+		
+		#set up the players camera bounds
+		#TODO: grab screen resolution from somewhere
+		topleft = camera.toMapCoordinates(fife.ScreenPoint(0,0))
+		bottomright = camera.toMapCoordinates(fife.ScreenPoint(1024,768))
+
+		#add a little padding to the left edge
+		topleft.x += 0.1
+		
+		camrect = Rect(topleft.x, topleft.y, bottomright.x - topleft.x, bottomright.y - topleft.y)
+	
+		#player bounding box
+		#TODO: make this configurable
+		pos = self.location.getExactLayerCoordinates()
+		bbox = Rect()
+		bbox.x = pos.x - 0.005
+		bbox.y = pos.y - 0.005
+		bbox.w = 0.01
+		bbox.h = 0.01
+		
+		if not bbox.intersects(camrect):
+			if pos.x < topleft.x:
+				pos.x += timedelta * 0.0005
+				oldpos.setExactLayerCoordinates(pos)
+				self._velocity.x = timedelta * 0.0005
+			else:
+				self._velocity.x = 0
+
+			self._velocity.y = 0
+
+			self.location = oldpos
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/demos/shooter/scripts/ships/shipbase.py	Wed Mar 31 15:40:00 2010 +0000
@@ -0,0 +1,136 @@
+# -*- 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
+from scripts.common.helpers import normalize
+from scripts.weapons import Weapon
+
+class Ship(object):
+	def __init__(self, scene, shipName, layer, uniqInMap=True):
+		self._scene = scene
+		self._name = shipName
+		self._layer = layer
+		if uniqInMap:
+			self._instance = self._layer.getInstance(self._name)
+		else:
+			#have to create instance here
+			self._instance = None
+		
+		#velocity as a vector
+		self._velocity = fife.DoublePoint(0,0)
+		self._maxvelocity = 0.025
+		self._timedelta = 0
+		self._weapon = None
+
+	def _getMaxVelocity(self):
+		return self._maxvelocity
+		
+	def _setMaxVelocity(self, maxvel):
+		self._maxvelocity = maxvel
+
+	def _getLocation(self):
+		return self._instance.getLocation()
+		
+	def _setLocation(self, loc):
+		self._instance.setLocation(loc)
+
+	def _getInstance(self):
+		return self._instance
+	
+	def _getVelocity(self):
+		return self._velocity
+	
+	def _setWeapon(self, weapon):
+		self._weapon = weapon
+		
+	def _getWeapon(self, weapon):
+		return self._weapon
+		
+	def applyThrust(self, vector):
+		self._velocity.x += vector.x * (self._timedelta/1000.0)
+		self._velocity.y += vector.y * (self._timedelta/1000.0)
+		
+		if self._velocity.length() > self._maxvelocity:
+			norm = normalize(self._velocity)
+			self._velocity.x = norm.x * self._maxvelocity
+			self._velocity.y = norm.y * self._maxvelocity
+		
+	
+	def applyBrake(self, brakingForce):
+
+		if self._velocity.length() <= .001:
+			self._velocity.x = 0
+			self._velocity.y = 0			
+			return
+		
+		#first normalize to get a unit vector of the direction we are traveling
+		norm = normalize(self._velocity)
+		if norm.length() == 0:
+			self._velocity.x = 0
+			self._velocity.y = 0
+			return
+			
+		#negate to get opposite direction
+		norm.x = norm.x * -1
+		norm.y = norm.y * -1
+		
+		#apply braking deceleration  
+		norm.x *= brakingForce
+		norm.y *= brakingForce
+		
+		self._velocity.x += norm.x * (self._timedelta/1000.0)
+		self._velocity.y += norm.y * (self._timedelta/1000.0)
+		
+	def fire(self, curtime):
+		if self._weapon:
+			return self._weapon.fire(curtime)
+		
+		return None
+	
+	def start(self):
+		pass
+
+	def update(self, timedelta):
+		self._timedelta = timedelta
+		
+		shiploc = self.location
+		exactloc = shiploc.getExactLayerCoordinates()
+		
+		exactloc.x += self._velocity.x
+		exactloc.y += self._velocity.y
+				
+		shiploc.setExactLayerCoordinates(exactloc)
+		self.location = shiploc
+	
+	def stop(self):
+		pass
+		
+	def destroy(self):
+		pass
+		
+	location = property(_getLocation,_setLocation)
+	instance = property(_getInstance)
+	velocity = property(_getVelocity)
+	maxvelocity = property(_getMaxVelocity, _setMaxVelocity)
+	weapon = property(_getWeapon, _setWeapon)
+	
\ No newline at end of file
--- /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
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/demos/shooter/scripts/world.py	Wed Mar 31 15:40:00 2010 +0000
@@ -0,0 +1,180 @@
+# -*- 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
+import math, random
+from fife.extensions import pychan
+from fife.extensions.pychan import widgets
+
+from scripts.common.eventlistenerbase import EventListenerBase
+from scripts.common.helpers import normalize
+from fife.extensions.loaders import loadMapFile
+
+from scripts.ships.shipbase import Ship
+from scripts.ships.player import Player
+from scripts.scene import Scene
+from scripts.weapons import Weapon
+
+class World(EventListenerBase):
+	"""
+	The world!
+
+	This class handles:
+	  setup of map view (cameras ...)
+	  loading the map
+	  GUI for right clicks
+	  handles mouse/key events which aren't handled by the GUI.
+	   ( by inheriting from EventlistenerBase )
+
+	That's obviously too much, and should get factored out.
+	"""
+	def __init__(self, engine):
+		super(World, self).__init__(engine, regMouse=True, regKeys=True)
+		self.engine = engine
+		self.timemanager = engine.getTimeManager()
+		self.eventmanager = engine.getEventManager()
+		self.model = engine.getModel()
+		self.filename = ''
+		self.keystate = { 'UP': False, 'DOWN': False, 'LEFT': False, 'RIGHT': False, 'CTRL': False, 'SPACE': False, } 
+		self.dynamic_widgets = {}
+		self.pump_ctr = 0
+		self.map = None
+		self.scene = None
+
+	def reset(self):
+		"""
+		Clear the agent information and reset the moving secondary camera state.
+		"""
+		self.cameras = {}
+
+	def load(self, filename):
+		"""
+		Load a xml map and setup agents and cameras.
+		"""
+		self.filename = filename
+		self.reset()
+		self.map = loadMapFile(filename, self.engine)
+
+		self.scene = Scene(self.engine, self.map.getLayer('objects'))
+		#self.initPlayer()
+		self.initCameras()
+		
+		self.mainwindow = pychan.loadXML('gui/mainwindow.xml')
+		self.fpstext = self.mainwindow.findChild(name="fps")
+		self.velocitytext = self.mainwindow.findChild(name="velocity")
+		self.positiontext = self.mainwindow.findChild(name="position")
+		self.mainwindow.position = (0,0)
+		self.mainwindow.show()
+		
+		#give player the default weapon
+		self.scene.player.weapon = Weapon(self.model, self.map.getLayer('objects'), self.scene.player, 100)
+		
+	def initCameras(self):
+		"""
+		Before we can actually see something on screen we have to specify the render setup.
+		This is done through Camera objects which offer a viewport on the map.
+		"""
+		
+		for cam in self.map.getCameras():
+			if cam.getId() == 'main':
+				self.cameras['main'] = cam
+				
+		self.scene.attachCamera(self.cameras['main'])
+		
+
+	def keyPressed(self, evt):
+		keyval = evt.getKey().getValue()
+		keystr = evt.getKey().getAsString().lower()
+		if keyval == fife.Key.UP:
+			self.keystate['UP'] = True
+		elif keyval == fife.Key.DOWN:
+			self.keystate['DOWN'] = True
+		elif keyval == fife.Key.LEFT:
+			self.keystate['LEFT'] = True
+		elif keyval == fife.Key.RIGHT:
+			self.keystate['RIGHT'] = True
+		elif keyval == fife.Key.SPACE:
+			self.keystate['SPACE'] = True
+		elif keyval in (fife.Key.LEFT_CONTROL, fife.Key.RIGHT_CONTROL):
+			self.keystate['CTRL'] = True
+
+	def keyReleased(self, evt):
+		keyval = evt.getKey().getValue()
+		if keyval == fife.Key.UP:
+			self.keystate['UP'] = False
+		elif keyval == fife.Key.DOWN:
+			self.keystate['DOWN'] = False
+		elif keyval == fife.Key.LEFT:
+			self.keystate['LEFT'] = False
+		elif keyval == fife.Key.RIGHT:
+			self.keystate['RIGHT'] = False
+		elif keyval == fife.Key.SPACE:
+			self.keystate['SPACE'] = False
+		elif keyval in (fife.Key.LEFT_CONTROL, fife.Key.RIGHT_CONTROL):
+			self.keystate['CTRL'] = False
+
+	def mouseWheelMovedUp(self, evt):
+		if self.keystate['CTRL']:
+			self.cameras['main'].setZoom(self.cameras['main'].getZoom() * 1.05)
+
+	def mouseWheelMovedDown(self, evt):
+		if self.keystate['CTRL']:
+			self.cameras['main'].setZoom(self.cameras['main'].getZoom() / 1.05)
+
+	def mousePressed(self, evt):
+		if evt.isConsumedByWidgets():
+			return
+
+		clickpoint = fife.ScreenPoint(evt.getX(), evt.getY())
+
+	def mouseMoved(self, evt):
+		pt = fife.ScreenPoint(evt.getX(), evt.getY())
+
+	def pump(self):
+		"""
+		Called every frame.
+		"""
+		
+		#update the scene
+		self.scene.update(self.timemanager.getTime(), self.keystate)
+		
+		
+		#update the HUD
+		avgframe = self.timemanager.getAverageFrameTime()
+		if avgframe > 0:
+			fps = 1 / (avgframe / 1000)
+		else:
+			fps = 0
+		fpstxt = "%3.2f" % fps
+		self.fpstext.text = unicode(fpstxt)
+		
+		player = self.scene.player
+		exactcoords = player.location.getExactLayerCoordinates()
+		pos = "%1.2f" % exactcoords.x + ", %1.2f" % exactcoords.y
+		self.positiontext.text = unicode(pos)
+		
+		vel = "%1.2f" % player.velocity.x + ", %1.2f" % player.velocity.y
+		self.velocitytext.text = unicode(vel)
+		
+		
+		self.pump_ctr += 1