# Transforms used by the chibi class or chibi images

transform combine_transforms(one, two):
  one
  two

transform chibi_base(position, flip, scale):
    pos position
    anchor (0.0, 1.0)
    xzoom (-1 if flip else 1)
    zoom (0.5 * scale)

transform chibi_walk(path, times):
    function renpy.partial(chibi_path_move, path, times, _warper.linear)

transform chibi_fly:
    block:
        yoffset absolute(0)
        ease 2 yoffset absolute(-10)
        ease 2 yoffset absolute(10)
        ease 2 yoffset absolute(0)
        repeat

transform chibi_fly_move(path, times):
    parallel:
        function renpy.partial(chibi_path_move, path, times, _warper.ease_quad)

    parallel:
        yoffset absolute(0)
        ease 2 yoffset absolute(-10)
        ease 2 yoffset absolute(10)
        ease 2 yoffset absolute(0)
        repeat

transform chibi_wand:
    xoffset -72 # Note: Offset seems to be applied after zoom

transform chibi_lie:
    rotate 90
    transform_anchor True
    anchor (0.5, 0.65)
    xzoom 1 # Negate flip

transform chibi_float_move(path, times):
    combine_transforms(chibi_lie, chibi_fly_move(path, times))

transform random_blink(close_image, open_image=Null()):
    close_image
    pause .08
    open_image
    choice:
        pause 6
    choice:
        pause 3
    choice:
        # Double blink
        close_image
        pause .08
        open_image
        pause 5
    repeat

transform emote_effect():
    alpha 0.0
    on show:
        zoom 0.8
        linear .2 zoom 1.0 alpha 1.0
    on hide:
        linear .2 zoom 1.2 alpha 0.0

init python:
    def chibi_path_move(path, times, warp, trans, st, at):
        if st >= sum(times):
            trans.pos = path[-1]
            return None

        it = 0
        seg = 0
        for i in range(len(times)):
            if it + times[i] > st:
                seg = i
                break
            it += times[i]

        segt = (st - it) / times[seg]
        segt = warp(segt)
        trans.pos = renpy.atl.interpolate(segt, path[seg], path[seg + 1], renpy.atl.PROPERTIES["pos"])
        return 0