TGViewer
Channel Public Channel
Phase Of Horizon | HollowEngine

Phase Of Horizon | HollowEngine

@hollowengine

Engine for development story-based maps & modpacks.

Support the project:
https://boosty.to/hollowhorizon/
Subscribers
383
Photos
158
Videos
98
Links
67

Showing posts older than #45 · Back to latest

Older Posts 16 shown
Post #44 285
Умное автодополнение сможет автоматически дополнить мой диплом? 🤔 | День 7

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

Кроме того, система переписана на корутины с использованием MutableSharedFlow для дебаунсинга (проверка ошибок и подсказки появляются через 300мс после прекращения печатания), так что больше никаких фризов 🛸
  • ❤ 9
Post #43 281
Я отрезал компилятор от мода и теперь он не жалуется, день 6 🧐
Система подсказок готова где-то на 65% и на удивление даже без всяких индексов с огромной базой данных со всеми классами, методами и переменными работает довольно шустро, если раньше он в среднем тратил 1-2 секунды (а на фордже мог и 8-10 секунд думать), то теперь даже пол секунды это уже редкий случай.

Осталось только отполировать фильтрацию, добавить определение типов и реализовать функционал самого дополнения кода, при выборе подсказки + автоматическое добавление импорта при поиске
  • ❤ 6
  • 👍 3
Post #41 316
Компилятор ругается на меня, день 5 😨
Ну что же, я полностью вынес компилятор в отдельный .jar файл. Теперь HollowEngine весит лишь 27мб, если кому-то интересно:
- Ассеты (8мб)
- шрифты: ~5мб, которые я потом оптимизирую;
- модели: ~1мб;
- текстуры: ~3мб, тоже вероятно сожму или почищу, ибо там много лишнего
- Библиотеки (18мб)
- Fabric API + ClassGraph: ~2.5мб
- Движок Kool: ~6мб
- Kotlin: ~8мб
- Сам движок: 8мб

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

Короче говоря осталось только добавить авто дополнение и парочку мелких правок под конкретные загрузчики модов и можно выпускать дроп!
  • ❤ 5
  • 🔥 2
  • ⚡ 1
  • 🫡 1
Post #39 337
  • ❤ 2
Post #38 1.03K
Ругаюсь на компилятор, день 4 😶‍🌫️
Проблема с разбором зависимостей полностью решена (ну или по крайней мере на отсутствующие классы я больше не натыкался).

Навайбкодил себе несколько тестов и вроде как никаких ошибок нет. Ну, вернее все ошибки которые тут есть, они и должны быть))

Сейчас последняя проблема в том, что компилятор падает уже в самой игре из-за того, что Minecraft и Компилятор Kotlin используют разные версии библиотеки FastUtil. И тут есть 2 варианта:
1) Переименовать все файлы этой библиотеки и места где она используется.
2) Вырезать компилятор из мода и предоставлять его отдельным файлом.

В целом по сложности задачи примерно одинаковые, так что я думаю выбрать второй вариант, чтобы поставлять компилятор отдельно от движка. К тому же это решит проблему с большим весом мода, сократив его где-то до 15-25 МБ. А сам компилятор можно будет докачать без перезапуска игры.

Но, скажем так, самое сложное теперь позади, к тому же я теперь понимаю как работает около 70% всего нового компилятора 🙃
  • ❤ 2
  • 🔥 2
  • ❤‍🔥 1
Post #37 997
Матерюсь на компилятор, день 3 🤬
Основная проблема оказалось в том, что для поиска классов я передал стандартный путь в Windows с символом \, а компилятор где-то внутри поменял его на /. По итогу спустя 4 часа дебаггинга оказалось, что он сравнивал свой вариант с старым моим и считал, что это совершенно разные не связанные библиотеки 🤙
К счастью это решило существенную часть ошибок, а сейчас судя по всему мне осталось разобраться, почему он не может декомпилировать стандартные Java классы, вроде String или Int 💀
  • ❤ 5
  • 🔥 2
  • 👍 1
  • 🤯 1
  • 😭 1
Post #36 979
Внимание, анекдот! Добавил я систему поиска ошибок в IDE...
...теперь не могу эти ошибки исправить 🤯

