Ну что, как и обещал, новая документация по HollowEngine ⚡️
С сайтом по документации помогали:
Без них я бы тут ещё недельку возился бы с этим React, TypeScript и другими непонятными словами :)
Пока ещё есть над чем работать, но уже лучше, чем копаться в
С сайтом по документации помогали:
@urliveyn - сам сайт, документация;
@axelswamp - макет и дизайн;
@algorithmlx_today - деплой и домен.
Без них я бы тут ещё недельку возился бы с этим React, TypeScript и другими непонятными словами :)
Пока ещё есть над чем работать, но уже лучше, чем копаться в
.md файле на пару тысяч строк)Please open Telegram to view this post
VIEW IN TELEGRAM
1❤🔥9👍7🥰5❤2🐳2🔥1👀1
This media is not supported in your browser
VIEW IN TELEGRAM
У вас тоже такое бывает, сидишь, делаешь систему для диалоговых окон и всяких менюшек, а получается браузер? 😂
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤15😨6🔥3
Media is too big
VIEW IN TELEGRAM
Закончив с основными задачами по скриптингу, я по многочисленным просьбам занялся созданием интерфейсов. Как вы могли видеть в демке на неделе, я начал писать свой фреймворк с нуля. Сами интерфейсы пишутся и декорируются в
.ui и .hss файлах соответственно.Сейчас в целом система уже более чем рабочая, я даже добавил подсветку синтаксиса, подсказки и предпросмотр. Остаются разве что всякие небольшие баги при совокупности большого числа модификаторов, но в целом уже можно создавать довольно интересные штуки.
Из интересных возможностей библиотеки:
✔️ Гибкая настройка всех элементов: размеры, цвета, форма, фильтры, вроде чёрно-белого или размытия, отступы и многое другое.✔️ Удобная система анимаций: можно настроить переключение многих параметров при наведении курсора, кликах и других событиях.✔️ Вращение и перспектива: компоненты можно наклонять по 3 осям, при этом нажатия тоже будут обрабатываться в 3D-пространстве✔️ Классический xml+css подход с возможностью расширения: удобная настройка и стилизация компонентов. Не нужно отдельно настраивать стиль каждой кнопки, достаточно выдать ей тег (хотя если очень хочется, можно и каждую настроить😂 )✔️ Полная интеграция с Minecraft: предметы, блоки, сущности - всё можно рендерить в гуишке.🚫 Пока ещё нет динамического добавления новых элеметов, условно из тех же скриптов в духе того же React.🚫 Пока ещё нет интеграции со скриптами и в целом открыть гуишку кроме как через предпросмотр нельзя.
Короче говоря, движок стал ещё на одну голову выше)
Думаю скоро залью эту версию в Telegram чат бустеров, пока без документации и с некоторыми косяками, но в целом есть подсказки, да и оно довольно похоже на классический веб, так что думаю разобраться возможно
P.S.
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤🔥4❤1🔥1 1
Media is too big
VIEW IN TELEGRAM
Новая гуи либа становится всё интереснее 🐼 🌟
правда я где-то накосячил с шрифтом и он его немного плющит)
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤8🔥3❤🔥1😱1
Media is too big
VIEW IN TELEGRAM
Кто-то на прошлой неделе писал, что поста не будет, не верьте ему, это был вброс!
За эту неделю я
Но это только начало, в скриптовом языке Katari теперь поддерживаются xml-литералы для интерфейсов, а также json-подобные структуры данных для передачи между клиентом и сервером (а также позже их можно будет использовать и для настройки тегов предметов)
Выглядит это всё примерно так:
val dialog = ui(
<box id="dialog" layout="column" size="300px auto" padding="12px" gap="8px">
<text value="Привет, игрок!" foreground="#FFFFFF" font-size="16px" />
<button id="accept" background="#339933" onPressed='emit(struct { event: "accept" })'>Принять</button>
<button id="cancel" background="#993333" onPressed='emit(struct { event: "cancel" })'>Отмена</button>
</box>
)
dialog.showScreen(player)
Или же вот так:
val tag = struct {
custom_name: {text:"Рандомный меч", color:"gold", bold:true},
lore: [
{text:"Это легендарное оружие найденное в каком-то прогнившем подвале", color:"dark_purple", italic:true}
],
enchantments: {
levels: {'minecraft:sharpness':5, 'minecraft:unbreaking':3}
},
unbreakable:{}
}
player.give("minecraft:diamond_sword", tag)Как мне кажется, это куда удобнее, чем писать всё внутри одной строки и выделять кавычки символом:
'\'.Кроме того, по мелочи была исправлена большая часть багов с редактором, добавлена пара новых функций и местами доработан дизайн.
На текущий момент всё уже готово и лежит на гитхабе (в том числе и система катсцен, которая ранее была доступна только бустерам), и на этом я пожалуй могу сказать, что всё что я хотел добавить в движок в первую очередь - реализовано
Поэтому, теперь я уже займусь стабильностью, мелкими исправлениями багов и доработками, так что пишите если что, исправлять буду сразу пачками
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤4🍾4
Сегодня опять не воскресенье, но думаю делаю девлог авансом)
В целом, как я и писал на прошлой неделе, вместо добавления нового функционала, я сейчас сосредоточен на доработке и документировании того, что уже есть. За эту неделю были поправлены небольшие баги с редактором, вроде кейбиндов, окон и других виджетов. А также я добавил в UI-систему расширенное форматирование текста (утром показывал в сообществе).
Ну а теперь к менее радостным новостям - я думаю завершить с еженедельными постами. По факту сейчас нет каких-то прям громких новостей и интересных тем, так что на тему вроде "я добавил 3 новые страницы в документацию" или "Поправил 5 багов, которые всем надоели" выпускать посты я особо не хочу. Лучше уж тогда, как раньше, если есть что-то интересное - просто сделаю пост, нету - не буду ради этого тратить время, чтобы записать очередной ролик или пост.
Ну и на последок, на Boosty вышел куда больший пост с дальнейшими планами по движку, я обновил RoadMap, так что советую изучить:
https://boosty.to/hollowhorizon/posts/a633e5f9-c0a6-428b-9d1a-0fed652bb328
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤7😭3
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
HollowEngine 2.2 | UI-система и диалоговые окна
Я опять сделал обновление движка. Теперь там можно делать кастомные интерфейсы... На CSS 💀
Полезные ссылки:
⚡️Мой GitHub: https://github.com/HollowHorizon/
🎨HollowEngine Discord: https://discord.gg/qKpPhkwGCY
💭Telegram: https://t.me/hollowengine
📝HollowEngine…
Полезные ссылки:
⚡️Мой GitHub: https://github.com/HollowHorizon/
🎨HollowEngine Discord: https://discord.gg/qKpPhkwGCY
💭Telegram: https://t.me/hollowengine
📝HollowEngine…
1❤8🔥3🐳1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥2🐳2👍1 1
Теперь, насчёт текущих и дальшнейших планов ✈️
Начнём с наименее болезненных и тяжёлых к освоению. Первое, это постепенный перенос всех интерфейсов с Kool на внутреннюю UI-систему HollowEngine.
Второе большое направление - я, похоже, всё же забрасываю Katari как основной язык для скриптинга и возвращаюсь к Kotlin.
И третье направление - редактор визуальных эффектов.
Забыл его добавить в роадмапу, но это, наверное, самая зрелищная штука из того, что сейчас хочется сделать. Идея появилась не только у меня: люди из сообщества тоже просили более удобный инструмент для эффектов.
Начнём с наименее болезненных и тяжёлых к освоению. Первое, это постепенный перенос всех интерфейсов с 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, скорее всего уже в этом месяце!
И третье направление - редактор визуальных эффектов.
Забыл его добавить в роадмапу, но это, наверное, самая зрелищная штука из того, что сейчас хочется сделать. Идея появилась не только у меня: люди из сообщества тоже просили более удобный инструмент для эффектов.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Хочется сделать что-то в духе Effekseer, Kool или Photon, но встроенное прямо в экосистему HollowEngine. То есть не просто "загрузить готовый эффект", а дать возможность удобно собирать эффекты внутри мода: частицы, эмиттеры, кривые, параметры, материалы/шейдеры, цвет, размер, скорость и другие параметры, а также привязка к объектам движка и полная настройка и интеграция со скриптингом, чего сложно добиться с внешней библиотекой, особенно нативной, вроде Effekseer. Ну и разумеется API для разработчиков модов, поскольку напомню, HollowEngine в ближайшее время можно будет использовать как библиотеку для ваших модов.
По удобству хочется ориентироваться скорее на Unity-подобный подход: чтобы эффект можно было собрать, сразу посмотреть, подкрутить параметры, сохранить и использовать без возни с отдельными программами или перезагрузкой ресурсов. Плюс, скриптинг может значительно расширить классические эффекты из разряда "запустил и забыл".
При этом важно не забыть про производительность. Эффекты могут быть красивыми, но если они начинают убивать FPS, пользы от них мало. Поэтому я хочу сразу закладывать нормальную архитектуру: батчинг, либо compute шейдеры, если они поддерживаются для тяжёлых эффектов и симуляций. В качестве примера можете посмотреть этот или этот, на самом деле рендерить миллионы партиклов способны даже встроенные видеокарты, не говоря уже о дискретных, просто зачастую сделаны они довольно халтурно)
Ну и кроме того, я решил открыть первый сбор на Boosty. Сумма не космическая, но уже и не пара обедов, поэтому сразу уточню, это не ультиматум и не предзаказ. Не будет такого, что если сбор не закроется, то система эффектов никогда не появится. И не будет такого, что если сбор закроется сегодня, то завтра уже выйдет готовый редактор. Скорее это способ поддержать это направление разработки. HollowEngine уже несколько лет развивается как бесплатный инструмент: без обязательной оплаты, без рекламы и без попытки спрятать всё полезное за подписку. Но чем больше становится проект, тем больше времени занимают крупные системы. Если вам такое направление интересно и вы хотите помочь ему появиться быстрее - поддержка на Boosty будет очень кстати
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Наверное, пора рассказать, чем я занимался всё это время? 👀
Осторожно, много букав!
А произошло на самом деле много всего. Если коротко: в HollowEngine система интерфейсов довольно сильно расширилась, появились новые инструменты для редакторов, улучшились NPC, а также были пофикшены всякие баги и почищен код.
Начнём с интерфейсов.
Ещё важный момент: мод теперь может работать независимо от наличия Sodium и Iris.
Теперь про NPC.
Katari и серверные скрипты тоже стали немного стабильнее, больше они не вызывают пролаг сервера после каждого действия.
Ну и, конечно, было много "невидимой" работы: чистки старого кода, удаление устаревших тестов, фиксы крашей, правки Gradle, обновление Kotlin до 2.4.0, обновление зависимостей и куча мелких оптимизаций.
Это всё касаемо "того что было", через пару минут ещё выйдет пост касаемо "того, что будет" и почему так.
А произошло на самом деле много всего. Если коротко: в HollowEngine система интерфейсов довольно сильно расширилась, появились новые инструменты для редакторов, улучшились NPC, а также были пофикшены всякие баги и почищен код.
Начнём с интерфейсов.
В UI были добавлены кейфреймы и анимации. Теперь виджетам можно задать зацикленные анимации или одноразовые анимации открытия/закрытия. Например, окно теперь может не просто мгновенно исчезать, а красиво проиграть closing-анимацию и только потом закрыться.
Из новых виджетов появились поля ввода текста, чекбоксы, переключатели, слайдеры, Popup'ы, выпадающие элементы, подсказки и встроенные в текст виджеты. Текстовые поля тоже заметно расширились: они поддерживают однострочный и многострочный режим, фильтры ввода, выделение, несколько кареток, ctrl + z / ctrl + shift + z, автодополнение, диагностику текста, внутритекстовые подсказки, номера строк и нормальный скролл. По сути, это уже не просто "поле ввода", а полноценный текстовый редактор, который довольно просто расширить и до IDE.
Отдельно был реализован докинг. Теперь в интерфейсах можно делать окна, которые закрепляются по сторонам, делятся на области, складываются во вкладки и перетаскиваются между панелями. Раньше использовался аналог из Kool, но с ним сложнее работать и не хватает некоторых фич, которые я не могу переделать без согласования с автором движка)
Ещё одно большое изменение - UI под капотом был переписан на Compose Runtime. Сам рендер всё ещё кастомный, но сама логика построения интерфейсов теперь основана на Compose-подходе, проще говоря, интерфейсы стали гораздо удобнее описывать кодом, производительность существенно выросла, а сам движок получил фундамент для более сложных интерактивных редакторов.
С рендером тоже было много работы. Добавлена поддержка MSDF-шрифтов, пока ещё не для повседневного использования, но это легко расширить до классических ttf/rtf шрифтов. Плюс добавлена гибкая обрезка виджетов по произвольным маскам и добавлена поддержка .svg картинок.
Ещё важный момент: мод теперь может работать независимо от наличия Sodium и Iris.
Теперь про NPC.
У NPC были исправлены проблемы с хитбоксами на клиенте. Ранее он хранился только на сервере из-за чего были некоторые косяки.
Немного доработан навигатор нпс, теперь он ближе к ванильному, плюс команда "посмотреть на сущность" подразумевает голову, а не ноги)
Katari и серверные скрипты тоже стали немного стабильнее, больше они не вызывают пролаг сервера после каждого действия.
Ну и, конечно, было много "невидимой" работы: чистки старого кода, удаление устаревших тестов, фиксы крашей, правки Gradle, обновление Kotlin до 2.4.0, обновление зависимостей и куча мелких оптимизаций.
Это всё касаемо "того что было", через пару минут ещё выйдет пост касаемо "того, что будет" и почему так.
❤1
Ладно, вышел косяк с отложенными постами, если что читать в этом порядке 😂
- [Что было сделано за последние пару недель 😶🌫️]
- [Что уже готовится к новому релизу 😱]
- [Сбор средств на разработку и проектирование системы эффектов 👀]
Похоже нельзя мне надолго пропадать, а то слишком много потом писать приходится)))
- [Что было сделано за последние пару недель 😶🌫️]
- [Что уже готовится к новому релизу 😱]
- [Сбор средств на разработку и проектирование системы эффектов 👀]
Похоже нельзя мне надолго пропадать, а то слишком много потом писать приходится)))
Please open Telegram to view this post
VIEW IN TELEGRAM
🥴5❤2
Тем временем я практически закончил перенос с Katari на Kotlin.
Если коротко, о том, что изменилось:
Пока что я это лишь бета, к релизу я собираюсь обновить функции связанные с анимациями и интерфейсами, а также завершить миграцию с Kool UI на собственный фреймворк движка - там по сути остаётся перенести только интерфейс катсцен✨
Обновлённая документация (там пока остались пара старых статей с Katari, но их скоро удалят 🙃 ):
🛞 https://0mods.team/docs/hollowengine/scripting
Если коротко, о том, что изменилось:
👩💻 Были добавлены 3 новых типа скриптов:
✈️ Одноразовый - запускается вручную или через другие скрипты.
🔄 Перезагружаемый - запускается вместе с игрой.
📝 Компонент - можно прицепить к определённым объектам.🔤 Обновлена встроенная IDE, теперь она более отзывчивая и поддерживает больше конструкций связанных со скриптингом и Kotlin в целом.💾 Более гибкая система сохранения, теперь можно сохранять как глобальные данные скрипта, так и удобно делить его на небольшие фрагменты продолжая с того момента, который вы сами укажете.📦 Полная интеграция с классами игры, то есть весь функционал доступный в обычных модах теперь доступен в скриптах. Позднее появится и возможность импортировать другие моды в скриптах.
Пока что я это лишь бета, к релизу я собираюсь обновить функции связанные с анимациями и интерфейсами, а также завершить миграцию с Kool UI на собственный фреймворк движка - там по сути остаётся перенести только интерфейс катсцен
Обновлённая документация (
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤5
This media is not supported in your browser
VIEW IN TELEGRAM
HollowEngine теперь и такое умеет 👀
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥12🥰3❤2🤯2😱1
Media is too big
VIEW IN TELEGRAM
Ну что, движок тем временем не стоит на месте. Я практически завершил с обновлением, из нового:
На мой взгляд этого уже достаточно, чтобы постепенно начинать строить на движке реальные проекты (например, в ролике я буквально одним скриптом реализовал подсказку, как в моде Jade). Хотя до выпуска на CurseForge и Modrinth, я пока что ещё планирую завершить расширенную версию State-функций и дочистить скриптовый API🫠
- Завершена миграция с Kool на самописный фреймворк интерфейсов😕
- Теперь пользоваться UI-фреймворком можете и Вы (см. документацию)
- Встроенная IDE, наконец, поддерживает FIR-плагины (Compose и Serialization теперь работают в скриптах), если вы хоть немного шарите в Kotlin, думаю вам это о чём-то да говорит💻
- Звуки теперь можно настраивать прямо в редакторе (подробнее тут)📢
- Улучшена навигация NPC в мире🖥
- Улучшены действия нпс, починен скиннинг и скелетные анимации. Исправлена поддержка моделей форматов `.geo.json` (и molang анимаций)🤩
- Добавлены node-скрипты, которые можно прикреплять к нпс или другим сущностям, включая игроков⚙️
- UI-фреймворк теперь использует высокопроизводительные шейдеры, а также поддерживает практически любую векторную графики🫣
На мой взгляд этого уже достаточно, чтобы постепенно начинать строить на движке реальные проекты (например, в ролике я буквально одним скриптом реализовал подсказку, как в моде Jade). Хотя до выпуска на CurseForge и Modrinth, я пока что ещё планирую завершить расширенную версию State-функций и дочистить скриптовый API
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤6🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Дошли руки допилить ещё одну фичу, скоро появится в обнове и документации 👍
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤6😨2❤🔥1🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥7❤2✍2
Сегодня, наконец, довёл до ума шрифты в UI-системе. Теперь их есть 3 режима:
🧊 Ванильный (теперь по умолчанию, раньше был Monocraft): Простой bitmap шрифт, т.е. просто картинка со всеми символами. Я его до этого избегал, поскольку ванильный движок тратил довольно много ресурсов на обработку компонента (цветовые коды, текст с переводом, форматирование), HollowEngine делает это в десятки раз быстрее.
⚙️ MSDF: Основной формат используемый в HollowEngine, основная его фишка заключается в том, что он не так сильно искажает строки при масштабировании (наверное замечали, что при маленьком шрифте текст становится почти не читаем), а кастомные
✨ TTF: Ранее для него банально не было парсера, который его переводит в MSDF, приходилось всё делать через специальную консольную утилиту, сейчас же достаточно просто добавить в ресурсы необходимый шрифт. Из минусов разве что то, что он использует библиотеку FreeType, которая появилась только на 1.21.1, если кому-то понадобится бекпортировать на 1.20.1, это станет ещё одной преградой 🙃
Дальше остаётся разве что всякие эффекты или анимации делать)
.ttf шрифты становятся слишком пикселезированными или размытыми. MSDF как раз и решает эту проблемаДальше остаётся разве что всякие эффекты или анимации делать)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥7❤3