Обновления редактора кода 🏎 | День 85
Несмотря на то, что редактор кода откладывается до 2.1, решил всё же немного обновить его под новый дизайн. А всё, потому что в редакторе анимаций также будут использоваться скрипты, разве что за одним исключениям - условия перехода будут описываться одной строчкой. Так что пока что провёл некоторый рефакторинг в основной системе.
Несмотря на то, что редактор кода откладывается до 2.1, решил всё же немного обновить его под новый дизайн. А всё, потому что в редакторе анимаций также будут использоваться скрипты, разве что за одним исключениям - условия перехода будут описываться одной строчкой. Так что пока что провёл некоторый рефакторинг в основной системе.
❤6🔥1
Продолжаю дополнять редактор кода 💫 | День 86
Решил всё же взяться за тот страшный класс на 1700 строк кода, в котором намешано всё: интерфейс редактора кода, обработка вводимого текста, попап с подсказками, подсветка кода и ошибок в нём, все хоткеи, автодополнения скобок и отступов. Короче говоря если и дальше плодить техдолг добавляя туда новые фичи вроде: однострочного ввода, переноса строк, read-only режима, то скоро в этом уже никто не сможет разобраться 💀
Так что в связи с этим готовлю мощную штуку, чтобы в будущем легко было добавлять поддержку новых языков (как минимум в будущем могут понадобиться json, toml, markdown, mcfunction), а также кучу разных параметров, поскольку для того же редактора анимаций прописывать условия для анимаций без скриптинга выйдет слишком неудобно 🥲
Вот пока небольшой обзор того, как оно теперь выглядит, раньше все эти настройки и команды были захардкодены:
Решил всё же взяться за тот страшный класс на 1700 строк кода, в котором намешано всё: интерфейс редактора кода, обработка вводимого текста, попап с подсказками, подсветка кода и ошибок в нём, все хоткеи, автодополнения скобок и отступов. Короче говоря если и дальше плодить техдолг добавляя туда новые фичи вроде: однострочного ввода, переноса строк, read-only режима, то скоро в этом уже никто не сможет разобраться 💀
Так что в связи с этим готовлю мощную штуку, чтобы в будущем легко было добавлять поддержку новых языков (как минимум в будущем могут понадобиться json, toml, markdown, mcfunction), а также кучу разных параметров, поскольку для того же редактора анимаций прописывать условия для анимаций без скриптинга выйдет слишком неудобно 🥲
Вот пока небольшой обзор того, как оно теперь выглядит, раньше все эти настройки и команды были захардкодены:
🔥2❤1
Что такое Грабля и почему все её боятся? 🔱 | День 87
Сегодня опять обзорный пост, пока я вожусь с рефакторингом)
Поговорить я бы хотел насчёт Gradle, инструмента для компиляции и сборки
Ну, а если серьёзно, то за простой сборкой проекта кроется ещё тонна разных интересных задач, в рамках создания модов, самое простое, что можно вспомнить - это декомпиляция и деобфускация Minecraft для разработки, а также реобфускация вашего кода после компиляции (чтобы он работал с обфусцированным Minecraft). Также с его помощью, можно обрабатывать файлы в вашем проекте, например, часто в
В HollowEngine я использую несколько кастомных скриптов для Gradle с достаточно уникальным функционалом, который я пока не видел в других модах, так что хочу поделиться)
- Автоматическая генерация
- Автоматическая генерация констант для всех ресурсов. Однажды я просто з**бался писать очередной раз
Идея получилась очень удобная и имеет куда больше возможностей, о которых я раньше не задумывался - теперь я сразу вижу, какие ассеты в моде не используются. А если я удалю ассет, который уже используется в движке - мод просто не скомпилируется. В особенности это важно, когда допустил опечатку в названии текстуры, потом её переименовал, но заменил не все места, где она использовалась.
- Ну и последняя фича, которую я ввёл буквально на днях, это аналогичный генератор для ключей перевода. По сути логика та же, что и писал выше, но его пока "не обкатал" 🙃
Но думаю аналогично, куда проще будет отслеживать мёртвые ключи, которые когда-то были в моде, а потом были из него удалены)
И благодаря Gradle это всё работает перед компиляцией, тем самым само обновляется при добавлении новых ресурсов и перекомпиляции проекта 🤔
Сегодня опять обзорный пост, пока я вожусь с рефакторингом)
Поговорить я бы хотел насчёт Gradle, инструмента для компиляции и сборки
.jar файлов. Если вы делаете моды или хотя бы смотрели исходники других проектов, то часто могли заметить там файлик вроде build.gradle или build.gradle.kts, это - скрипт сборки, который собирает файлы зависимостей и проекта(ов) в один архив .jar. И по сути это всё, конец, всем спасибо за внимание, пока!Ну, а если серьёзно, то за простой сборкой проекта кроется ещё тонна разных интересных задач, в рамках создания модов, самое простое, что можно вспомнить - это декомпиляция и деобфускация Minecraft для разработки, а также реобфускация вашего кода после компиляции (чтобы он работал с обфусцированным Minecraft). Также с его помощью, можно обрабатывать файлы в вашем проекте, например, часто в
mods.toml, название мода напрямую берётся из конфига, а не прописывается вручную (особенно в мультиплатформенных модах).В HollowEngine я использую несколько кастомных скриптов для Gradle с достаточно уникальным функционалом, который я пока не видел в других модах, так что хочу поделиться)
- Автоматическая генерация
mods.toml / neoforge.mods.toml / fabric.mod.json - Заполнять эти шаблоны под каждую версию и загрузчик было бы довольно неудобно, поэтому я создал скрипт, который автоматически создаёт эти файлы на основе параметров проекта!- Автоматическая генерация констант для всех ресурсов. Однажды я просто з**бался писать очередной раз
hollowengine:textures/gui/icons/[texture].png, и тогда я подумал, почему бы мне не генерировать класс со всеми такими ресурсами, тогда IDE всегда сможет мне подсказать все файлы в нужной папке. Идея получилась очень удобная и имеет куда больше возможностей, о которых я раньше не задумывался - теперь я сразу вижу, какие ассеты в моде не используются. А если я удалю ассет, который уже используется в движке - мод просто не скомпилируется. В особенности это важно, когда допустил опечатку в названии текстуры, потом её переименовал, но заменил не все места, где она использовалась.
- Ну и последняя фича, которую я ввёл буквально на днях, это аналогичный генератор для ключей перевода. По сути логика та же, что и писал выше, но его пока "не обкатал" 🙃
Но думаю аналогично, куда проще будет отслеживать мёртвые ключи, которые когда-то были в моде, а потом были из него удалены)
И благодаря Gradle это всё работает перед компиляцией, тем самым само обновляется при добавлении новых ресурсов и перекомпиляции проекта 🤔
🤯4
Сгенерированные классы для ассетов и ключей перевода выглядят примерно так. Раньше мне приходилось хардкодить это всё вручную 🫠
Кстати говоря, идея для подобной системы была позаимствована из Android, где кодогенерация ссылок на ассеты - обычное дело.
Кстати говоря, идея для подобной системы была позаимствована из Android, где кодогенерация ссылок на ассеты - обычное дело.
❤3🔥1👀1
Всё ещё работаю над обновлением редактора кода 😵💫 | День 88
В целом, уже вырисовывается что-то более-менее рабочее, пока что работаю над бесшовным обновлением подсветки в фоновом режиме, чтобы это дело стабильно работало для любых текстовых файлов. Ну и парочка новых фишек:
- Кейбинд
- Кейбинд
- Сохранение после 0.5с бездействия
В общем, рефакторинг уже практически закончен, остались только небольшие правки
В целом, уже вырисовывается что-то более-менее рабочее, пока что работаю над бесшовным обновлением подсветки в фоновом режиме, чтобы это дело стабильно работало для любых текстовых файлов. Ну и парочка новых фишек:
- Кейбинд
ctrl + '/': Быстро закомментировать или раскомментировать строку- Кейбинд
ctrl + 'd': Дублировать выделенный текст- Сохранение после 0.5с бездействия
В общем, рефакторинг уже практически закончен, остались только небольшие правки
❤5
Поддержка
Немного поработал сегодня над системой моделей, обновил поддержку форматов
Первый часто используется в игровых движках, а также для него существует довольно обширная библиотека с готовыми анимациями на Mixamo.com, так что в будущем может быть даже сделаю адаптер, чтобы импортировать готовые анимации в ваши модели, необходимо будет только ключевые кости настроить
Второй это практически родной формат BlockBench'а, который поддерживает Molang-выражения в отличии от gltf
Пока что система ещё дорабатывается, по крайней мере необходимо добавить оптимальную перезагрузку моделей, поскольку она тут немного сложнее, но думаю мы уже вышли за рамки 90% модов по функционалу 🙃
fbx 🛻 | День 89Немного поработал сегодня над системой моделей, обновил поддержку форматов
.fbx и .geo.json.Первый часто используется в игровых движках, а также для него существует довольно обширная библиотека с готовыми анимациями на Mixamo.com, так что в будущем может быть даже сделаю адаптер, чтобы импортировать готовые анимации в ваши модели, необходимо будет только ключевые кости настроить
Второй это практически родной формат BlockBench'а, который поддерживает Molang-выражения в отличии от gltf
Пока что система ещё дорабатывается, по крайней мере необходимо добавить оптимальную перезагрузку моделей, поскольку она тут немного сложнее, но думаю мы уже вышли за рамки 90% модов по функционалу 🙃
🔥1
Media is too big
VIEW IN TELEGRAM
Улучшенный редактор кода 🫨 | День 90
Существенно переписал тот старый редактор, чтобы проще его было вписать в контроллер анимаций и добавлять новый функционал, получилось пока нечто подобное. Весь анализ файлов проходит в отдельном потоке через корутины, что делает его довольно быстрым и без каких либо пролагов.
Также, рефакторинг позволил добавить поддержку новых форматов, вроде
Осталось разве что по мелочи доработать каретку, поправить само-открывающиеся подсказки при пустой строке ну и другие мелочи
В общем, с редактором практически закончено, вероятно успею его доделать даже сегодня 🙃
Существенно переписал тот старый редактор, чтобы проще его было вписать в контроллер анимаций и добавлять новый функционал, получилось пока нечто подобное. Весь анализ файлов проходит в отдельном потоке через корутины, что делает его довольно быстрым и без каких либо пролагов.
Также, рефакторинг позволил добавить поддержку новых форматов, вроде
json, как видите ни единого фриза в файле на 7000+ строк 🤯Осталось разве что по мелочи доработать каретку, поправить само-открывающиеся подсказки при пустой строке ну и другие мелочи
В общем, с редактором практически закончено, вероятно успею его доделать даже сегодня 🙃
❤5
This media is not supported in your browser
VIEW IN TELEGRAM
Редактор картинок 👨🏻🎨 | День 91
Всё ещё занят рефакторингом, но также добавил недавно ещё одну штуку - редактор картинок. Пока что это лишь набросок и над дизайном ещё не работал, но функционал уже вполне рабочий 👀
Ну а тем временем у меня уже развилась проф. деформация - временами уже захожу в ванилу и думаю "Блин, куда пропала шестерёнка, я хотел файлы игры посмотреть" 🙃
Всё ещё занят рефакторингом, но также добавил недавно ещё одну штуку - редактор картинок. Пока что это лишь набросок и над дизайном ещё не работал, но функционал уже вполне рабочий 👀
Ну а тем временем у меня уже развилась проф. деформация - временами уже захожу в ванилу и думаю "Блин, куда пропала шестерёнка, я хотел файлы игры посмотреть" 🙃
❤8
Возвращаюсь к редактору анимаций 🏃🏻 | День 92
Немного доработал прошлый дизайн и внедрил систему подсветки и автодополнения для однострочных выражений. Со вторым ещё есть над чем поработать, попап пока открывается, как ему взбредёт в голову 🥲
В остальном, ещё остаётся сборка этого контроллера в класс и его компиляция с этими выражениями. Но если говорить в целом, это предпоследняя фича до релиза (а последняя это документация)
Так что мы уже у финишной черты, готовьте свои последние:
Немного доработал прошлый дизайн и внедрил систему подсветки и автодополнения для однострочных выражений. Со вторым ещё есть над чем поработать, попап пока открывается, как ему взбредёт в голову 🥲
В остальном, ещё остаётся сборка этого контроллера в класс и его компиляция с этими выражениями. Но если говорить в целом, это предпоследняя фича до релиза (а последняя это документация)
Так что мы уже у финишной черты, готовьте свои последние:
"Жду релиза HollowEngine день ∫(lim[x→∞] (Σ(n! / e^iπ) + √-1)) dx"❤🔥4🤯3❤1
Конфигурация редактора 🏓 | День 93
Сегодня ещё немного поработал над редактором, добавил для него конфиг, выглядит он примерно так (хотя как будто тут половина и не нужна 🫠):
С другой стороны в будущем ведь появится тот же фолдинг кода и всякие пользовательские подсказки/паттерны, так что думаю ещё пригодится. Ну и да, я решил постепенно переносить свою систему с
Над горячими клавишами пока ещё думаю, мне кажется будет слишком громоздко их все пихать в ванильный раздел управления, а в конфиге их редактировать неудобно из-за всяких модификаторов вроде
Пока ещё дорабатываю компилятор для контроллера анимаций, вероятно он тоже всё же на первое дело будет в виде скрипта, поскольку реализовывать полноценный компилятор довольно долго
Сегодня ещё немного поработал над редактором, добавил для него конфиг, выглядит он примерно так (хотя как будто тут половина и не нужна 🫠):
showLineNumbers: true
showBackground: true
showVerticalScrollbar: true
showHorizontalScrollbar: true
showSelectionAndCaret: true
singleLine: false
enableKeyMap: true
enableAutoBrackets: true
fontSize: 16.0
font: 'hollowengine:monocraft'
indentSize: 4
С другой стороны в будущем ведь появится тот же фолдинг кода и всякие пользовательские подсказки/паттерны, так что думаю ещё пригодится. Ну и да, я решил постепенно переносить свою систему с
toml на yaml, поскольку второй, как по мне более читаемый для больших файлов и списков 🤔Над горячими клавишами пока ещё думаю, мне кажется будет слишком громоздко их все пихать в ванильный раздел управления, а в конфиге их редактировать неудобно из-за всяких модификаторов вроде
ctrl, shift и т.п. Так что думаю лучше будет для них отдельный редактор сделать? Да и в целом, пожалуй было бы не плохо сделать редактор конфигов в моде, можно было бы вообще не париться и все их через редактор делать, но тогда на сервере подобные штуки редактировать будет не удобно 🙃Пока ещё дорабатываю компилятор для контроллера анимаций, вероятно он тоже всё же на первое дело будет в виде скрипта, поскольку реализовывать полноценный компилятор довольно долго
❤5👍1
Генерация скрипта для контроллера анимаций 🐸 | День 94
Пока не стал делать сложную логику, да и от умных полей с подсветкой синтаксиса и ошибок временно отказался, чтобы не тянуть со всем этим и дальше. Переписал старый контроллер анимаций с Molang на Kotlin и подтянул для него кодогенератор из графа с настройками. Пока при сохранении контроллера он также сохраняет и файл в виде кода по соседству, думаю пока что это оптимальный вариант, к тому же всегда можно будет часть логики поправить или дополнить в коде, на первое время этого с головой хватит 🤔
Ну а дальше, я уже займусь подключением этих скриптов к нпс и всякими небольшими правками для нового билда 🫣
Пока не стал делать сложную логику, да и от умных полей с подсветкой синтаксиса и ошибок временно отказался, чтобы не тянуть со всем этим и дальше. Переписал старый контроллер анимаций с Molang на Kotlin и подтянул для него кодогенератор из графа с настройками. Пока при сохранении контроллера он также сохраняет и файл в виде кода по соседству, думаю пока что это оптимальный вариант, к тому же всегда можно будет часть логики поправить или дополнить в коде, на первое время этого с головой хватит 🤔
Ну а дальше, я уже займусь подключением этих скриптов к нпс и всякими небольшими правками для нового билда 🫣
👍4🥰1
Media is too big
VIEW IN TELEGRAM
Сырой релиз 🫠 | День 95
Ну что, с необходимыми фичами уже всё, я добавил всё что хотел, так что концептуально движок уже дошёл до того самого релиза 🤯
Так что в ближайшие часы я скомпилирую движок под Java 17 (ибо пока он использует зависимости с 21) и выложу в сообществе, сразу говорю, что проблем ещё довольно много, так что будем постепенно их исправлять, но в любом случае, хотя бы запустить и потыкать интерфейс - уже может помочь выявить некоторые проблемы, в особенности касаемо адаптивного интерфейса под разные мониторы 🙃
Ну что, с необходимыми фичами уже всё, я добавил всё что хотел, так что концептуально движок уже дошёл до того самого релиза 🤯
Так что в ближайшие часы я скомпилирую движок под Java 17 (ибо пока он использует зависимости с 21) и выложу в сообществе, сразу говорю, что проблем ещё довольно много, так что будем постепенно их исправлять, но в любом случае, хотя бы запустить и потыкать интерфейс - уже может помочь выявить некоторые проблемы, в особенности касаемо адаптивного интерфейса под разные мониторы 🙃
🔥7❤4
Время фиксить баги 🪡 | День 96
Ну что же, сегодня утром я не без проблем таки сбилдил мод под Java 17 и уже нашлось много разных моментов и проблем, так что вот сегодняшние правки :D
- Исправлен адаптивный интерфейс на мониторах 2к+
- Исправлены вылеты при открытии неподдерживаемых файлов
- Поправлены косяки с блоками кода (можно было изменить блоки на панели предпросмотра, некоторые из блоков некорректно масштабировались)
Ну и также несколько новых фишек:
- Добавлены значения по умолчанию во многих блоках
- Цвета блоков теперь настраиваются индивидуально для каждого блока, а не исключительно по категориям
- Добавлены команды для запуска простых скриптов (просто
Ну что же, сегодня утром я не без проблем таки сбилдил мод под Java 17 и уже нашлось много разных моментов и проблем, так что вот сегодняшние правки :D
- Исправлен адаптивный интерфейс на мониторах 2к+
- Исправлены вылеты при открытии неподдерживаемых файлов
- Поправлены косяки с блоками кода (можно было изменить блоки на панели предпросмотра, некоторые из блоков некорректно масштабировались)
Ну и также несколько новых фишек:
- Добавлены значения по умолчанию во многих блоках
- Цвета блоков теперь настраиваются индивидуально для каждого блока, а не исключительно по категориям
- Добавлены команды для запуска простых скриптов (просто
.kts, без контекста или нпс)❤3🤝1