Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/physics.py
blob: e21a06697db72b753b8a469875ac239ceb89f3df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
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()