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