Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--helpers.py2
-rw-r--r--physics.py22
-rw-r--r--tools.py116
3 files changed, 82 insertions, 58 deletions
diff --git a/helpers.py b/helpers.py
index 335852c..1d0d2fe 100644
--- a/helpers.py
+++ b/helpers.py
@@ -147,7 +147,7 @@ def decomposePoly(vertices):
count = 2 * nv
return result
-def cast_tuple_to_int(tuple_input):
+def tuple_to_int(tuple_input):
"""Cast tuple values to ints to avoid gtk+ and pygame's dislike of floats.
"""
return [int(i) for i in tuple_input]
diff --git a/physics.py b/physics.py
index cffec6d..47eb464 100644
--- a/physics.py
+++ b/physics.py
@@ -63,11 +63,14 @@ class PhysicsGame:
# Fake a Sugar cursor for the pyGame canvas area
self.show_fake_cursor = False
- pygame.mouse.set_cursor((8, 8), (0, 0), (0, 0, 0, 0, 0, 0, 0, 0), (0, 0, 0, 0, 0, 0, 0, 0))
+ pygame.mouse.set_cursor((8, 8), (0, 0), (0, 0, 0, 0, 0, 0, 0, 0),
+ (0, 0, 0, 0, 0, 0, 0, 0))
self.cursor_picture = pygame.image.load('standardcursor.png')
self.cursor_picture.convert_alpha()
- self.canvas.connect("enter_notify_event", self.switch_on_fake_pygame_cursor_cb)
- self.canvas.connect("leave_notify_event", self.switch_off_fake_pygame_cursor_cb)
+ self.canvas.connect("enter_notify_event",
+ self.switch_on_fake_pygame_cursor_cb)
+ self.canvas.connect("leave_notify_event",
+ self.switch_off_fake_pygame_cursor_cb)
self.canvas.add_events(gtk.gdk.ENTER_NOTIFY_MASK
| gtk.gdk.LEAVE_NOTIFY_MASK)
@@ -88,8 +91,12 @@ class PhysicsGame:
for body in self.world.world.GetBodyList():
if type(body.userData) == type({}):
if body.userData.has_key('rollMotor'):
- diff = body.userData['rollMotor']['targetVelocity'] - body.GetAngularVelocity()
- body.ApplyTorque(body.userData['rollMotor']['strength'] * diff * body.getMassData().I)
+ diff = body.userData['rollMotor'] \
+ ['targetVelocity'] \
+ - body.GetAngularVelocity()
+ body.ApplyTorque(body.userData['rollMotor'] \
+ ['strength'] * diff \
+ * body.getMassData().I)
# Update & Draw World
self.world.update()
@@ -101,12 +108,13 @@ class PhysicsGame:
# Show Sugar like cursor for UI consistancy
if self.show_fake_cursor:
- self.screen.blit(self.cursor_picture, pygame.mouse.get_pos())
+ self.screen.blit(self.cursor_picture,
+ pygame.mouse.get_pos())
# Flip Display
pygame.display.flip()
- # Stay under 30 FPS to help keep the rest of the platform responsive
+ # Stay < 30 FPS to help keep the rest of the platform responsive
self.clock.tick(30) # Originally 50
def setTool(self, tool):
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()