def main(): #pylint: disable=no-member pygame.init() screen = pygame.display.set_mode((600, 600)) pygame.display.set_caption("Fall") clock = pygame.time.Clock() space = pymunk.Space() space.gravity = (0.0, 0.0) draw_options = pymunk.pygame_util.DrawOptions(screen) manager = condep.CDManager.CDManager(screen, space) star = CDUtilities.create_star(manager, 100, 100) particle = CDUtilities.create_particle(manager, 600, 600) balls = star.parts balls.append(particle.parts[0]) while True: for event in pygame.event.get(): if event.type == QUIT: sys.exit(0) elif event.type == KEYDOWN and event.key == K_ESCAPE: sys.exit(0) balls_to_remove = [] for ball in balls: grav_force = pymunk.Vec2d() for other_ball in balls: grav_force = grav_force + utilities.calc_gravitational_force( other_ball.body, ball.body) ball.body.apply_force_at_local_point(grav_force, (0, 0)) for ball in balls_to_remove: space.remove(ball, ball.body) # 3 balls.remove(ball) # 4 steps_per_frame = 50 #larger value increases accuracy of simulation, but decreases speed frames_per_tick = 1 for x in range(steps_per_frame): space.step(1 / (frames_per_tick * steps_per_frame)) screen.fill((255, 255, 255)) space.debug_draw(draw_options) manager.tick() #processes changes in CDobjects pygame.display.flip() clock.tick( 50) # argument is max framerate, which we'll probably never reach!
def test_recognises_expell_for_compound_entity(self): entity = CDUtilities.create_star(self.manager, 0, 0) entity.parts[0].body.position = Vec2d(200, 200) entity.parts[0].mark = 'Outlier' self.manager.distance_matrices = [[[None]]] events = entity._check_for_injest_or_emit(self.manager, Vec2d(0, 0)) self.assertGreater(len(events), 0, 'Should return an event') event = events[0] self.assertEqual(event.affected_attribute, EntityAttributes.inside_subject) self.assertEqual(event.attribute_outcome, EntityAttributeOutcomes.outside) self.assertEqual(event.event_object.mark, 'Outlier')
def test_handles_multiple_particles(self): entity = CDUtilities.create_star(self.manager, 10, 10) entity.get_inclusion_radius()