Да и вообще получается какой-то цирк, а не ситуация: Старое API компилятора уже давно помечено как устаревшее и без документации, а новое, как нестабильное (зато с документацией в которой написано, что она ещё в разработке)
Всё что я могу сказать на текущий момент - компилятор не может найти нужные библиотеки, но прикол в том, что куда эти библиотеки передавать никто не знает. Короче говоря буду пока дальше в этом копаться, может что-нибудь да получится 👀
  • ❤ 2
  • 😢 2
Post #35 1.12K
Помните вчера кто-то обещал дроп?)
Короче говоря он переносится на завтра 💀
(а если его не будет завтра, то завтра я вам скажу, почему он перенесён на следующий день 🫠 и так до тех пор, пока я его не выпущу. Если поста не будет, можете смело кидаться помидорами и пинговать меня, чтобы работал, а то ну чё это он 😐)

Если коротко, то проведя некоторые тесты я пришёл к выводу, что текущая IDE работает так себе, особенно на Forge. Так что я сегодня с нуля переписал всё на новую, более производительную систему анализа кода с компилятором K2.
В целом результаты думаю видно и по ролику, даже при 10-20 изменениях в секунду FPS остаётся в рамках разумного (а ведь это я ещё не добавил дебаунсинг и многопоточность)
Кроме того, новой системой в будущем можно будет вернуть возможность удалённого редактирования скриптов на сервере, в отличии от прошлой реализации.

Собственно говоря, пока тут осталось лишь вернуть систему подсказок и всё. После чего уже несколько правок по системе анимаций и можно тестить 🙃
  • 👍 4
  • ❤ 3
Post #34 1.01K
Так уж вышло, что я сегодня случайно вернул в HollowEngine скрытую систему нод и пофиксил некоторые проблемы в HollowCore на Linux/MAC для 1.19.2, так что почему бы за одно не пройтись по всем новостям за последнее время)

Certain Questing Additions
- Добавлены шейдерные фоны, как в видео
- Мод на CurseForge уже набрал 130к скачиваний 🎉

HollowEngine 2.0
Прежде всего я хочу поменять формат выпуска обновлений: я планирую несколько менее глобальных дропов с урезанным функционалом, чтобы уделить больше внимания проблемам и багам движка. И первый из них планируется уже завтра.
И до релиза я хочу сделать 3 таких дропа по 3 тематикам:
1) Упрощённая система анимаций (о которой я писал на Boosty)
2) Существенная доработка и оптимизация встроенного редактора скриптов
3) Скриптинг событий с ручным сохранением + корутины

Короче говоря, хочу вернуться к более частым обновлениям, но без всяких прорывных и сложных механик из-за которых движок постоянно нестабилен и работает буквально пару коммитов после публикации 🫠
  • 🍓 8
  • ❤‍🔥 4
  • 🔥 2
  • 🙏 2
Post #30 2.24K
Вышел новый мод от меня 🙃

Сслыки:
- CurseForge
- [Modrinth]: Ждём одобрения модерации
  • 👍 5
  • ❤ 4
  • ❤‍🔥 1
  • 🔥 1
  • 🏆 1
  • 👀 1
Post #29 881
Недавно ⁨DanBat сделал мини-игру "Тетрис" для движка Kool, тут я и подумал, а почему бы не попробовать скопировать её для демонстрации возможностей HollowEngine, получилось что-то такое :)
https://youtu.be/lInFMW-1eZE
  • 🍓 2
  • 👾 2
  • 🔥 1
Post #27 813
3 месяца... ПОЧТИ 3 МЕСЯЦА не было постов тут... Признавайтесь, кто уже забыл, кто я и почему Вы на меня подписаны?)

Пришло время рассказать что за это время я несделал и над чем я вообще работаю...
Прежде всего я сделал достаточно большой перерыв в разработке, чтобы обдумать, чего я вообще хочу от движка и как оно должно выглядеть. Прежде всего я слил HollowCore и HollowEngine в один мод, а также тяжёлый компилятор в ближайшем будущем будет устанавливаться отдельно от мода. Подробнее об этом я писал на моём Boosty (пост бесплатный).

