Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
pygame.init()
screen = pygame.display.set_mode((self.track_length, 200))
pygame.display.set_caption("Simulation")
clock = pygame.time.Clock()
running = True
font = pygame.font.Font(pygame.font.get_default_font(), 8)
# Initialize pymunk
self.space = space = pymunk.Space()
space.gravity = (0.0, 900.0)
space.damping = 0.7
self.touching_floor = False
# Create objects
# Floor
floor = pymunk.Body()
floor.position = pymunk.Vec2d(self.track_length/2.0 , 210)
sfloor = pymunk.Poly.create_box(floor, (self.track_length, 40))
sfloor.friction = 1.0
sfloor.collision_type = 1
space.add_static(sfloor)
# Torso
torsolength = 20 + (self.num_legs // 2 - 1) * self.leg_spacing
mass = torsolength * self.torso_height * self.torso_density
torso = pymunk.Body(mass, pymunk.moment_for_box(mass, torsolength, self.torso_height))
torso.position = pymunk.Vec2d(200, 200 - self.leg_length * 2 - self.torso_height)
storso = pymunk.Poly.create_box(torso, (torsolength, self.torso_height))
storso.group = 1
storso.collision_type = 1
storso.friction = 2.0
# space.add_static(storso)
body = pymunk.Body(body_type=pymunk.Body.STATIC)
shape = pymunk.Segment(body, [50, 10], [0, 30], 0.0)
shape.friction = 10
self.space.add(shape)
self.static_lines.append(shape)
radius = 20
separation = 150
for row in range(6):
for column in range(6):
x = column * separation + (separation // 2 * (row % 2))
y = row * separation + separation // 2
body = pymunk.Body(body_type=pymunk.Body.STATIC)
body.position = x, y
shape = pymunk.Circle(body, radius, pymunk.Vec2d(0, 0))
shape.friction = 0.3
self.space.add(body, shape)
sprite = CircleSprite("images/bumper.png", shape)
self.peg_list.append(sprite)
space.damping = 0.7
self.touching_floor = False
# Create objects
# Floor
floor = pymunk.Body()
floor.position = pymunk.Vec2d(self.track_length/2.0 , 210)
sfloor = pymunk.Poly.create_box(floor, (self.track_length, 40))
sfloor.friction = 1.0
sfloor.collision_type = 1
space.add_static(sfloor)
# Torso
torsolength = 20 + (self.num_legs // 2 - 1) * self.leg_spacing
mass = torsolength * self.torso_height * self.torso_density
torso = pymunk.Body(mass, pymunk.moment_for_box(mass, torsolength, self.torso_height))
torso.position = pymunk.Vec2d(200, 200 - self.leg_length * 2 - self.torso_height)
storso = pymunk.Poly.create_box(torso, (torsolength, self.torso_height))
storso.group = 1
storso.collision_type = 1
storso.friction = 2.0
# space.add_static(storso)
space.add(torso, storso)
# Legs
legs = []
for i in range(self.num_legs // 2):
x = 10 - torsolength / 2.0 + i * self.leg_spacing
y = self.torso_height / 2.0 - 10
legs.append( Leg(torso, (x,y), self) )
legs.append( Leg(torso, (x,y), self) )
self.space.add(shape)
self.static_lines.append(shape)
body = pymunk.Body(body_type=pymunk.Body.STATIC)
shape = pymunk.Segment(body, [50, 10], [0, 30], 0.0)
shape.friction = 10
self.space.add(shape)
self.static_lines.append(shape)
radius = 20
separation = 150
for row in range(6):
for column in range(6):
x = column * separation + (separation // 2 * (row % 2))
y = row * separation + separation // 2
body = pymunk.Body(body_type=pymunk.Body.STATIC)
body.position = x, y
shape = pymunk.Circle(body, radius, pymunk.Vec2d(0, 0))
shape.friction = 0.3
self.space.add(body, shape)
sprite = CircleSprite("images/bumper.png", shape)
self.peg_list.append(sprite)
def testReindexStaticCollision(self):
s = p.Space()
b1 = p.Body(10, 1000)
c1 = p.Circle(b1, 10)
b1.position = 20, 20
b2 = p.Body(body_type=p.Body.STATIC)
s2 = p.Segment(b2, (-10,0), (10,0),1)
s.add(b1,c1)
s.add(s2)
s2.unsafe_set_endpoints((-10,0), (100,0))
s.gravity = 0, -100
for x in range(10):
s.step(.1)
self.assertTrue(b1.position.y < 0)
b1.position = 20,20
b1.velocity = 0,0
s.reindex_static()
def testMaxBias(self):
a,b = p.Body(10,10), p.Body(10,10)
j = p.PivotJoint(a, b, (0,0))
self.assertEqual(j.max_bias, p.inf)
j.max_bias = 10
self.assertEqual(j.max_bias, 10)
def testShapes(self):
s = p.Space()
s.gravity = 0,-100
b1 = p.Body(1, 30)
c1 = p.Circle(b1, 10)
b1.position = 5, 3
c1.collision_type = 1
c1.friction = 0.5
b2 = p.Body(body_type = p.Body.STATIC)
c2 = p.Circle(b2, 10)
c2.collision_type = 2
c2.friction = 0.8
s.add(b1, c1, b2, c2)
self.called = False
def pre_solve(arb, space, data):
self.called = True
self.assertEqual(len(arb.shapes), 2)
self.assertEqual(arb.shapes[0], c1)
self.assertEqual(arb.shapes[1], c2)
return True
s.add_collision_handler(1,2).pre_solve = pre_solve
def testShapesCollide(self):
b1 = p.Body(1,1)
s1 = p.Circle(b1, 10)
b2 = p.Body(1,1)
b2.position = 30,30
s2 = p.Circle(b2, 10)
c = s1.shapes_collide(s2)
self.assertEqual(c.normal, (1, 0))
self.assertEqual(len(c.points), 1)
point = c.points[0]
self.assertEqual(point.point_a, (10,0))
self.assertEqual(point.point_b, (-10,0))
self.assertEqual(point.distance, -20)
def testGetConstraints(self):
s = p.Space()
b1 = p.Body(1,1)
b2 = p.Body(1,1)
s.add(b1)
j1 = p.PivotJoint(b1,s.static_body,(0,0))
j2 = p.PivotJoint(b2,s.static_body,(0,0))
self.assertTrue(j1 in b1.constraints)
self.assertTrue(j1 not in b2.constraints)
self.assertTrue(j1 in s.static_body.constraints)
self.assertTrue(j2 in s.static_body.constraints)
def testPointQuery(self):
s = p.Space()
b1 = p.Body(1, 1)
b1.position = 19, 0
s1 = p.Circle(b1, 10)
s.add(s1)
b2 = p.Body(1, 1)
b2.position = 0, 0
s2 = p.Circle(b2, 10)
s.add(s2)
s1.filter = p.ShapeFilter(categories = 0b10, mask=0b01)
hits = s.point_query((23,0), 0, p.ShapeFilter(categories = 0b01, mask=0b10))
self.assertEqual(len(hits), 1)
self.assertEqual(hits[0].shape, s1)
self.assertEqual(hits[0].point, (29,0))
self.assertEqual(hits[0].distance, -6)