AIMP4: Skin Engine — пользовательские провайдеры. Часть 3

Этот тип провайдера я специально вынес в отдельную статью, чтобы остановиться на его возможностях более подробно. Итак, речь пойдет о скриптах.

Прошлые статьи по теме:

  1. AIMP4: Skin Engine
  2. AIMP4: Skin Engine — элементы управления. Часть 1
  3. AIMP4: Skin Engine — элементы управления. Часть 2
  4. AIMP4: Skin Engine — пользовательские локализации
  5. AIMP4: Skin Engine — графика
  6. AIMP4: Skin Engine — оптимизации
  7. AIMP4: Skin Engine — пользовательские провайдеры. Часть 1
  8. AIMP4: Skin Engine — пользовательские провайдеры. Часть 2

 

Основной задачей скриптов является возможность динамического изменения структуры и свойств элементов скина. Все свойства, что мы видим в окне «Свойства элемента» можно менять из скрипта, включая изменение предка:

На текущий момент скриптовые возможности представлены в виде одного единственного провайдера — ScriptableOperatorCounter. Это наследник от обычного счетчика, у которого вы можете переписать функцию-обработчик изменения его значения. Для описания инструкций скрипта используется паскале-подобный синтаксис:

Как вы видите на картинке выше, скрипт имеет одну процедуру с входным параметром (значение счетчика). Все выполняемые скриптом действия должны быть привязаны к значению счетчика, поскольку оно загружается / сохраняется из пользовательского файла с настройками.

Пример

Рассмотрим простенький пример — положение кнопки будет меняться в зависимости от состояния «флажка».

Разместим в редакторе кнопку и флажок:

Теперь создадим ScriptableOperatorCounter в диалоге пользовательских провайдеров:

Вызовем диалог настройки связей для нашего «флажка» и свяжем его с ScriptableOperatorCounter:

Что у нас получилось? Клик по флажку увеличивает значение счетчика на 1, флажок, в свою очередь, использует текущее значение счетчика в качестве индикатора своего состояния, т.е. «флажок» будет стоять, когда значение счетчика > 0, и отсутствовать, если значение счетчика = 0.

Теперь настроим наш скриптовой провайдер: в первую очередь нам нужно задать модуль счетчика равный 2 (у нас 2 значения — 0 и 1). Делается это весьма просто — кнопка вызова диалога настроек счетчика находится внизу окна редактора скрипта:

Сосредоточимся на скрипте:

Я не буду переписывать здесь комментарии из скрипта, а сфокусируюсь на нюансах:

  1. Обратите внимание, что для ситуации, когда значение счетчика = 0 (значение по умолчанию), положение кнопки у нас указано ровно то, что мы указали в редакторе скинов. Проще говоря, значение по умолчанию в скрипте и в редакторе у вас должно быть одно и то же, иначе интерфейс будет вести себя неадекватно при изменении значения счетчика
  2. Если вы попытаетесь обратиться к свойству, которого нет у элемента, или зададите ему неверное значение — движок выдаст ошибку и скрипт будет «выключен»
  3. Связка BeginUpdate / EndUpdate позволяет отключить рассылку уведомлений об изменениях в элементе на время его редактирования. Рекомендуется к использованию при изменении более одного свойства за раз.

Кнопка «Собрать» позволяет проверить скрипт на наличие ошибок, если ошибок нет — скрипт соберется без проблем. Сохраняем, собираем скин и запускаем плеер:

Вместо заключения

Полный список функций, методов и свойств объектов вы сможете найти в справке к новой версии редактора скинов.

На этой ноте я хочу закончить цикл статей о новой версии скин-движка. Если у вас есть какие-то вопросы или предложения, быть может вам не хватает каких-либо возможностей — самое время написать об этом, т.к. после выпуска 4-ки изменения в структуру скинов вносить будет уже нельзя.

Следующий цикл статей будет посвящен другому глобальному изменению в AIMP4 — фонотеке.

AIMP4: Skin Engine — пользовательские провайдеры. Часть 3: 13 комментариев

  1. Tarik

    О даа, я ждал эту статью =) Одним словом — это круто!

    Парочка моментов:
    1) В редакторе в режиме теста скрипты будут работать?
    2) Можно ли получить доступ к пользовательским провайдерам? Да и не только к пользовательским (например, из скрипта вызвать action провайдера или получить данные)?

    1. Artem Автор записи

      1. Да.
      2. Да, достучаться можно, но только к публичным свойствам (например, модуль счетчика и текущее его положение). Достучаться до точек доступа нельзя, во всяком случае на сейчас. Я уверен, в ходе альфа-тестирования список возможностей будет расширяться (не только для скриптов) по ходу появления идей и сценариев использования.

  2. Zhenya

    Даа, очень круто, наконец-то долгожданные скрипты =)

    1. Будет ли автодополнение (autocomplete) в редакторе скриптов?
    2. В примере меняется заголовок кнопки. Можно ли будет использовать макросы пользовательских локализаций в скриптах?

  3. Black_AVP

    Круто — не то слово, фантастика! Да ещё на родном паскале/делфи.
    И уж совсем наглый вопрос: не будет ли, как в делфях, после постановки точки, в виде хинта выводится перечень доступных функций?

    1. Artem Автор записи

      Нет, менять курсоры нельзя, в движке такое не предусмотрено в принципе. Что касается скриптов, то изменять можно лишь свойства элементов скина, изменить, например, текстуру не получится

  4. Ya-Grisha

    Артём, a. можно ли будет с помощью скриптов достучатся до параметров настройки? к примеру вывести чекбокс «Авто подстройки под жанр»?

    b. И ещё мечта сделать комбинированную кнопку Повтор с 3-мя (или 4-мя) действиями по кругу:
    1. Повтор плейлиста — откл.
    2. Повтор плейлиста — вкл.
    3. Повтор трека — вкл.
    Возможно ли такое?

Добавить комментарий