init:
    # Объявляем большое изображение, по которому мы будем сдвигаться.
    image bg onememorial = "1memorial.jpg"

    # Объявляем объект SnowBlossom, который использует систему частиц
    # для отображения падающих лепестков сакуры.
    image snowblossom = SnowBlossom(anim.Filmstrip("sakura.png", (20, 20), (2, 1), .15), fast=True)

    # Объявляем изображение магического круга.
    image magic_circle = "magic.png"

    # Объявляем изображение, которое будет масштабироваться между разными размерами.
    image logo sizezoom = Animation(
        At("logo.png", SizeZoom((100, 300), (300, 100), 1, opaque=False)), 1,
        At("logo.png", SizeZoom((300, 100), (100, 300), 1, opaque=False)), 1,
        )

# Определяем движение по сплайну.
init python:
    spline = SplineMotion([
        ((-0.042, 0.523,),),
        ((0.768, 0.296,), (0.082, 0.507,), (0.772, 0.573,),),
        ((0.292, 0.304,), (0.766, 0.112,), (0.296, 0.123,),),
        ((1.152, 0.509,), (0.288, 0.555,), (1.076, 0.499,),),
        ], 3.0, anchors=(0.5, 0.5))
 
label demo_movement:
    
    e "Я не привязана к центру экрана, хоть мне и нравится находиться в центре внимания."

    e "Позиции, даваемые припиской {i}at{/i}, определяют, где я стою, тогда как эффект {i}move{/i} двигает изображения с изменившимся местоположением."

    e "К примеру..."

    show eileen happy at left
    with move

    e "Позиция {i}left{/i} прижимает мой левый край к левому краю экрана."

    show eileen happy at center
    with move

    e "Я могу переместитьcя в центр..."

    show eileen happy at right
    with move

    e "и вправо."
    
    show eileen happy at offscreenright with move
    
    e "Я даже могу уйти за границу экрана, как вправо..."
    
    show eileen happy at offscreenleft with move
    
    e "так и влево."
    
    show eileen happy at Position(xpos = 0.7, xanchor = 0.5,  yalign = 0.5) with move

    e "Мы не ограничиваем Вас этими предопределёнными позициями. Вы всегда можете определить собственное местоположение для изображения с помощью объекта {i}Position{/i}."

    # Дальнейшее необходимо для перезапуска времени, которое мы провели на экране
    hide eileen happy

    show eileen happy at Move((1.0, 1.0, 1.0, 1.0),
                              (0.0, 1.0, 0.0, 1.0),
                              4.0, repeat=True, bounce=True)

    e "Также возможно осуществлять перемещение по ходу диалога, используя функцию {i}Move{/i}."

    e "{i}Move{/i} может повторять перемещение, и даже заставить перемещаемый визуальный объект ходить туда-обратно, как я делаю сейчас."

    scene bg onememorial at Pan((0, 800), (0, 0), 10.0)
    with dissolve

    e "Мы можем сдвигать камеру по изображению, слишком большому, чтобы влезть в отведённое для него место, используя функцию {i}Pan{/i} в приписке {i}at{/i}. Как сейчас."

    scene bg whitehouse
    with dissolve

    # Сплайн определён в начале файла.
    show logo base at spline

    e "{i}SplineMotion{/i} позволяет задавать сложные движения по сложным путям."

    hide logo base
    
    scene bg whitehouse at Zoom((800, 600), (0, 0, 800, 600), (225, 150, 400, 300), 1.0)

    e "Мы можем приближать участок изображения..."

    scene bg whitehouse at Zoom((800, 600), (225, 150, 400, 300), (0, 0, 800, 600), 1.0)

    e "... и отдалять его обратно."

    scene bg whitehouse
    show eileen happy at FactorZoom(1.0, 0.5, 1.0, opaque=False), center

    e "Мы можем менять размер изображения в какой-либо пропорции..."

    show eileen happy at FactorZoom(0.5, 1.0, 1.0, opaque=False), center

    e "... и возвращать им первоначальный размер."

    show eileen happy at left
    # logo sizezoom поределено в начале файла.
    show logo sizezoom at Position(xalign=.75, yalign=.4) 
    with moveinright

    e "Мы можем масштабировать изображение до произвольных размеров."

    show eileen happy at center
    hide logo sizezoom
    with moveoutright

    with Pause(.5)
    
    $ renpy.layer_at_list([ Zoom((800, 600), (0, 0, 800, 600), (200, 0, 400, 300), 1)])
    with Pause(1)
    $ renpy.layer_at_list([ Zoom((800, 600), (200, 0, 400, 300), (0, 0, 800, 600), 1)])
    with Pause(1)
    $ renpy.layer_at_list([ ])

    e "Можно применять эффекты ко всему слою за раз."
    
    show eileen happy
    show magic_circle at RotoZoom(0, 360, 5, 0, 1, 1, rot_repeat=True, rot_anim_timebase=True, opaque=False, xalign=0.5, yalign=0.5)

    with Pause(1)
    
    e "Мы можем поворачивать и изменять размер изображения разом."

    e "А когда нужда в чём-то столь оккультном пропадёт, можно снова убрать изображение отдалением."

    show magic_circle at RotoZoom(0, 360, 5, 1, 0, 1, rot_repeat=True, rot_anim_timebase=True, opaque=False, xalign=0.5, yalign=0.5)

    with Pause(1)

    hide magic_circle
    
    show eileen happy    
    show logo base at Position(xpos=250, ypos=300, xanchor=0.5, yanchor=0.5), Revolve(0, 360, 4, repeat=True) behind eileen
    with dissolve
    
    "А ещё мы можем перемещать изображение по окружности."

    show bg washington
    hide logo base
    show snowblossom
    with dissolve

    e "Наконец, в Ren'Py есть система частиц, которая может быть использована для создания вещей вроде падающих лепестков, падающего снега и всплывающих пузырьков."

    e "Система частиц использует генератор для создания частиц по ходу повествования."
    
    e "Тогда как функция {i}SnowBlossom{/i} предоставляет удобный интерфейс для вещей, всплывающих и падающих по прямым линиям, всегда можно создать свою собственную."

    e "Предел - только небосвод."

    e "Ну, или земля, в случае этих лепестков."

    hide snowblossom
    with dissolve

    return
