Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/tools.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools.py')
-rw-r--r--tools.py116
1 files changed, 66 insertions, 50 deletions
diff --git a/tools.py b/tools.py
index 620322d..fb118fc 100644
--- a/tools.py
+++ b/tools.py
@@ -47,7 +47,8 @@ class Tool(object):
if hasattr(event, "action"):
if event.action == "stop_start_toggle":
# Stop/start simulation
- self.game.world.run_physics = not self.game.world.run_physics
+ toggle = self.game.world.run_physics
+ self.game.world.run_physics = not toggle
elif event.action == "focus_in":
self.game.in_focus = True
elif event.action == "focus_out":
@@ -100,7 +101,7 @@ class CircleTool(Tool):
def handleToolEvent(self, event):
if event.type == MOUSEBUTTONDOWN:
if event.button == 1:
- self.pt1 = cast_tuple_to_int(event.pos)
+ self.pt1 = tuple_to_int(event.pos)
elif event.type == MOUSEBUTTONUP:
if event.button == 1:
self.game.world.add.ball(self.pt1, self.radius,
@@ -112,13 +113,13 @@ class CircleTool(Tool):
# Draw a circle from pt1 to mouse
if self.pt1 != None:
delta = distance(self.pt1,
- cast_tuple_to_int(pygame.mouse.get_pos()))
+ tuple_to_int(pygame.mouse.get_pos()))
if delta > 0:
self.radius = max(delta, 5)
pygame.draw.circle(self.game.screen, (100, 180, 255),
self.pt1, int(self.radius), 3)
pygame.draw.line(self.game.screen, (100, 180, 255), self.pt1,
- cast_tuple_to_int(pygame.mouse.get_pos()), 1)
+ tuple_to_int(pygame.mouse.get_pos()), 1)
def cancel(self):
self.pt1 = None
@@ -141,12 +142,13 @@ class BoxTool(Tool):
def handleToolEvent(self, event):
if event.type == MOUSEBUTTONDOWN:
if event.button == 1:
- self.pt1 = cast_tuple_to_int(event.pos)
+ self.pt1 = tuple_to_int(event.pos)
elif event.type == MOUSEBUTTONUP:
if event.button == 1 and self.pt1 != None:
- mouse_x_y = cast_tuple_to_int(event.pos)
+ mouse_x_y = tuple_to_int(event.pos)
if mouse_x_y[0] == self.pt1[0] and mouse_x_y[1] == self.pt1[1]:
- self.rect = pygame.Rect(self.pt1, (-self.width, -self.height))
+ self.rect = pygame.Rect(self.pt1,
+ (-self.width, -self.height))
self.rect.normalize()
self.game.world.add.rect(self.rect.center,
max(self.rect.width, 10) / 2,
@@ -160,7 +162,7 @@ class BoxTool(Tool):
def draw(self):
# Draw a box from pt1 to mouse
if self.pt1 != None:
- mouse_x_y = cast_tuple_to_int(pygame.mouse.get_pos())
+ mouse_x_y = tuple_to_int(pygame.mouse.get_pos())
if mouse_x_y[0] != self.pt1[0] or mouse_x_y[1] != self.pt1[1]:
self.width = mouse_x_y[0] - self.pt1[0]
self.height = mouse_x_y[1] - self.pt1[1]
@@ -190,10 +192,10 @@ class TriangleTool(Tool):
def handleToolEvent(self, event):
if event.type == MOUSEBUTTONDOWN:
if event.button == 1:
- self.pt1 = cast_tuple_to_int(event.pos)
+ self.pt1 = tuple_to_int(event.pos)
elif event.type == MOUSEBUTTONUP:
if event.button == 1 and self.pt1 != None:
- mouse_x_y = cast_tuple_to_int(event.pos)
+ mouse_x_y = tuple_to_int(event.pos)
if mouse_x_y[0] == self.pt1[0] and mouse_x_y[1] == self.pt1[1]:
self.pt1 = [mouse_x_y[0] - self.line_delta[0],
mouse_x_y[1] - self.line_delta[1]]
@@ -227,7 +229,7 @@ class TriangleTool(Tool):
def draw(self):
# Draw a triangle from pt1 to mouse
if self.pt1 != None:
- mouse_x_y = cast_tuple_to_int(pygame.mouse.get_pos())
+ mouse_x_y = tuple_to_int(pygame.mouse.get_pos())
if mouse_x_y[0] != self.pt1[0] or mouse_x_y[1] != self.pt1[1]:
self.vertices = constructTriangleFromLine(self.pt1, mouse_x_y)
self.line_delta = [mouse_x_y[0] - self.pt1[0],
@@ -258,13 +260,16 @@ class PolygonTool(Tool):
def handleToolEvent(self, event):
if hasattr(event, 'button') and event.button == 1:
if event.type == MOUSEBUTTONDOWN and self.vertices is None:
- self.vertices = [cast_tuple_to_int(event.pos)]
+ self.vertices = [tuple_to_int(event.pos)]
self.safe = False
- if event.type == MOUSEBUTTONUP and self.vertices is not None and len(self.vertices) == 1 and cast_tuple_to_int(event.pos)[0] == self.vertices[0][0] and cast_tuple_to_int(event.pos)[1] == self.vertices[0][1]:
+ if event.type == MOUSEBUTTONUP and self.vertices is not None and \
+ len(self.vertices) == 1 and \
+ tuple_to_int(event.pos)[0] == self.vertices[0][0] and \
+ tuple_to_int(event.pos)[1] == self.vertices[0][1]:
if self.previous_vertices is not None:
last_x_y = self.previous_vertices[-1]
- delta_x = last_x_y[0] - cast_tuple_to_int(event.pos)[0]
- delta_y = last_x_y[1] - cast_tuple_to_int(event.pos)[1]
+ delta_x = last_x_y[0] - tuple_to_int(event.pos)[0]
+ delta_y = last_x_y[1] - tuple_to_int(event.pos)[1]
self.vertices = [[i[0] - delta_x, i[1] - delta_y]
for i in self.previous_vertices]
self.safe = True
@@ -274,22 +279,27 @@ class PolygonTool(Tool):
friction=0.5)
self.vertices = None
elif (event.type == MOUSEBUTTONUP or event.type == MOUSEBUTTONDOWN):
- if self.vertices is None or (cast_tuple_to_int(event.pos)[0] == self.vertices[-1][0] and cast_tuple_to_int(event.pos)[1] == self.vertices[-1][1]):
+ if self.vertices is None or (tuple_to_int(event.pos)[0]
+ == self.vertices[-1][0] and
+ tuple_to_int(event.pos)[1]
+ == self.vertices[-1][1]):
# Skip if coordinate is same as last one
return
- if distance(cast_tuple_to_int(event.pos), self.vertices[0]) < 15 and self.safe:
+ if distance(tuple_to_int(event.pos), self.vertices[0]) < 15 \
+ and self.safe:
self.vertices.append(self.vertices[0]) # Connect polygon
- self.game.world.add.complexPoly(self.vertices, dynamic=True,
+ self.game.world.add.complexPoly(self.vertices,
+ dynamic=True,
density=1.0,
restitution=0.16,
friction=0.5)
self.previous_vertices = self.vertices[:]
self.vertices = None
- elif distance(cast_tuple_to_int(event.pos), self.vertices[0]) < 15:
+ elif distance(tuple_to_int(event.pos), self.vertices[0]) < 15:
self.vertices = None
else:
- self.vertices.append(cast_tuple_to_int(event.pos))
- if distance(cast_tuple_to_int(event.pos), self.vertices[0]) >= 55:
+ self.vertices.append(tuple_to_int(event.pos))
+ if distance(tuple_to_int(event.pos), self.vertices[0]) > 54:
self.safe = True
def draw(self):
@@ -300,7 +310,7 @@ class PolygonTool(Tool):
self.vertices[i], self.vertices[i + 1], 3)
pygame.draw.line(self.game.screen, (100, 180, 255),
self.vertices[-1],
- cast_tuple_to_int(pygame.mouse.get_pos()), 3)
+ tuple_to_int(pygame.mouse.get_pos()), 3)
pygame.draw.circle(self.game.screen, (100, 180, 255),
self.vertices[0], 15, 3)
@@ -323,13 +333,13 @@ class MagicPenTool(Tool):
def handleToolEvent(self, event):
if event.type == MOUSEBUTTONDOWN and event.button == 1:
- self.vertices = [cast_tuple_to_int(event.pos)]
+ self.vertices = [tuple_to_int(event.pos)]
self.safe = False
elif event.type == MOUSEBUTTONUP and event.button == 1:
if len(self.vertices) == 1 and self.previous_vertices is not None:
last_x_y = self.previous_vertices[-1]
- delta_x = last_x_y[0] - cast_tuple_to_int(event.pos)[0]
- delta_y = last_x_y[1] - cast_tuple_to_int(event.pos)[1]
+ delta_x = last_x_y[0] - tuple_to_int(event.pos)[0]
+ delta_y = last_x_y[1] - tuple_to_int(event.pos)[1]
self.vertices = [[i[0] - delta_x, i[1] - delta_y]
for i in self.previous_vertices]
self.safe = True
@@ -341,8 +351,9 @@ class MagicPenTool(Tool):
self.previous_vertices = self.vertices[:]
self.vertices = None
elif event.type == MOUSEMOTION and self.vertices:
- self.vertices.append(cast_tuple_to_int(event.pos))
- if distance(cast_tuple_to_int(event.pos), self.vertices[0]) >= 55 and len(self.vertices) > 3:
+ self.vertices.append(tuple_to_int(event.pos))
+ if distance(tuple_to_int(event.pos), self.vertices[0]) >= 55 and \
+ len(self.vertices) > 3:
self.safe = True
def draw(self):
@@ -354,7 +365,7 @@ class MagicPenTool(Tool):
self.vertices[i], self.vertices[i + 1], 3)
pygame.draw.line(self.game.screen, (100, 180, 255),
self.vertices[-1],
- cast_tuple_to_int(pygame.mouse.get_pos()), 3)
+ tuple_to_int(pygame.mouse.get_pos()), 3)
pygame.draw.circle(self.game.screen, (100, 180, 255),
self.vertices[0], 15, 3)
@@ -378,11 +389,13 @@ class GrabTool(Tool):
if event.type == MOUSEBUTTONDOWN:
if event.button == 1:
# Grab the first object at the mouse pointer
- bodylist = self.game.world.get_bodies_at_pos(cast_tuple_to_int(event.pos),
- include_static=False)
+ bodylist = self.game.world.get_bodies_at_pos(
+ tuple_to_int(event.pos),
+ include_static=False)
if bodylist and len(bodylist) > 0:
if self.game.world.run_physics:
- self.game.world.add.mouseJoint(bodylist[0], cast_tuple_to_int(event.pos))
+ self.game.world.add.mouseJoint(bodylist[0],
+ tuple_to_int(event.pos))
else:
self._current_body = bodylist[0]
elif event.type == MOUSEBUTTONUP:
@@ -396,11 +409,11 @@ class GrabTool(Tool):
# Move it around
if self.game.world.run_physics:
# Use box2D mouse motion
- self.game.world.mouse_move(cast_tuple_to_int(event.pos))
+ self.game.world.mouse_move(tuple_to_int(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(cast_tuple_to_int(event.pos))
+ x, y = self.game.world.to_world(tuple_to_int(event.pos))
x /= self.game.world.ppm
y /= self.game.world.ppm
self._current_body.position = (x, y)
@@ -424,14 +437,16 @@ class JointTool(Tool):
if event.type == MOUSEBUTTONDOWN:
if event.button >= 1:
# Grab the first body
- self.jb1pos = cast_tuple_to_int(event.pos)
- self.jb1 = self.game.world.get_bodies_at_pos(cast_tuple_to_int(event.pos))
+ self.jb1pos = tuple_to_int(event.pos)
+ self.jb1 = self.game.world.get_bodies_at_pos(
+ tuple_to_int(event.pos))
self.jb2 = self.jb2pos = None
elif event.type == MOUSEBUTTONUP:
if event.button == 1:
# Grab the second body
- self.jb2pos = cast_tuple_to_int(event.pos)
- self.jb2 = self.game.world.get_bodies_at_pos(cast_tuple_to_int(event.pos))
+ self.jb2pos = tuple_to_int(event.pos)
+ self.jb2 = self.game.world.get_bodies_at_pos(
+ tuple_to_int(event.pos))
# If we have two distinct bodies, add a distance joint!
if self.jb1 and self.jb2 and str(self.jb1) != str(self.jb2):
self.game.world.add.joint(self.jb1[0], self.jb2[0],
@@ -447,7 +462,7 @@ class JointTool(Tool):
def draw(self):
if self.jb1:
pygame.draw.line(self.game.screen, (100, 180, 255), self.jb1pos,
- cast_tuple_to_int(pygame.mouse.get_pos()), 3)
+ tuple_to_int(pygame.mouse.get_pos()), 3)
def cancel(self):
self.jb1 = self.jb2 = self.jb1pos = self.jb2pos = None
@@ -466,8 +481,9 @@ class PinTool(Tool):
def handleToolEvent(self, event):
if event.type == MOUSEBUTTONDOWN:
- self.jb1pos = cast_tuple_to_int(event.pos)
- self.jb1 = self.game.world.get_bodies_at_pos(cast_tuple_to_int(event.pos))
+ self.jb1pos = tuple_to_int(event.pos)
+ self.jb1 = self.game.world.get_bodies_at_pos(
+ tuple_to_int(event.pos))
if self.jb1:
self.game.world.add.joint(self.jb1[0], self.jb1pos)
self.jb1 = self.jb1pos = None
@@ -491,8 +507,9 @@ class MotorTool(Tool):
if event.type == MOUSEBUTTONDOWN:
if event.button >= 1:
# Grab the first body
- self.jb1pos = cast_tuple_to_int(event.pos)
- self.jb1 = self.game.world.get_bodies_at_pos(cast_tuple_to_int(event.pos))
+ self.jb1pos = tuple_to_int(event.pos)
+ self.jb1 = self.game.world.get_bodies_at_pos(
+ tuple_to_int(event.pos))
if self.jb1:
self.game.world.add.motor(self.jb1[0], self.jb1pos)
self.jb1 = self.jb1pos = None
@@ -514,13 +531,12 @@ class RollTool(Tool):
def handleToolEvent(self, event):
if event.type == MOUSEBUTTONDOWN:
if event.button == 1:
- self.jb1pos = cast_tuple_to_int(event.pos)
+ self.jb1pos = tuple_to_int(event.pos)
self.jb1 = self.game.world.get_bodies_at_pos(self.jb1pos)
- if self.jb1:
- if type(self.jb1[0].userData) == type({}):
- self.jb1[0].userData['rollMotor'] = {}
- self.jb1[0].userData['rollMotor']['targetVelocity'] = -10
- self.jb1[0].userData['rollMotor']['strength'] = 40
+ if self.jb1 and type(self.jb1[0].userData) == type({}):
+ self.jb1[0].userData['rollMotor'] = {}
+ self.jb1[0].userData['rollMotor']['targetVelocity'] = -10
+ self.jb1[0].userData['rollMotor']['strength'] = 40
self.jb1 = self.jb1pos = None
def cancel(self):
@@ -541,11 +557,11 @@ class DestroyTool(Tool):
def handleToolEvent(self, event):
if pygame.mouse.get_pressed()[0]:
if not self.vertices: self.vertices = []
- self.vertices.append(cast_tuple_to_int(event.pos))
+ self.vertices.append(tuple_to_int(event.pos))
if len(self.vertices) > 10:
self.vertices.pop(0)
- tokill = self.game.world.get_bodies_at_pos(cast_tuple_to_int(event.pos))
+ tokill = self.game.world.get_bodies_at_pos(tuple_to_int(event.pos))
if tokill:
jointnode = tokill[0].GetJointList()