9

Relict Engine: Файловая система и DevLog 20250618

Решил все таки отложить работу над рендером и заняться тем, что в этот рендер передавать, т.е. Ассетами (от слова ass, хе-хе). А для ассетов нужна файловая система.

В Relict Engine предусмотрено две файловые системы. Первая - системная (SystemFS) - это обычный каталог с обычными же файлами, которые движок грузит как есть (ну почти)

Вторая - т.н. RAT Packed FS, или Relict AsseT Packed File System. Она представляет собой нечто, отдаленно похожее на pak Анрила, но работает несколько иначе. О ней подробнее расскажу позже отдельным постом.

Каждая файловая система представляет собой отдельный класс в пространстве имен Relict::FS и должна поставлять (кроме логичных Find, Load итд) два основных метода Mount и uMount. Mount монтирует каталог (или файл, или сетевой ресурс) в т.н. точку монтирования, и представляет файловую структуру в виде posix подобного дерева, где корень дерева - это "/". uMount, соответственно, эту точку монтирования удаляет.

Рулит этим всем менеджер, через который мы и будем загружать файлы, ассеты, и прочее согласно выставленным приоритетам. Если файла в первой файловой системе не находится, то будем смотреть во второй, и так, пока файл не будет найден, или кончится список подключенных файловых систем. Приоритеты, в свою очередь, выставляются в конфиг файле и имеют вот такой формат:

В первую очередь мы будем искать запрошенный файл в SystemFS и только потом в RATPack

В первую очередь мы будем искать запрошенный файл в SystemFS и только потом в RATPack

Краткий список изменений:

  • Переделан Атом Tickable (но все еще он работает не так, как мне хочется)

  • AssetManager для управления ассетами.

  • Добавлен интерфейс IAsset для прототипирования классов ассетов.

  • Добавлен механизм привязки класса ассета к MagicNumber файла ассета

  • Добавлен класс FSManager для управления файловыми системами

  • Добавлен интерфейс IFileSystem для прототипирования классов файловых систем

  • Добавлены классы SystemFS и RATPackFS

  • Все интерфейсы собраны в подкаталог Interface для удобства

  • Добавлена возможность инициализировать переменные массивы через атом Configable

    Новые типы переменных: CVT_ABOOL, CVT_AINTEGER, CVT_ANUMBER и CVT_ASTRING

  • Исправлен порядок инициализации early классов, т.к. они могли быть созданы до того, как будут прочитаны конфиги.

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"