Phase Of Horizon | HollowEngine
383 subscribers
158 photos
98 videos
12 files
67 links
Engine for development story-based maps & modpacks.

Support the project:
https://boosty.to/hollowhorizon/
Download Telegram
Я отрезал компилятор от мода и теперь он не жалуется, день 6 🧐
Система подсказок готова где-то на 65% и на удивление даже без всяких индексов с огромной базой данных со всеми классами, методами и переменными работает довольно шустро, если раньше он в среднем тратил 1-2 секунды (а на фордже мог и 8-10 секунд думать), то теперь даже пол секунды это уже редкий случай.

Осталось только отполировать фильтрацию, добавить определение типов и реализовать функционал самого дополнения кода, при выборе подсказки + автоматическое добавление импорта при поиске
❤6👍3
Media is too big
VIEW IN TELEGRAM
Умное автодополнение сможет автоматически дополнить мой диплом? 🤔 | День 7

Прошла уже неделя с обещания "выпустить дроп завтра" и за сегодня я уже практически полностью доделал систему автодополнения, которая:
1) Может подсказать варианты импортов, как внутри import ..., так и в самом коде. Среди них как пакеты и классы, так и функции и поля верхнего уровня
2) Создаёт подсказки к объектам из Java и Kotlin
3) Создаёт подсказки для ключевых слов (var, val, class, object, и т.п.)
4) Знает типы this выражений
5) Создаёт подсказки по получению любых объектов и автоматически добавляет импорты. Пока только для Kotlin, для Java там транзитивный ад, нужно чуть ли не всю Intellij IDEA подключить. На скорую руку я тут могу только реализовать тоже самое, но без кэширования, а это замедлит систему подсказок раза в 4

Кроме того, система переписана на корутины с использованием MutableSharedFlow для дебаунсинга (проверка ошибок и подсказки появляются через 300мс после прекращения печатания), так что больше никаких фризов 🛸
❤9
Компилирую компилятор 🥸 | День 8

Ну что, скрипты успешно компилируются и запускаются, так что я думаю это прогресс! Кроме того я немного переписал дизайн редактора и добавил подсказки внутри кода.
Но пока что всё же в открытый доступ выкладывать рановато, поскольку нужно доделать несколько косяков:
1) Обфускация кода Minecraft (на текущий момент новый компилятор с ней не совместим), но в целом это делается быстро.
2) Поправить небольшие косяки с панелью подсказок, поскольку она плохо адаптируется под размеры окна

Так что в связи с этим внеплановый опрос насчёт скриптинга самих нпс на Boosty, поскольку тут ограничение по количеству символов)
https://boosty.to/hollowhorizon/posts/e45f539a-e508-457c-9459-c47bcba336ac
(пост бесплатный, как и голосование, но пожелания платных спонсоров имеют больший приоритет)
❤5🔥2
Весь прогресс съела учёба 🫩 | День 9

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

Также в связи с тем, что появилось много дел по учёбе, я думаю немного отодвинуть дроп связанный с системой анимаций на выходные, но завтра приблизительно в 18:00 будет дроп с базовым редактором без контекстных скриптов (вроде того, что в ролике из прошлого поста) для того, чтобы Вы могли сами оценить новый редактор в целом и собрать полный набор его косяков 🙃

В остальном, посты продолжат выходить каждый день, пока я не выложу все 3 дропа, а уже после этого, я, пожалуй, возьму небольшой перерыв 🫠
👍5🔥1
Первый дроп 🌠 | День 10

Я немного опоздал со вчерашними сроками, но там появились непредвиденные сложности со старыми миксинами, которые теперь не применяются на новый компилятор))

Но в целом компилятор и IDE теперь работают 👀
Хоть и есть пока небольшие косяки в редакторе, но в целом уже хотя бы что-то

Установка:
1) Добавить HollowEngine в папку с модами;
2) Положить файл HollowEngineCompiler.jar в папку hollowengine.

