Exemple #1
0
    def __init__(self):
        self.camera.position = Vector(0., 0.)
        self.python_img = Sprite(PYTHON_IMAGE_PATH)
        self.box_img = Sprite(BOX_IMAGE_PATH)

        self.objects = []
        self.random_collisions = False
        self.collision_spawning = False

        self.space = self.root.add_child(SpaceNode())
        self.box = self.space.add_child(BodyNode(
            sprite=self.box_img,
            body_type=BodyNodeType.kinematic,
            angular_velocity_degrees=30.,
        ))
        # create bounding collision box with segments
        self.box_seg1 = self.box.add_child(HitboxNode(
            shape=Segment(Vector(-143, -143), Vector(-143, 143)),
        ))
        self.box_seg2 = self.box.add_child(HitboxNode(
            shape=Segment(Vector(-143, 143), Vector(143, 143)),
        ))
        self.box_seg3 = self.box.add_child(HitboxNode(
            shape=Segment(Vector(143, 143), Vector(143, -143)),
        ))
        self.box_seg4 = self.box.add_child(HitboxNode(
            shape=Segment(Vector(143, -143), Vector(-143, -143)),
        ))

        for i in range(5):
            self.spawn_object()

        self.space.set_collision_handler(
            COLLISION_TRIGGER, COLLISION_TRIGGER,
            self.on_collision,
            phases_mask=(CollisionPhase.begin |
                         CollisionPhase.separate),
        )

        self.observed_ball = [
            n for n in self.space.children if isinstance(n, FlyingBall)
        ][0]
Exemple #2
0
    def __init__(self):
        self.camera.position = Vector(0., 0.)
        self.python_img = Sprite(PYTHON_IMAGE_PATH)

        self.obj = self.root.add_child(Node(
            position=Vector(-50, 0),
            shape=Circle(10.),
            color=random_color(),
        ))

        self.obj.transitions_manager.set(
            'movement',
            NodeTransition(
                Node.position, Vector(100, 30), 3.,
                advance_method=AttributeTransitionMethod.add,
                loops=0, back_and_forth=True,
            )
        )
Exemple #3
0
from kaa.engine import Engine, Scene
from kaa.geometry import Vector
from kaa.sprites import Sprite
import os

# creating objects outside engine's 'with' context like this will cause your program crash:
loose_sprite = Sprite(os.path.join('assets', 'gfx', 'arrow.png'))


# everything else below is good!
class MyScene(Scene):
    def update(self, dt):
        for event in self.input.events():
            if event.system and event.system.quit:
                self.engine.quit()


with Engine(virtual_resolution=Vector(800, 600)) as engine:
    my_scene = MyScene()
    engine.run(my_scene)
