Relict Engine: Попытка избавится от наркомании #2
UPD:
Несколько увяз в GameFramework. Пост будет, когда продумаю все нюансы.
Cводка изменений:
- Переделал GC (классы OS, GC, EngineGC) на модель с Метаданными
- Добавил новый статичный аксессор Memory::Meta для тыканья в мета класс
- Добавил две новых сущности ObjectMeta и ClassMeta
- Добавил счетчик кол-ва объектов по классам
- Добавил генерацию уникальных текстовых имен для объектов
Теперь подробнее:
Сначала с плохого. Пока не нашел как нормально запретить (на уровне компиляции) или переиспользовать оператор delete (он один фиг деструктор дергает, даже когда не надо и если он пустой). Поэтому откладываю в сторону и вернусь к нему потом.
Тоже самое с нормальными конструкторами. Использовать их так, чтобы не вредить логике работы всего остального не получится. Поэтому void __constructor, для кастомной логики, с нами надолго.
Переписанный Object Storage (он же OS) теперь работает быстрее (за счет сущностей метаклассов), а так-же дает ряд дополнительных возможностей (пока-что через них можно узнать название класса, и объекта в текстовом формате; кол-во живых объектов каждого класса. Потом буду добавлять дополнительные поля, по необходимости). Заодно исправил поведение хождения по стеку объектов. Теперь, в случае, если удаляется Owner объекта, сначала удалятся объекты принадлежащие овнеру, и только потом, в самом конце, сам owner.
И вообще OS стал неким комбайном, совмещающим в себе и cобственно Object Storage и Сборщик мусора (разделение идет по методам через статичные аксессоры с говорящими названиями). SharedPtr теперь не используется даже в нем, т.к. абстракция над сырыми указателями в нем не имеет никакого смысла
Из класса Object, соответственно ушли GC флаги (они улетели в мету), и их место занял указатель собственно на мета класс. И да, теперь OS управляет объектом через мету, а не напрямую (сделал удобства ради, чтобы по коду не искать переключения флагов). Теперь они все в одном месте).
И пока, работу над базовым представлением игровых объектов считаем завершенной. Единственное, что я еще дополнительно сделаю с Object это введу дополнительный флажек, который будет ставится при вызове Destroy (чтобы Движок знал, что этот конкретный объект был удален разработчиком, а не собран GC). Теперь необходимо создать классы для основных сущностей GameFramework. Миры, сцены, актеры, и прочее. Это займет у меня больше 1-2х дней, поэтому ожидайте весточку от меня где-то на выходных.


Лига Разработчиков Видеоигр
8.9K пост23.2K подписчик
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"