Mercurial > fife-parpg
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