Example #1
0
    def __init__(self, **kwargs):
        self.is_moving = False
        self.is_frozen = False
        self.current_lane = 2
        self.soap_fuel = self.soap_fuel_max = 30000

        super().__init__(
            body_type=BodyNodeType.kinematic,
            position=LANE_HERO_SLOTS[self.current_lane],
            scale=Vector.xy(0.7),
            **kwargs,
        )

        self.hitbox = self.add_child(
            HitboxNode(
                trigger_id=CollisionTrigger.soap,
                shape=Polygon.from_box(Vector(138, 330)),
                # color=Color(1., 0., 0., 0.5),
                z_index=100,
            ))

        self.transitions_manager.set(
            'animation',
            NodeSpriteTransition(self.SPRITE_FRAMES,
                                 loops=0,
                                 duration=len(self.SPRITE_FRAMES) *
                                 self.FRAME_DURATION),
        )
Example #2
0
File: main.py Project: labuzm/kaa
def update_position(node, dt):
    # reimplements default position function
    node.position += (node.velocity + node._velocity_bias) * dt
    node.rotation += (node.angular_velocity + node._angular_velocity_bias) * dt

    node._velocity_bias = Vector.xy(0)
    node._angular_velocity_bias = 0
Example #3
0
File: main.py Project: ylwb/kaa
    def __init__(self):
        self.camera.position = Vector(0., 0.)
        snake_image = Sprite(PYTHON_IMAGE_PATH)

        minimap_view = self.views[1]
        minimap_view.origin = Vector(600, 0)
        minimap_view.dimensions = Vector(200, 600)
        minimap_view.camera.position = Vector.xy(0)
        minimap_view.camera.scale = Vector.xy(200 / 800)
        minimap_view.clear_color = Color(0.5, 0.5, 0.5, 1)

        for _ in range(100):
            x = random.randrange(-400, 400)
            y = random.randrange(-1200, 1200)
            self.root.add_child(
                Node(sprite=snake_image, views={0, 1}, position=Vector(x, y)))

        self.viewport = Node(color=Color(1, 0, 0, 0.1),
                             views={1},
                             shape=Polygon.from_box(Vector(800, 600)))
        self.root.add_child(self.viewport)
Example #4
0
 def __init__(self):
     program = Program.from_files(
         'demos/assets/shaders/vs_default.sc',
         'demos/assets/shaders/fs_default.sc',
     )
     uniforms = {'u_blur': Uniform(UniformType.vec4)}
     self.blur_quality = 20.
     self.material = Material(program, uniforms)
     self.material.set_uniform_value('u_blur', (self.blur_quality, 0, 0, 0))
     self.node = self.root.add_child(
         Node(sprite=Sprite(PYTHON_IMAGE_PATH),
              position=Vector(400, 300),
              scale=Vector.xy(2),
              material=self.material))
Example #5
0
File: main.py Project: labuzm/kaa
def update_velocity(node, gravity, damping, dt):
    # reimplements default velocity function
    if node.body_type == BodyNodeType.kinematic:
        return

    assert node.mass > 0 and node.moment > 0

    f = node.force
    v = node.velocity
    m_inv = node.mass_inverse
    node.velocity = (v * damping) + ((gravity + (f * m_inv)) * dt)

    t = node.torque
    w = node.angular_velocity
    node.angular_velocity = (w * damping) + (t * m_inv * dt)

    node.force = Vector.xy(0)
    node.torque = 0
Example #6
0
    def __init__(self, position):
        super().__init__(
            position=position,
            velocity=Vector(random.uniform(-20, 20), 0.),
            rotation_degrees=random.uniform(0, 360),
            scale=Vector(0.2, 0.2) +
            Vector.xy(math.fabs(random.gauss(0.0, 1.0)), ),
            lifetime=60000.,  # 60 seconds
        )

        self.hitbox = self.add_child(
            HitboxNode(shape=random.choice(PIECE_SHAPES), ))

        if random.randint(0, 1):
            self.hitbox.color = Color(0.0, 1.0, 0.0, 1.)
            self.hitbox.mask = QueryMask.clickable
        else:
            self.hitbox.color = Color(1.0, 1.0, 0.0, 1.)
            self.hitbox.mask = QueryMask.not_clickable
Example #7
0
def test_vector():
    v1 = Vector.xy(1.)
    assert v1.x == 1. and v1.y == 1.
    v2 = Vector(2., 2.)
    assert v2.x == 2. and v2.y == 2.
    assert v1 == Vector(1., 1.)
    assert v2 == Vector(2., 2.)

    zero = Vector(0, 0)
    assert not zero
    assert zero.is_zero()

    assert v1 + v2 == Vector.xy(3)
    assert Vector.xy(3.) - v2 == v1
    assert v1 * 10 == Vector.xy(10.)
    assert Vector.xy(10.) / 10 == v1
    assert -v1 == Vector.xy(-1.)

    rotated_vector = Vector(1, 0).rotate_angle_degrees(90)
    assert pytest.approx(rotated_vector.x) == 0
    assert pytest.approx(rotated_vector.y) == 1.

    v = Vector.from_angle_degrees(90)
    assert pytest.approx(rotated_vector.x) == 0
    assert pytest.approx(rotated_vector.y) == 1.
    assert v.to_angle_degrees() == 90
    assert Vector(1., 0).angle_between_degrees(Vector(0, 1.)) == 90

    assert Vector(1., 0).normalize().dot(Vector(1, 1.).normalize()) > 0
    assert Vector(1., 0).normalize().dot(Vector(0, 1.).normalize()) == 0
    assert Vector(1., 0).normalize().dot(Vector(-1, 1.).normalize()) < 0

    assert Vector(0, 0).distance(Vector(10., 0)) == 10.

    v = Vector(10., 10.)
    assert v.normalize() == v / v.length()
    assert v.length() == math.sqrt(v.x**2 + v.y**2)
Example #8
0
File: engine.py Project: labuzm/kaa
def test_engine():
    with Engine(Vector.xy(1)) as engine:
        yield engine
Example #9
0
 def kill(self):
     self.soap.transition = NodeTransitionsParallel([
         NodeTransition(Node.scale, Vector.xy(0.0), duration=1500),
         NodeTransition(Node.color, Color(1., 0., 0., 0.), duration=1500),
     ])
     self.soap.lifetime = 1500