comparison 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
comparison
equal deleted inserted replaced
551:3b933753cba8 552:718e154a43c8
109 109
110 clickpoint = fife.ScreenPoint(event.getX(), event.getY()) 110 clickpoint = fife.ScreenPoint(event.getX(), event.getY())
111 111
112 if (event.getButton() == fife.MouseEvent.LEFT): 112 if (event.getButton() == fife.MouseEvent.LEFT):
113 self._lastmousepos = (clickpoint.x, clickpoint.y) 113 self._lastmousepos = (clickpoint.x, clickpoint.y)
114
115 #cancel last action
116 self._gamecontroller.scene.player.nextaction = None
117
114 self._gamecontroller.scene.player.walk( self._gamecontroller.scene.getLocationAt(clickpoint) ) 118 self._gamecontroller.scene.player.walk( self._gamecontroller.scene.getLocationAt(clickpoint) )
119
115 actor_instances = self._gamecontroller.scene.getInstancesAt(clickpoint, self._gamecontroller.scene.actorlayer) 120 actor_instances = self._gamecontroller.scene.getInstancesAt(clickpoint, self._gamecontroller.scene.actorlayer)
116 item_instances = self._gamecontroller.scene.getInstancesAt(clickpoint, self._gamecontroller.scene.itemlayer) 121 item_instances = self._gamecontroller.scene.getInstancesAt(clickpoint, self._gamecontroller.scene.itemlayer)
122
117 if actor_instances: 123 if actor_instances:
118 if actor_instances[0].getId() == "player": 124 actor_instance = None
119 return 125 for actor in actor_instances:
120 126 if actor.getId() == "player":
121 obj = self._gamecontroller.scene.objectlist[actor_instances[0].getId()] 127 continue
122 if obj.type == GameObjectTypes["QUESTGIVER"]: 128 else:
123 action = TalkAction(self._gamecontroller.scene.player, obj) 129 actor_instance = actor
124 self._gamecontroller.scene.player.nextaction = action 130 break
131
132 if actor_instance:
133 obj = self._gamecontroller.scene.objectlist[actor_instance.getId()]
134 if obj.type == GameObjectTypes["QUESTGIVER"]:
135 action = TalkAction(self._gamecontroller.scene.player, obj)
136 self._gamecontroller.scene.player.nextaction = action
125 137
126 if item_instances: 138 if item_instances:
127 obj = self._gamecontroller.scene.objectlist[item_instances[0].getId()] 139 obj = self._gamecontroller.scene.objectlist[item_instances[0].getId()]
128 if obj.type == GameObjectTypes["ITEM"]: 140 if obj.type == GameObjectTypes["ITEM"]:
129 action = PickUpItemAction(self._gamecontroller.scene.player, obj) 141 action = PickUpItemAction(self._gamecontroller.scene.player, obj)
342 Saves the game state and destroys the scene. 354 Saves the game state and destroys the scene.
343 """ 355 """
344 if self._scene: 356 if self._scene:
345 self._scene.serialize() 357 self._scene.serialize()
346 358
347 self._questmanager.destroy()
348
349 self._listener.detach() 359 self._listener.detach()
350 self._scene.destroyScene() 360 self._scene.destroyScene()
361 self._questmanager.destroy()
362
351 self._scene = None 363 self._scene = None
352 self._instancerenderer = None 364 self._instancerenderer = None
353 self._floatingtextrenderer = None 365 self._floatingtextrenderer = None
354 366
355 def quit(self): 367 def quit(self):