def __init__(self): self.gravity_strength = 5.e6 self.camera.position = Vector(0, 0) self.space = self.root.add_child(SpaceNode(position=Vector(0, 0))) image = Sprite(PYTHON_IMAGE_PATH) self.attractor = self.space.add_child( BodyNode( shape=Circle(50), body_type=BodyNodeType.static, color=Color.from_int(196, 196, 196, 255) ) ) self.attractor.add_child(HitboxNode(shape=self.attractor.shape)) self.nodes = [] for _ in range(200): offset = Vector(random.randrange(1, 100), random.randrange(1, 100)) node = BodyNode( sprite=image, angular_velocity=5, velocity=Vector(30, 15), position=Vector(-512, -384) + offset, shape=Polygon.from_box(Vector(10, 10)), ) node.add_child(HitboxNode(shape=node.shape)) self.space.add_child(node) self.nodes.append(node)
def __init__(self): self.camera.position = Vector(0., 0.) self.space = self.root.add_child( SpaceNode(position=Vector(0, 0), gravity=Vector(0, 20), damping=0.9)) image = Sprite(PYTHON_IMAGE_PATH) random_angle = random.randrange(225, 315) self.node = self.space.add_child( BodyNode(mass=100, sprite=image, angular_velocity=10, shape=Polygon.from_box(Vector(20, 20)), velocity=Vector.from_angle_degrees(random_angle) * 100)) self.node.set_position_update_callback(update_position) self.node.set_velocity_update_callback(update_velocity)
def __init__(self): self.camera.position = Vector(0., 0.) self.python_img = Sprite(PYTHON_IMAGE_PATH) self.collisions_enabled = True self.space = self.root.add_child(SpaceNode(position=Vector(0, 0), )) self.box = self.space.add_child( BodyNode( body_type=BodyNodeType.kinematic, angular_velocity=0.3, )) # create bounding collision box with segments self.box_seg1 = self.box.add_child( HitboxNode( shape=Segment(Vector(-4, -4), Vector(-4, 4)), mask=HitboxMask.side, collision_mask=HitboxMask.all, color=Color(0.5, 0.5, 0.5), )) self.box_seg2 = self.box.add_child( HitboxNode( shape=Segment(Vector(-4, 4), Vector(4, 4)), mask=HitboxMask.side, collision_mask=HitboxMask.all, color=Color(0.5, 0.5, 0.5), )) self.box_seg3 = self.box.add_child( HitboxNode( shape=Segment(Vector(4, 4), Vector(4, -4)), mask=HitboxMask.side, collision_mask=HitboxMask.all, color=Color(0.5, 0.5, 0.5), )) self.box_seg4 = self.box.add_child( HitboxNode( shape=Segment(Vector(4, -4), Vector(-4, -4)), mask=HitboxMask.side, collision_mask=HitboxMask.all, color=Color(0.5, 0.5, 0.5), )) self.obj1 = self.space.add_child( BodyNode( mass=1e10, position=Vector(0, -2), velocity=Vector(-3.0, 0.5), # * 10, shape=Circle(0.2), sprite=self.python_img, color=Color(1., 0., 0., 1.), )) self.obj1_hitbox = self.obj1.add_child( HitboxNode( shape=Circle(0.2), mask=HitboxMask.snake, collision_mask=HitboxMask.all, trigger_id=CollisionTrigger.obj, visible=False, )) self.obj2 = self.space.add_child( BodyNode( mass=1e10, position=Vector(0, 2), velocity=Vector(4.0, -0.1), # * 10, shape=Circle(0.2), sprite=self.python_img, )) self.obj2_hitbox = self.obj2.add_child( HitboxNode( shape=Circle(0.2), mask=HitboxMask.snake, collision_mask=HitboxMask.all, trigger_id=CollisionTrigger.obj, visible=False, )) self.obj3 = self.space.add_child( BodyNode( mass=1e15, moment=1e20, position=Vector(-1.5, 0.1), velocity=Vector(-1.0, -2.0), angular_velocity_degrees=35., shape=Polygon([ Vector(-1, -1), Vector(1, -1), Vector(1, 1), Vector(-1, 1) ]), )) self.obj3_hitbox = self.obj3.add_child( HitboxNode( mask=HitboxMask.box1, collision_mask=HitboxMask.all, shape=self.obj3.shape, visible=False, elasticity=0.3, )) self.obj4 = self.space.add_child( BodyNode( position=Vector(0, -2), velocity=Vector(1.0, 5.0), angular_velocity_degrees=-5., shape=Polygon.from_box(Vector(0.5, 1.)), )) self.obj4_hitbox = self.obj4.add_child( HitboxNode( mask=HitboxMask.box2, collision_mask=HitboxMask.all, shape=self.obj4.shape, visible=False, elasticity=0.6, )) self.space.set_collision_handler(CollisionTrigger.obj, CollisionTrigger.obj, self.handle_collision)
def __init__(self): self.camera.position = Vector(0., 0.) self.python_img = Sprite(PYTHON_IMAGE_PATH) self.transition = NodeTransitionsSequence([ NodePositionTransition( Vector(-100., -100.), 3., advance_method=AttributeTransitionMethod.add, loops=3, easing=Easing.elastic_in_out), NodePositionTransition( Vector(100., 0.), 3., advance_method=AttributeTransitionMethod.add, easing=Easing.back_in_out), NodeTransitionDelay(1.5), NodeTransitionCallback(lambda node: setattr(node, 'sprite', None)), NodeTransitionsParallel([ NodePositionTransition( Vector(-50., 100.), 3., advance_method=AttributeTransitionMethod.add), NodeRotationTransition(1., 5.), NodeScaleTransition(Vector(2., 2.), 3.), NodeColorTransition(Color(0., 1., 0., 0.5), 4.), ], back_and_forth=True), ]) self.custom_transition = NodeCustomTransition( prepare_func=lambda node: { 'positions': [ Vector(random.uniform(-100, 100), random.uniform( -100, 100)) for _ in range(10) ] }, evaluate_func=lambda state, node, t: setattr( node, 'position', state['positions'][min(int(t * 10), 9)], ), duration=10., loops=5, ) spritesheet_frames = split_spritesheet( Sprite(EXPLOSION_IMAGE_PATH), Vector(64, 64), ) self.sprite_transition = NodeSpriteTransition( spritesheet_frames, 1., loops=0, back_and_forth=True, easing=Easing.quartic_out, ) self.space = self.root.add_child(SpaceNode()) self.obj = self.space.add_child( Node( position=Vector(50., 50.), sprite=self.python_img, transition=self.transition, )) self.custom_obj = self.space.add_child( Node( color=Color(1., 0., 0.), sprite=self.python_img, transition=self.custom_transition, )) self.phys_obj = self.space.add_child( BodyNode( color=Color(0., 1., 1.), position=Vector(-50., 50.), sprite=self.python_img, velocity=Vector(0., 30.), transition=BodyNodeVelocityTransition(Vector(0., -30.), 10.), )) self.animated_obj = self.space.add_child( Node( position=Vector(-20., 10.), transition=self.sprite_transition, ))
def __init__(self): self.camera.position = Vector(0., 0.) self.python_img = Sprite(PYTHON_IMAGE_PATH) self.transition = NodeTransitionsSequence([ NodePositionTransition( Vector(-100., -100.), 3000., advance_method=AttributeTransitionMethod.add, loops=3), NodePositionTransition( Vector(100., 0.), 3000., advance_method=AttributeTransitionMethod.add), NodeTransitionDelay(1500.), NodeTransitionCallback(lambda node: setattr(node, 'sprite', None)), NodeTransitionsParallel([ NodePositionTransition( Vector(-50., 100.), 3000., advance_method=AttributeTransitionMethod.add), NodeRotationTransition(1., 5000.), NodeScaleTransition(Vector(2., 2.), 3000.), NodeColorTransition(Color(0., 1., 0., 0.5), 4000.), ], back_and_forth=True), ]) self.custom_transition = NodeCustomTransition( lambda node: { 'positions': [ Vector(random.uniform(-100, 100), random.uniform( -100, 100)) for _ in range(10) ] }, lambda state, node, t: setattr( node, 'position', state['positions'][min(int(t * 10), 9)], ), 10000., loops=5, ) self.space = self.root.add_child(SpaceNode()) self.obj = self.space.add_child( Node( position=Vector(50., 50.), sprite=self.python_img, transition=self.transition, )) self.custom_obj = self.space.add_child( Node( color=Color(1., 0., 0.), sprite=self.python_img, transition=self.custom_transition, )) self.phys_obj = self.space.add_child( BodyNode( color=Color(0., 1., 1.), position=Vector(-50., 50.), sprite=self.python_img, velocity=Vector(0., 30.), transition=BodyNodeVelocityTransition(Vector(0., -30.), 10000.), ))
def __init__(self): self.camera.position = Vector(0, 0) self.game_over = False # physics setup self.space = self.root.add_child(SpaceNode(sprite=SPRITE_HAND, )) self.space_static = self.space.add_child( BodyNode(body_type=BodyNodeType.static, )) self.border = self.space_static.add_child( HitboxNode( position=Vector(0, 350), shape=Segment(Vector(-600, 0), Vector(600, 0)), trigger_id=CollisionTrigger.border, # color=Color(1., 0., 0., 0.5), z_index=100, )) self.space.set_collision_handler( CollisionTrigger.soap, CollisionTrigger.runner_enemy, self.on_collision_soap_enemy, phases_mask=CollisionPhase.begin, ) self.space.set_collision_handler( CollisionTrigger.border, CollisionTrigger.runner_enemy, self.on_collision_border_enemy, phases_mask=CollisionPhase.begin, ) self.space.set_collision_handler( CollisionTrigger.soap, CollisionTrigger.runner_pickup, self.on_collision_soap_pickup, phases_mask=CollisionPhase.begin, ) self.space.set_collision_handler( CollisionTrigger.border, CollisionTrigger.runner_pickup, self.on_collision_border_pickup, phases_mask=CollisionPhase.begin, ) # background parallax effect self.water_back = self.root.add_child( VerticalScrollingNode( repeat_sprite=SPRITE_WATER_BACK, scroll_duration=9000., z_index=-10, )) self.water_front = self.root.add_child( VerticalScrollingNode( repeat_sprite=SPRITE_WATER_FRONT, scroll_duration=3000., z_index=10, )) self.player_state = PlayerState() self.effects_manager = EffectsManager( root_node=self.root, camera=self.camera, ) self.runners_manager = RunnersManager(space_node=self.space, ) self.powerups_manager = PowerupsManager( player_state=self.player_state, runners_manager=self.runners_manager, ) self.player_manager = PlayerManager( player_state=self.player_state, space_node=self.space, effects_manager=self.effects_manager, ) self.ui_manager = UIManager( player_state=self.player_state, root_node=self.root, )