Примечания:
1) Скрипты пока можно запускать только внутри мира
2) Текущий скрипт буквально не имеет никаких встроенных методов, переменных, нпс, и т.п. Это пустышка просто чтобы поиграться с редактором! Но вы можете получить экземпляр сервера импортировав currentServer.
3) println пока нормально не захватывается, но Вы можете использовать logI, logW и logE для разного вида логгирования.
4) Пока я не добавил систему кэширования игра будет загружаться существенно дольше, это нормально.

P.S. На Fabric пока не проверял, но на Forge всё работает куда быстрее чем раньше 🔥
🤩5👍2❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Новое обновление движка Kool, Cool или Not Cool? 😎 | День 11

Сегодня я обновил движок интерфейсов (и не только) до новой версии. Что в нём нового?
1) Асинхронный рендеринг: пока идёт передача данных на GPU и непосредственно отрисовка, одновременно с этим уже может готовиться следующий кадр не простаивая ресурсы впустую🔥
(Это касается только интерфейсов движка, в последствии этот движок также будет использоваться для партиклов, физики и ещё нескольких фич)
2) Новые инструменты для анимаций в интерфейсов вдохновлённые JetPack Compose, от DanBat'а:
// Вы создаёте переменную
var isHovered by remember(false)
// Указываете цвет в зависимости от состояния
val color = Color(
if (isHovered) "ffb703ff"
else "219ebcff"
)
// И оно автоматически вычисляет промежуточный цвет на основе указанной задержки и сглаживания
val animColor by animateColorAsState(color, tween(0.2f))

// Присваиваем цвет виджету
modifier.backgroundColor(animColor)

3) Встроенная поддержка .ttf шрифтов
4) Исправления многих багов и вылетов
👍3❤1🔥1🤡1
This media is not supported in your browser
VIEW IN TELEGRAM
Продолжаю обновлять Kool и исправлять баги 🐞 | День 12

На текущий момент вроде как весь функционал перенесён на новую версию движка, за исключением .ttf шрифтов (вместо них, как и раньше MSDF-шрифты), проблема тут в том, что сам Minecraft использует старую версию LWJGL 3.3.1, когда уже активно применяется 3.3.6, из-за чего некоторые её фичи не доступны. Ради этого обновляться на 1.21.10 я не хочу)))
Скорее всего в будущем бекпортирую эту фичу, но пока она не в приоритете.
Тем временем, DanBat недавно закончил полный список интерполяций/сглаживаний с предпросмотром, чему также в ближайшем будущем найдётся применение (анимации в UI, работа с камерой, анимации нпс и другие моменты).
Ну а я пока что перенёс всю логику анимаций на новую систему и поправил небольшие косяки с ней.

К тому же рабочая неделя подходит к концу, так что на выходных уже смогу сосредоточиться на системе анимаций и событий, так что в лучшем случае в понедельник уже буду обновлять под них документацию 🤔
🤨5⚡3
This media is not supported in your browser
VIEW IN TELEGRAM
Первые наработки системы анимаций ⚡️| День 13

Я в целом определился со структурой системы анимаций и клиент-серверным взаимодействием. Сейчас работаю над внутренней реализацией без общего API, которая уже умеет:
1) Воспроизводить анимации во всех режимах и автоматически рассчитывать переходы между анимациями
2) Настраивать отображение определённых костей
3) Прикреплять к костям разные объекты, вроде предметов или брони (в будущем и партиклы)
4) Рассчитывать процедурные анимации (поворот головы или зрачков)
5) Добавление под-моделей на основную модель + настройка всех вышеперечисленных функций для неё

Пока что не могу гарантировать, что успею всё это за выходные, но буду держать в курсе. Основная проблема сейчас это синхронизация данных, поскольку сейчас готова лишь клиентская часть, а я хочу, чтобы всё это можно было менять и со стороны сервера (кроме процедурных анимаций, они и должны вычисляться на клиенте). И нужно написать довольно сложную систему, чтобы передавать как можно меньше данных через сеть 🥲
🔥7❤1
Дорабатываю компоненты для сущностей 📦 | День 14

