Exemplo n.º 1
0
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!
Exemplo n.º 2
0
    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')
Exemplo n.º 3
0
 def test_handles_multiple_particles(self):
     entity = CDUtilities.create_star(self.manager, 10, 10)
     entity.get_inclusion_radius()