diff demos/rpg/scripts/gamecontroller.py @ 552:718e154a43c8

When you click on an object behind the player the click is no longer ignored. Fixed a bug where the players next action was performed even though the user clicked somewhere else on the map.
author prock@33b003aa-7bff-0310-803a-e67f0ece8222
date Wed, 16 Jun 2010 16:07:20 +0000
parents 3b933753cba8
children 69d50e751c9a
line wrap: on
line diff
--- a/demos/rpg/scripts/gamecontroller.py	Tue Jun 15 21:13:01 2010 +0000
+++ b/demos/rpg/scripts/gamecontroller.py	Wed Jun 16 16:07:20 2010 +0000
@@ -111,17 +111,29 @@
 
 		if (event.getButton() == fife.MouseEvent.LEFT):
 			self._lastmousepos = (clickpoint.x, clickpoint.y)
+			
+			#cancel last action
+			self._gamecontroller.scene.player.nextaction = None
+			
 			self._gamecontroller.scene.player.walk( self._gamecontroller.scene.getLocationAt(clickpoint) )
+			
 			actor_instances = self._gamecontroller.scene.getInstancesAt(clickpoint, self._gamecontroller.scene.actorlayer)
 			item_instances = self._gamecontroller.scene.getInstancesAt(clickpoint, self._gamecontroller.scene.itemlayer)
+			
 			if actor_instances:
-				if actor_instances[0].getId() == "player":
-					return
-					
-				obj = self._gamecontroller.scene.objectlist[actor_instances[0].getId()]
-				if obj.type == GameObjectTypes["QUESTGIVER"]:
-					action = TalkAction(self._gamecontroller.scene.player, obj)
-					self._gamecontroller.scene.player.nextaction = action
+				actor_instance = None
+				for actor in actor_instances:
+					if actor.getId() == "player":
+						continue
+					else:
+						actor_instance = actor
+						break
+				
+				if actor_instance:
+					obj = self._gamecontroller.scene.objectlist[actor_instance.getId()]
+					if obj.type == GameObjectTypes["QUESTGIVER"]:
+						action = TalkAction(self._gamecontroller.scene.player, obj)
+						self._gamecontroller.scene.player.nextaction = action
 			
 			if item_instances:
 				obj = self._gamecontroller.scene.objectlist[item_instances[0].getId()]
@@ -344,10 +356,10 @@
 		if self._scene:
 			self._scene.serialize()
 			
-			self._questmanager.destroy()
-		
 			self._listener.detach()
 			self._scene.destroyScene()
+			self._questmanager.destroy()
+			
 			self._scene = None
 			self._instancerenderer = None
 			self._floatingtextrenderer = None