Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/physics.py
diff options
context:
space:
mode:
authorBrian Jordan <brian@laptop.org>2008-06-27 18:17:45 (GMT)
committer Brian Jordan <brian@laptop.org>2008-06-27 18:22:14 (GMT)
commit392a0c5a4d19da8f06b3ccab8b9d7fdcd558e64d (patch)
tree7fefd02a04479932b4afe7ccd14b12de3c6294c6 /physics.py
Initial commit
Diffstat (limited to 'physics.py')
-rwxr-xr-xphysics.py152
1 files changed, 152 insertions, 0 deletions
diff --git a/physics.py b/physics.py
new file mode 100755
index 0000000..e21a066
--- /dev/null
+++ b/physics.py
@@ -0,0 +1,152 @@
+# Physics.activity
+# Go eat an apple, Newton!
+#
+# Brian Jordan
+# Modified from Alex Levenson's testbed
+# Modified from Elements demos
+
+import pygame
+from pygame.locals import *
+from pygame.color import *
+
+import elements
+from elements import Elements
+
+def main():
+ # set up pygame
+ pygame.init()
+ size = (1200,900) # A - Any way of getting a lower resolution? Changing size?
+ #size = (1024, 768)
+ screen = pygame.display.set_mode(size)
+ clock = pygame.time.Clock()
+
+ # set up the world
+ world = elements.Elements((400,400)) # A - here?
+ world.renderer.set_surface(screen)
+
+ # set up enviornment
+ world.add.ground()
+ #world.add.wall((100, 100), (300, 300), 5)
+ #body=world.add.rect((900,300),width=300,height=25)
+ #world.add.joint(body)
+
+ # loop control
+ go = True
+
+ a = 0
+ jb1=jb2=jb1pos=jb2pos=None
+
+ # Main Loop: - processes key and mouse events, world update and draw
+ while go:
+ for event in pygame.event.get():
+ if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
+ # Quit the application -- bye bye!
+ go = False
+
+ elif event.type == KEYDOWN and event.key == K_SPACE:
+ # Pause with SPACE
+ world.run_physics = not world.run_physics
+
+ # Adds Mouse-->Object joints for grabbing/throwing objects
+ elif event.type == MOUSEBUTTONDOWN and event.button == 1:
+ # Add Mouse-->Object Joint if at an Object
+ bodylist = world.get_bodies_at_pos(event.pos, include_static=False)
+ if bodylist and len(bodylist) > 0:
+ world.add.mouseJoint(bodylist[0], event.pos)
+ elif event.type == MOUSEBUTTONUP and event.button == 1:
+ # Delete Mouse-->Object Joint
+ world.add.remove_mouseJoint()
+
+ # Uses Box2D mouse movement
+ elif event.type == MOUSEMOTION and event.buttons[0]:
+ world.mouse_move(event.pos)
+
+ # Adds Object-->Object joints for connecting objects
+ elif event.type == MOUSEBUTTONDOWN and event.button == 3:
+ # Connect bodies
+ jb1pos = event.pos
+ jb1 = world.get_bodies_at_pos(event.pos)
+ jb2 = None
+ jb2pos = None
+ elif event.type == MOUSEBUTTONUP and event.button == 3:
+ jb2 = world.get_bodies_at_pos(event.pos)
+ jb2pos = event.pos
+ if jb1 and jb2 and str(jb1) != str(jb2):
+ world.add.joint(jb1[0],jb2[0],jb1pos,jb2pos)
+ jb1 = jb2 = jb1pos = jb2pos = None
+
+ elif event.type == KEYDOWN:
+ if event.key == K_1:
+ #add a triangle
+ x,y = pygame.mouse.get_pos()
+ world.add.triangle((0,0),sidelength=40)
+ world.add.ball((x,y), radius=20)
+ elif event.key == K_2:
+ #add a circle
+ x,y = pygame.mouse.get_pos()
+ world.add.ball((100,0),radius=20)
+ #world.add.rect((100,0),width=40,height=20,angle=90)
+ #a+=10
+ elif event.key == K_3:
+ x,y = pygame.mouse.get_pos()
+ world.add.ball((200,0),radius=20)
+ elif event.key == K_4:
+ x,y = pygame.mouse.get_pos()
+ world.add.ball((300,0),radius=30)
+ elif event.key == K_5:
+ x,y = pygame.mouse.get_pos()
+ world.add.ball((400,0),radius=40)
+ elif event.key == K_6:
+ x,y = pygame.mouse.get_pos()
+ world.add.ball((500,0),radius=50)
+
+ elif event.key == K_7:
+ x,y = pygame.mouse.get_pos()
+ world.add.ball((x,y),radius=60)
+ #elif event.key == K_8:
+ # x,y = pygame.mouse.get_pos()
+ # world.add.ball((x,y),radius=20)
+
+ elif event.key == K_9:
+ # Add many triangles
+ x, y = pygame.mouse.get_pos()
+ for i in range(5):
+ for j in range(5):
+ world.add.triangle((x-i,y-j), sidelength=20)
+ #a+=10 # Rotate 10 degs
+
+ elif event.key == K_8:
+ #add many boxes
+ x,y = pygame.mouse.get_pos()
+ #for i in range(5):
+ # for j in range(5):
+ i = 0
+ for j in range(20):
+ world.add.rect((x-i,y-(j*500)),width=20,height=10,angle=a)
+ #world.add.ball((x,y-(j*500)),radius=60)
+ #a+=10
+ # Clear Display
+ screen.fill((255,255,255))
+
+ # Update & Draw World
+ world.update()
+ world.draw()
+
+ if jb1pos:
+ pygame.draw.line(screen,THECOLORS["red"],jb1pos,pygame.mouse.get_pos(),3)
+
+# pygame.draw.aaline(screen,THECOLORS["red"],(0,0),(1200,900),20)
+
+
+ # Flip Display
+ pygame.display.flip()
+
+ # Try to stay at 30 FPS
+ clock.tick(30) # originally 50
+ x,y = pygame.mouse.get_pos()
+
+
+ # output framerate in caption
+ pygame.display.set_caption("x: %i | y: %i | elements: %i | fps: %i" % (x, y, world.element_count, int(clock.get_fps())))
+if __name__ == "__main__":
+ main()