9

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х дней, поэтому ожидайте весточку от меня где-то на выходных.

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

ЗАПРЕЩЕНО:

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

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

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


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

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

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

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

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