def hit(collision, pairs): for pair in pairs: pair[0].material.color = [1.0, 0, 0] pair[1].material.color = [1.0, 0, 0] # Once there is a hit, system will not check # for the same collision, if you want to have the objects # back in the collision detection pipeline, you have to do # collision.resolve(pair[0], pair[1]) scene = Scene() collision = CollisionTest(callback=hit) for i in range(50): x = random.randint(-5, 5) y = random.randint(-5, 5) z = random.randint(-5, 5) if i % 2 == 0: s = Sphere() s.position = [x, y, z] scene.add_object("s_{}".format(i), s) collision.add_object(s) else: c = Cube() c.position = [x, y, z] scene.add_object("c_{}".format(i), c) collision.add_object(c) scene.add_collision_test(collision) scene.run()
spherical_car_1 = Wavefront(filename=car_object_file) spherical_car_2 = Wavefront(filename=car_object_file) aabb_car_1 = Wavefront(filename=car_object_file) aabb_car_2 = Wavefront(filename=car_object_file) spherical_car_1.position = [-2, 0, 0] spherical_car_2.position = [-2, 0, 4] aabb_car_1.position = [2, 0, 0] aabb_car_2.position = [2, 0, 4] scene.add_object("scar1", spherical_car_1) scene.add_object("scar2", spherical_car_2) scene.add_object("acar1", aabb_car_1) scene.add_object("acar2", aabb_car_2) spherical_collision.add_object(spherical_car_1) spherical_collision.add_object(spherical_car_2) aabb_collision.add_object(aabb_car_1) aabb_collision.add_object(aabb_car_2) scene.add_collision_test(spherical_collision) scene.add_collision_test(aabb_collision) scene.create_clock("motion", 0.01, motion) scene.run()
def makeItRed(collision, pairs): global moving_part for pair in pairs: pair[1].material.color = [1.0, 0, 0] collision.resolve(pair[0], pair[1]) c3.position = [c3.position[0], c3.position[1], c3.position[2] + 0.11] moving_part = c3 myScene.clocks["c2_clocks"].pause() print("Collision triggered") collision = CollisionTest(callback=makeItRed) collision.add_object(c2) collision.add_object(c3) myScene.add_collision_test("test", collision) myScene.add_object("cylinder_1", c1) myScene.add_object("cylinder_2", c2) myScene.add_object("cylinder_3", c3) def c2Move(period, total): pos = moving_part.position moving_part.position = [pos[0], pos[1], pos[2] + period] def c3Move(period, total): if moving_part == c3 and myScene.clocks["c2_clocks"]._pause: time.sleep(0.5) c3.material.color = [1.0, 1.0, 1.0]