Engine for development story-based maps & modpacks.
Support the project:
https://boosty.to/hollowhorizon/
Post #260
562
🫣
- ❤ 7
- 🔥 2
- 🐳 2
- 👍 1
PH @hollowengine
Showing posts older than #261 · Back to latest

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)'\'..ui и .hss файлах соответственно.✔️ Гибкая настройка всех элементов: размеры, цвета, форма, фильтры, вроде чёрно-белого или размытия, отступы и многое другое.
✔️ Удобная система анимаций: можно настроить переключение многих параметров при наведении курсора, кликах и других событиях.
✔️ Вращение и перспектива: компоненты можно наклонять по 3 осям, при этом нажатия тоже будут обрабатываться в 3D-пространстве
✔️ Классический xml+css подход с возможностью расширения: удобная настройка и стилизация компонентов. Не нужно отдельно настраивать стиль каждой кнопки, достаточно выдать ей тег (хотя если очень хочется, можно и каждую настроить 😂)
✔️ Полная интеграция с Minecraft: предметы, блоки, сущности - всё можно рендерить в гуишке.
🚫 Пока ещё нет динамического добавления новых элеметов, условно из тех же скриптов в духе того же React.
🚫 Пока ещё нет интеграции со скриптами и в целом открыть гуишку кроме как через предпросмотр нельзя.

@urliveyn - сам сайт, документация;
@axelswamp - макет и дизайн;
@algorithmlx_today - деплой и домен.
.md файле на пару тысяч строк)✔️ Полностью переделана внутренняя система событий, теперь она практически никак не влияет на производительность в сравнении с прошлой.
✔️ В скриптинг добавлены 2 новых оператора: async и race. Первый запускает задачу отдельно от основной ветке, не ожидая, пока выполнятся функции внутри неё (удобно для работы с несколькими нпс или параллельными диалогами и действиями), а второй позволяет определить, какая из нескольких задач выполнилась первой (удобно для таймаутов или сложных условий)
✔️ Добавлена базовая поддержка IDE: подсветка синтаксиса и подсказки ко всем доступным функциям и переменным.
✔️ Добавлено множество новых функций: привязка предметов к модели, замена скинов игрока и материалов нпс, работа с мирами (время, погода, взаимодействия с блоками), рейкастинг и многое другое
✔️ Создана документация для движка

✔️ Создание, настройка и удаление НИПов.
✔️ Анимации нипов по триггеру или постоянные с условиями переходов.
✔️ Воспроизведение аудио, запуск катсцен, изменение смещения, поворотов и масштаба для нпс.
✔️ Триггеры по времени, взаимодействию, зонам / радиусу, клавишам и кликам.
✔️ Получение всяких параметров и атрибутов для сущностей.
✔️ Импорты скриптов внутри других скриптов.
✔️ Практически полная библиотека Kotlin StdLib в Katari (Collections, Ranges, Random, лямбды и другие удобные модули)
✔️ Продвинутый редактор пролётов камеры с возможностью детально настраивать каждый кадр.
Ну и по мелочи, удобные инструменты для добавления новых функций, переменных и классов в скриптовой движок из Kotlin в Katari.
✔️ Доведён до ума порт на NeoForge, теперь мод там стабильно запускается и весь функционал присутствует (Включая правки в Iris+Sodium)
✔️ Внедрён скриптовой движок Katari, о котором я писал ранее и показывал пару небольших примеров.
✔️ Добавлена поддержка объёмного тумана и Flare (свечения, если смотреть на источник света)
✔️ Удалён Geary ECS, движок теперь работает на своей кастомной системе компонентов. Основная причина - не релевантность в рамках JVM, плюс низкая производительность в рамках игры. Geary предназначен скорее для симуляций десятков тысяч однотипных сущностей, а тут они скорее все разные, да и сам движок игры больше 300 сущностей уже не выдерживает.
✔️ Доработана система анимаций - теперь можно создавать несколько управляемых контроллеров с независимыми переходами, запускать и отключать обычные анимации, динамически менять их скорость и даже добавлять небольшие скрипты с процедурными вычислениями.

Я долго сидел на Stonecutter (система сборки модов) в надежде, что это упростит мне разработку мультиверсионных модов и планировал после стабильных версий добавить дополнительную ветку для 1.21.1, но в этом и проблема, сам Stonecutter существенно тормозит компиляцию и сборку проектов. У меня есть 4 основных подпроекта для работы движка и для каждого из них ещё подпроекты под версии игры, для которых, в свою очередь ещё и подпроекты Forge/Fabric. Сейчас я вернулся на чистый Architectury и время компиляции уменьшилось с 2-3 минут до 15 секунд, да и сама IDE стала подхватывать контекст проекта куда быстрее и мне не нужно каждые пару часов сбрасывать индексы и ждать, пока IDEA их починит. На первый взгляд было бы разумнее сначала доделать 1.20.1, а потом уже переходить на 1.21.1, чтобы для тех, кто ещё там работает был бы хоть какой-то рабочий билд, но увы, в тех условиях продолжать дальше допиливать движок почти нереально, а тратить потом ещё 1-2 недели на ручной порт я не хочу, так что думаю 1.21.1 сейчас наиболее актуальный вариант, да и в случае чего с неё будет проще портировать мод на 26.2+, если большинство модов начнут переносить туда.
Теперь по поводу блоков кода, пока я хочу перенаправить основные силы на новую систему скриптинга, а после него посмотреть на подход к блокам кода со стороны. Есть у меня мысль, как их совместить и не делать 2 разные системы с разной документацией)
➕ Источники света теперь потребляют на ~20% меньше производительности
➕ Я уже целиком перенёс движок на Fabric 1.21.1 (для NeoForge там ещё нужно пара небольших правок, но они будут готовы уже завтра)
➕ Скриптинг теперь будет на моём языке Katari, который основан на Kotlite (упрощённый Kotlin). Суть в том, что вместо компиляции теперь используется кастомный сериализуемый интерпретатор с приостанавливаемыми функциями. Это нужно, чтобы сделать более простой и удобный синтаксис, вместо того, чтобы городить стейтмашины, корутины, плагины для компилятора, неудобный DSL и т.п. теперь просто большая часть языка и стандартной библиотеки ограничена, но в замен весь его функционал стал стабильнее, плюс это позволяет мне добавлять новые операторы, которых нет в оригинальном языке. Подробнее можете почитать тут, по сути это мой аналог нарративным языкам, вроде Ink или Yarn Spinner, которые используются во всяких Unity / Godot, но с более гибким функционалом.
Кроме того, новый скриптовой движок весит всего 2МБ, вместо 80МБ в случае оригинального компилятора. Возиться с аддонами тоже теперь нет необходимости.

EntityAnchor и WorldAnchor, первый привязывает объект к ванильной сущности, а второй к мировым координатам. А для смещения используется компонент Transform. Он меняет объект относительно "якоря", т.е. относительно сущности, либо мира. Это позволяет настраивать перемещение, размеры, повороты.