Те кто давно следит за развитием движка уже давно знают, что он перешёл с Forge Capability / Fabric Cardinal Components на мою собственную универсальную систему компонентов. Собственно, начав переносить функционал системы анимаций на эти самые компоненты, я понял, что их нужно доработать, чтобы Вам было проще с ними работать:
1) Обновил некоторую часть API по взаимодействию между компонентами, теперь owner компонента доступен всегда, а не только при прикреплении компонента.
2) Добавил возможность обрабатывать события внутри компонентов (они срабатывают только если сам компонент добавлен и активен)
3) Добавил хотсвап скриптовых компонентов (т.е. при изменении компонента он обновится сразу у всех сущностей без необходимости перезахода в мир или убийства нпс)

Вполне вероятно сегодня ещё более подробно распишу, как с подобной системой работать, но уже на Boosty, а тут у меня символы заканчиваются 🙃
Ну а на этом у меня пока всё 🫡
🔥9❤1
Двести тысяч компонентов готовы и ещё миллион на подходе 📦📦📦 | День 15

Сегодня я потратил очередные 5 часов, чтобы наладить синхронизацию компонентов, чтобы обработать все случаи их создания и удаления на клиенте и сервере и... Оно теперь работает как надо 👀
Система анимаций ещё дорабатывается, но базовый компонент с моделькой нпс уже готов, так что выпускаю промежуточный дроп с небольшим примером, буду рад, если Вы протестируете его работу на Forge/Fabric или может даже добавите чего-нибудь от себя. Это поможет быстрее прийти к релизу и исправить все ошибки!

Инструкция:
1) Установите моды (HollowEngineCompiler.jar в папку hollowengine, сам мод в папку mods, дополнительно ничего устанавливать не надо)
2) Удалите папки hollowcore и hollowengine/.cache если они есть
3) Закиньте шаблон скрипта в hollowengine/scripts
4) Если вы уже зашли в мир, то пропишите команду /reload, чтобы перезагрузить компонент
5) Добавьте компонент на любую сущность командой /hollowengine component

P.S. Жду в комментариях объяснение от нейронки, что делает код из скрипта 😃
P.P.S. Косяк с дублированием сообщений в видео исправлен в скрипте, кто первый угадает в чём дело, того могу добавить в следующем ролике про движок на YouTube, как нпс 👀

Ну и напоследок, напоминаю о моём Boosty о том, что скоро я займусь самими событиями для ваших историй и если вы ещё не голосовали за то, как оно будет работать, то сейчас последний шанс ⏰
❤1
Результаты внепланового опроса 🗓 | День 16

Ну что же, у нас 2 претендента, состояния и блоки кода. Какой из них я выберу? Вероятно - оба?
Подробнее расписал свои мысли здесь

Интересно узнать Ваше мнение по этому поводу под этим постом. Стоит этот крюк в разработке затрачиваемых усилий, или стоит и дальше идти в сторону скриптинга состояний?
👍2
Media is too big
VIEW IN TELEGRAM
Система блоков кода уже почти готова 😶 | День 17

Прежде всего напомню, что скриптинг не отменяется, просто пока жду выхода Kotlin 2.3.0 в релиз. Ну а пока я с нуля запилил UI для системы блоков кода, что из этого вышло вы можете увидеть в ролике.
К слову пока это всё кодил, пришёл к выводу, что многие вещи теперь делаются гораздо проще:
- Приостановки скрипта: Каждый блок легко приостановить или сохранить.
- Добавление переменных и функций: В целом можно автоматизировать аннотациями в коде.
- Контекст из игры: В UI легко получить данные обо всех текстурах, моделях, звуках и других ассетах, что позволит ещё до запуска их проверить.
- Баги и отладка: Можно даже визуально отобразить на каком блоке сейчас находится выполнение.

p.s. это пока лишь набросок интерфейса, который ещё будет дорабатываться, да и пока это мой первый опыт в создании перетаскиваемых UI в Kool 🙃

Короче говоря, ждём обновление 👍
❤5🔥1🤝1