Начнём с наименее болезненных и тяжёлых к освоению. Первое, это постепенный перенос всех интерфейсов с Kool на внутреннюю UI-систему HollowEngine.
Kool долгое время очень помогал: на нём удобно было быстро собирать панели, редакторы и разные служебные окна. Но чем дальше развивается движок, тем больше нужно гибкости и контроля над интерфейсом. Окончательно это стало понятно после создания встроенной системы для скриптов. Из простой и быстрой системы вышел достаточно гибкий фреймворк, чтобы заменить все существующие интерфейсы движка.
Зачем? - В перспективе это значит - больше кастомизации, свои темы, свои стили, более удобные и расширяемые редакторы, прямая интеграция с игрой (меньше багов), стабильная работа на AMD GPU. Меньше странных ограничений "Почему у меня одно окно выталкивает другое, а ещё почему нельзя менять порядок вкладок? - потому что фреймворк так работает, я это так просто не исправлю".
Второе большое направление - я, похоже, всё же забрасываю Katari как основной язык для скриптинга и возвращаюсь к Kotlin.
Katari был интересным экспериментом. Он решал часть проблем сюжетных скриптов: приостанавливаемые функции, ожидание событий, удобные сценарии, сохранение состояния и так далее. Но со временем стало понятно, что часть проблем закрыта только частично, а некоторые нормально закрыть невозможно:
➡️ Производительность и стабильность: Я и так уже перенёс порядка 30% функционала Kotlin и построил кучу внутренних утилит просто, чтобы сделать систему базово совместимой с Kotlin. В рамках интерпретатора добиться скорости компилируемых языков практически невозможно, с другой стороны для сюжетных скриптов оно и не нужно.
➡️ Нарративная часть языка имеет много ограничений, которые портят жизнь как мне, так и вам:
- Ограниченное количество типов данных / классов, плюс каждый из них должен иметь возможность сохраняться в файл, а также ручное добавление всех функций и переменных. То есть написать аддон добавляющий новые функции или интеграцию с определённым модом крайне сложно
- Полное сохранение скрипта в ходе его работы... Но, которое работает до первой мелкой правки. Из-за того, что вся ответственность за сохранение легла на язык, он сам размечает данные и сохраняет их. Разберём простой пример - Вы создали сервер с сюжетом, в версии 1.0 у нпс 3 варианта ответа и последствия. А потом выпустили обновление 1.1, где убрали последний вариант и заменили на другую ветку. **Все сохранения** теперь не работают и полностью сбрасывают скрипт на 5000+ строк, поскольку язык априори не может знать, что делать в случае если ветки из сохранения больше нет. И таких нюансов могут быть сотни и все их предусмотреть не возможно. Таким должны заниматься люди, а не язык программирования, сами создавать в скрипте пометки и размечать данные, мол "если была найдена ветка из прошлого сохранения, то заменить её на другую". Или если сохранения вообще не было, то самому с этим разбираться, как тут выкручиваться, а не доверять алгоритму :)
Поэтому я снова смотрю в сторону Kotlin-скриптинга.
У Kotlin 2.4 появилось и появляется много приятных вещей: исправили проблемы, о которых я писал ещё зимой, упростили синтаксис для списков, контекстные параметры и прочие штуки, из-за которых скрипты можно сделать заметно удобнее. При этом Kotlin остаётся компилируемым языком, а значит производительность ровно такая же, как и у всего написанного на Java. Ну и готовая проверка ошибок, лучше поддержка IDE и меньше неожиданностей при выполнении скриптов.
Пока что я не готов презентовать новую систему скриптинга, да и новая IDE ещё полируется, но как только всё будет готово, в релиз выйдет 2.3, скорее всего уже в этом месяце!
И третье направление - редактор визуальных эффектов.
Забыл его добавить в роадмапу, но это, наверное, самая зрелищная штука из того, что сейчас хочется сделать. Идея появилась не только у меня: люди из сообщества тоже просили более удобный инструмент для эффектов.