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()
|