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 – фонотеке.

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

  1. Soolo

    Мне, как непрограммисту, пока что на это страшно смотреть. Надеюсь, что не всё так сложно, как выглядит на первый взгляд =)

  2. Tarik

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

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

    1. Artem Post author

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

  3. Zhenya

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

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

    1. Artem Post author

      1. Пока нет
      2. В виде макросов – конечно, в виде финального текста – нет (на мой взгляд, это и не нужно)

  4. Black_AVP

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

  5. Ya-Grisha

    Артём, можно ли будет с помощью скриптов заменить курсоры мыши для всех действий?
    Можно ли будет навесить шлейф (или болтающуюся цепь) на мышь?

    1. Artem Post author

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

  6. Ya-Grisha

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

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

Leave a Reply