А скриптинг в моде уходит от довольно разрозненных объектов вроде крафты, сюжет, события, модификации, диалоги, интерфейсы и др.
Вместо них теперь остаётся буквально парочка универсальных: Компоненты (например, .entity-component.kts) и События (например, .handler.kts). Компоненты позволяют хранить данные, а события их обрабатывать.

Компоненты можно крепить к большинству объектов игры: предметы, блоки, мобы, чанки, измерения и мир целиком.
Будет довольно много встроенных компонентов, которые будут реализовывать те или иные свойства. Например, если взять компоненты Кирка и Топор и нацепить на предмет, то он получить соответствующие свойства, а также автоматически создаст зависимые компоненты, например `Прочность`, т.е. предмет с этими компонентами сможет копать камень и рубить дерево. Ну и разумеется эти компоненты будут иметь настройки (скорость копания, радиус, уровень добычи и т.п.), а также появится новый инструмент для настройки этих компонентов через визуальный редактор.
Это лишь пример, того, как это можно применить и совмещать. Аналогично можно добавлять различную логику и тем же мобам и блокам.
Но что там по сюжету? - он тоже технически является компонентом. То есть с переходом на эту систему, сюжет можно привязывать к игрокам, самим нпс, даже к серверу целиком. Да, вместо того, чтобы адаптировать одну систему под несколько условий, я просто свалил всю ответственность на вас, которые будут писать эти скрипты :)

Вторая система - это события, по сути она представляет собой более удобную систему (Neo)Forge, но не зависимую от модлоадера:
@SubscribeEvent
fun RenderEntityEvent.Pre.`Срабатывает при отрисовке мобов`() {
// Получение компонента, либо завершение вызова при отрисовке сущности
val model = owner.getOrNull<ModelComponent>() ?: return
model.render(...) // Отрисовка через сам компонент
isCanceled = true // Отмена стандартной отрисовки сущности
}

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

А чтобы не настраивать так каждого моба/предмет/блок внутри игры появятся префабы, как и в большинстве нормальных игровых движков :D
Работать это будет просто - создаёте новый файл для сущности или другого объекта: /hollowengine/prefabs/entity/my_npc.prefab и настраиваете его компоненты в IDE мода, после чего при /reload движок сам добавит его, как нового моба, которого можно призвать через что-то вроде: /summon hollowengine:prefabs/my_npc.

Надеюсь вышло не слишком сложно и много, поскольку всё что я описал, это лишь порядка 15% от реальных объёмов работы, которая была проделана. А я тут старался особо сложные моменты обходить стороной... Но если кому-то интересно, то на Boosty, я расписывал более подробно эти темы, плюс там ещё есть пара моих мыслей про мой аналог FTB Quests на базе этих систем, который я точно скоро начну делать 🙃
Готовых инструментов по началу будет меньше, но функционала станет существенно больше. Думаю подобные системы сильно упростят разработку не только сюжета, но и разного контента для сборок, построек, карт и других интересных проектов.
P.S. Подходящих картинок или видео для поста не нашёл, но постараюсь в ближайшие дни пару демонстраций записать :)
  • 🔥 10
  • ❤ 1
  • ✍ 1
  • 💯 1
Post #26 1.04K
Работаю над улучшением встроенного редактора.
- Добавил поиск классов по всему модулю (классы игры, библиотек и всех модов), а также их индексацию как в большинстве IDE, угадайте сколько она будет длиться на сборке с 200+ модами 🙃 + автоматическое добавление импорта в начало файла
- Работаю над автоматическими отступами при переходе на новую строку, как видите не без багов))
- При выборе метода с лямбдой в конце среда сама добавляет нужные скобки в конце и перемещает курсор

Вообще есть ещё куда стремиться в плане оптимизации, например в идеале вообще бы отказаться от парсинга файла при каждом изменении и редактировать напрямую AST файла, да и давно пора перейти на анализатор K2, вместо текущего, но для этого нужно существенно переписывать весь редактор кода, так что оставлю это когда-нибудь после релиза)

#repost
  • 🍓 6
  • ❤ 1
Post #25 794
Дорабатываю тут диалоговое окно 🤔
Предполагается что в левой части можно будет также указывать разные иконки или условия для выбора (При наличии репутации / предмета / характеристики, по времени и т.п.)
  • 🍓 4
  • ❤ 1
  • 🔥 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →