From 9033ea1dc2c10842ab34397ef1abe755a19d7c7e Mon Sep 17 00:00:00 2001 From: Peter Froehlich Date: Sun, 13 Jun 2010 02:46:05 +0000 Subject: Grab now works even if the simulation is paused. --- diff --git a/tools.py b/tools.py index b312f0e..cfd1ab6 100644 --- a/tools.py +++ b/tools.py @@ -312,19 +312,35 @@ class GrabTool(Tool): def handleEvents(self,event): #look for default events, and if none are handled then try the custom events if not super(GrabTool,self).handleEvents(event): + # we handle two types of "grab" depending on simulation running or not if event.type == MOUSEBUTTONDOWN: if event.button == 1: # grab the first object at the mouse pointer bodylist = self.game.world.get_bodies_at_pos(event.pos, include_static=False) if bodylist and len(bodylist) > 0: - self.game.world.add.mouseJoint(bodylist[0], event.pos) + if self.game.world.run_physics: + self.game.world.add.mouseJoint(bodylist[0], event.pos) + else: + self._current_body = bodylist[0] elif event.type == MOUSEBUTTONUP: # let it go if event.button == 1: - self.game.world.add.remove_mouseJoint() - # use box2D mouse motion + if self.game.world.run_physics: + self.game.world.add.remove_mouseJoint() + else: + self._current_body = None elif event.type == MOUSEMOTION and event.buttons[0]: - self.game.world.mouse_move(event.pos) + # move it around + if self.game.world.run_physics: + # use box2D mouse motion + self.game.world.mouse_move(event.pos) + else: + # position directly (if we have a current body) + if self._current_body is not None: + x, y = self.game.world.to_world(event.pos) + x /= self.game.world.ppm + y /= self.game.world.ppm + self._current_body.position = (x, y) def cancel(self): self.game.world.add.remove_mouseJoint() -- cgit v0.9.1