Exemple #4
0
    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):
        # Load images:
        self.background_img = Sprite(
            os.path.join('assets', 'gfx', 'background.png'))
        self.title_screen_background_img = Sprite(
            os.path.join('assets', 'gfx', 'title-screen.png'))
        self.player_img = Sprite(os.path.join('assets', 'gfx', 'player.png'))
        self.machine_gun_img = Sprite(
            os.path.join('assets', 'gfx', 'machine-gun.png'))
        self.force_gun_img = Sprite(
            os.path.join('assets', 'gfx', 'force-gun.png'))
        self.grenade_launcher_img = Sprite(
            os.path.join('assets', 'gfx', 'grenade-launcher.png'))
        self.machine_gun_bullet_img = Sprite(
            os.path.join('assets', 'gfx', 'machine-gun-bullet.png'))
        self.force_gun_bullet_img = Sprite(
            os.path.join('assets', 'gfx', 'force-gun-bullet.png'))
        self.grenade_launcher_bullet_img = Sprite(
            os.path.join('assets', 'gfx', 'grenade-launcher-bullet.png'))
        self.enemy_stagger_img = Sprite(
            os.path.join('assets', 'gfx', 'enemy-stagger.png'))
        # few variants of bloodstains, put them in the same list so we can pick them randomly later
        self.bloodstain_imgs = [
            Sprite(os.path.join('assets', 'gfx', f'bloodstain{i}.png'))
            for i in range(1, 5)
        ]

        # Load spritesheets
        self.enemy_spritesheet = Sprite(
            os.path.join('assets', 'gfx', 'enemy.png'))
        self.blood_splatter_spritesheet = Sprite(
            os.path.join('assets', 'gfx', 'blood-splatter.png'))
        self.explosion_spritesheet = Sprite(
            os.path.join('assets', 'gfx', 'explosion.png'))
        # enemy-death.png has a few death animations, so make this a list
        self.enemy_death_spritesheet = Sprite(
            os.path.join('assets', 'gfx', 'enemy-death.png'))

        # use the spritesheets to create framesets
        self.enemy_frames = split_spritesheet(self.enemy_spritesheet,
                                              frame_dimensions=Vector(33, 74))
        self.blood_splatter_frames = split_spritesheet(
            self.blood_splatter_spritesheet, frame_dimensions=Vector(50, 50))
        self.explosion_frames = split_spritesheet(self.explosion_spritesheet,
                                                  frame_dimensions=Vector(
                                                      100, 100),
                                                  frames_count=75)

        self.enemy_death_frames = [
            split_spritesheet(self.enemy_death_spritesheet.crop(
                Vector(0, i * 74), Vector(103 * 9, 74)),
                              frame_dimensions=Vector(103, 74))
            for i in range(0, 5)
        ]

        # Load all sounds
        self.mg_shot_sound = Sound(os.path.join('assets', 'sfx',
                                                'mg-shot.wav'))
        self.force_gun_shot_sound = Sound(
            os.path.join('assets', 'sfx', 'force-gun-shot.wav'))
        self.grenade_launcher_shot_sound = Sound(
            os.path.join('assets', 'sfx', 'grenade-launcher-shot.wav'))
        self.explosion_sound = Sound(
            os.path.join('assets', 'sfx', 'explosion.wav'))

        # Load all music tracks
        self.music_track_1 = Music(
            os.path.join('assets', 'music', 'track_1.wav'))

        # Load all fonts
        self.font_1 = Font(
            os.path.join('assets', 'fonts', 'paladise-script.ttf'))
        self.font_2 = Font(os.path.join('assets', 'fonts', 'DejaVuSans.ttf'))
Exemple #6
0
 def __init__(self):
     self.root.add_child(Node(position=Vector(100, 100),
                              sprite=Sprite(os.path.join('demos', 'assets', 'python_small.png'))))
Exemple #7
0
    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.),
            ))
Exemple #8
0
LANE_HERO_SLOTS = [Vector(3 + (109 * i), 220) for i in range(-2, 3)]

LANE_ENEMY_SLOTS = [Vector(3 + (109 * i), -500) for i in range(-2, 3)]


class CollisionTrigger(enum.IntEnum):
    border = enum.auto()
    soap = enum.auto()
    runner_enemy = enum.auto()
    runner_pickup = enum.auto()


ASSETS_DIRECTORY = Path(__file__).parent / 'assets'
assert ASSETS_DIRECTORY.is_dir()

SPRITE_WATER_BACK = Sprite(str(ASSETS_DIRECTORY / 'bg.png'))
SPRITE_WATER_FRONT = Sprite(str(ASSETS_DIRECTORY / 'fasterbg.png'))
SPRITE_HAND = Sprite(str(ASSETS_DIRECTORY / 'hand.png'))
SPRITE_FRAMES_SOAP = split_spritesheet(
    Sprite(str(ASSETS_DIRECTORY / 'soapthis.png')),
    Vector(138, 364),
)
SPRITE_SOAP_METER = Sprite(str(ASSETS_DIRECTORY / 'sopaometer.png')).crop(
    Vector(10, 0), Vector(285, 24))
SPRITE_FRAMES_VIRUS = split_spritesheet(
    Sprite(str(ASSETS_DIRECTORY / 'coronavirus.png')),
    Vector(90, 109),
)
SPRITE_ANTIVIRUS = Sprite(str(ASSETS_DIRECTORY / 'antiv.png'))
SPRITE_LIQUID_SOAP = Sprite(str(ASSETS_DIRECTORY / 'liquidsoap.png'))
SPRITE_OIL = Sprite(str(ASSETS_DIRECTORY / 'oil.png'))