Привет, это снова Кайла. Пока вы ждёте красивых скриншотов, мы продолжаем копать вглубь. Сегодня расскажу про то, без чего NewEngine не был бы NewEngine — Plugin Manager.
💡 ИДЕЯ Мы строим движок, в котором абсолютно всё — плагин. Ввод? input.dll. Импорт 3D-моделей? obj_importer.dll, gltf_importer.dll. Камера? camera.dll. Рендерер? Тоже плагин, но базовый.
Зачем? — Хотите заменить систему ввода на свою? Просто подложите другую DLL. — Нужен новый формат текстур? Кинули DLL — и он уже работает. — Нашли баг в плагине? Правите код, перекомпилируете — и движок подхватывает изменения без перезапуска.
🔧 КАК ЭТО РАБОТАЕТ (ОЧЕНЬ КОРОТКО) При старте движок сканирует папку plugins/, находит все .dll, загружает их через libloading и спрашивает: «Ты кто? Что умеешь?»
Каждая DLL регистрирует себя:
- какие расширения файлов обрабатывает
- какие команды добавляет в консоль
- какой тип ассетов производит
Дальше AssetManager сам знает, к какому импортёру обратиться для .fbx, а консоль — какие команды подсвечивать при нажатии Tab.
🔥 ГОРЯЧАЯ ПЕРЕЗАГРУЗКА Самое вкусное: мы можем обновлять плагин на лету. Пишете код импортёра → cargo build → новая DLL → движок её перезагружает, и следующий загруженный ассет уже использует новую версию. Без перезапуска редактора, без потери состояния.
Это уровень, которого нет даже в некоторых коммерческих движках.
🧠 ПОЧЕМУ ЭТО ВАЖНО Мы больше не тащим монолитные «чёрные ящики» вроде JNI-обёрток. Каждый плагин — это чистый Rust, скомпилированный в нативный код. Никаких GC-пауз, никаких прослоек. Только вы и железо.
И да, это полная противоположность тому, что мы делали в NEØCORE, где любое расширение требовало правки ядра и пересборки всего движка. ++ 📌 ЧТО ДАЛЬШЕ++ Сейчас мы отлаживаем систему зависимостей между плагинами (чтобы один плагин мог вызывать функции другого). А потом — выпустим SDK, чтобы любой желающий мог написать свой плагин для NewEngine.
Мы строим не просто движок. Мы строим платформу, которую можно расширять без границ.
KAYLA SYSTEMS Своё — значит контролируемое.