7

LOL Engine день 2

Серия LOL Engine

(пожалуй, буду нумеровать посты по дням)

Итак, сегодня после работы поработал немного больше.

Из полезностей - абстрагировал мусор в int main() в класс Application, добавил Logger и Timer (на очереди WindowManager и Renderer)

LOLEngine/Internal/main.cpp

LOLEngine/Internal/main.cpp

Из важного - сделал ServiceProvider.

LOLEngine/Include/Engine/Core/ServiceProvider.hpp

LOLEngine/Include/Engine/Core/ServiceProvider.hpp

Синглтоны в проекте будут, куда без них, но складывать их в глобальном пространстве я не люблю, так как такое трудно отлаживать. Поэтому, в Application появился ServiceProvider, в который я начал складывать все синглтоны для последующего прокидывания вглубь приложения. Вместо Logger::getInstance() будет _serviceProvider->GetService<Logger>()

LOLEngine/Internal/Engine/Core/Application.cpp

LOLEngine/Internal/Engine/Core/Application.cpp

Таким образом доступ к сервисам не будет у тех, у кого его быть не должно, а тех, у кого доступ есть - будет легче отлаживать.

Репозиторий все там-же

Победить сборку под веб сегодня не получилось, пошел сидеть над этим дальше.

Основная работа не позволяет заниматься движком много времени в день, но постараюсь что-то полезное делать ежедневно.

Принял решение не тратить много времени на расписывание каждой строчки кода, лучше этот часик потратить на сам код.

Огромное спасибо всем, кто задает вопросы в комментах и тычет носом в ошибки - постараюсь учесть и исправить. Вырасти, так сказать, над собой.

Из личного заметил, что два дня уже не думскролю пикабу, а пишу код. Очень этому рад, так что даже если эти посты будут набирать больше минусов, чем плюсов, все равно продолжу.

Как всегда - жду ваши плюсы/минус/комменты. Пошел кодить дальше

Лига программистов

2.3K постов12K подписчиков

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

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

Вы смотрите срез комментариев. Показать все
0
Автор поста оценил этот комментарий

1. Если хотите использовать `typeid`, внимательно посмотрите на "цену" его использования. Она может включать в себя включение RTTI. Традиционно, RTTI в игровых движках выключают для получения максимальной производительности.

2. Использование `std::shared_ptr` для хранения указателей на сервисы не в полной мере оправдано. Разделяемый указатель, вероятно, задумывается для того, чтобы можно было его сохранять локально и не запрашивать заново. Я не знаю, является ли это стандартной практикой. В моём представлении, сервис запрашивается каждый раз, когда он нужен. При этом при запросе используется не тип конкретного сервиса, но его интерфейс (или что-то подобное), т.к. один и тот же сервис может иметь множество реализаций, и какая именно зарегистрирована для данного сервиса в каждый момент времени не ясно. Особенную проблему `std::shared_ptr` создают в ситуации, когда регистрация сервиса прекращается, или он заменяется другим объектом реализации сервиса: все, кто локально сохранил разделяемый указатель на сервис продолжат использовать старый экземпляр. Вроде как гибкость, надёжность, но лучше все времена жизни и взаимодействия максимально линеаризовать - так сильно проще.

раскрыть ветку (5)
0
Автор поста оценил этот комментарий

Учитывая, что _serviceProvider у него используется для выдачи указателей на синглтоны, прекращение регистрации указателя или изменение указателя на синглтон кажется чем-то маловероятным.

раскрыть ветку (4)
1
Автор поста оценил этот комментарий

Придумать поводы перерегистрации можно. Другой вопрос, зачем использовать Service Provider как минимум для представленных синглтонов за пределами примеров использования паттерна? Грубо говоря, в лог должна писать функция `log()`, считать время должна функция `get_time()`. Если таймер используется для выполнения действий по расписанию, то что-то должно называться `Scheduler`. Если таймер просто вызывает callback или как-то ещё сигнализирует об истечении времени, после чего инициируется действие, то таймер не должен быть синглтоном в принкипе. В коде же таймер и вовсе интерфейс и возвращает "длительность" кадра. Я, конечно, не игродел, но вроде это ближе к какой-то статистике, чем к таймеру.

раскрыть ветку (3)
0
Автор поста оценил этот комментарий

Спасибо за коммент. ServiceProvider - вообще пойдет в мусорку. Утро наступило и сам вижу, что апож полный. С таймером тоже что-то подумаю. Постараюсь побольше времени тратить на продумывание и исправить то, что мне уже накидали в комментах :)

0
Автор поста оценил этот комментарий

Другой вопрос, зачем использовать Service Provider как минимум для представленных синглтонов за пределами примеров использования паттерна?

Тоже не вижу в этом смысла. В посте говорится

Синглтоны в проекте будут, куда без них, но складывать их в глобальном пространстве я не люблю, так как такое трудно отлаживать.

Хз, в чём сложность отладки, но посмотрим, как ТС будет превозмогать трудности, которые столь изобретательно для себя создаёт.

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

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

То что я сам с собой анальным кексом занимаюсь, это да. Пытаюсь сделать что-то вроде Zenject в Unity. Но не получается придумать. И еще пытался не хранить экземпляры в глобальном пространстве. Видимо, брошу эту затею и не буду пытаться изобрести "хитрый код".

Попробую static ServiceContainer* instance сделать и регить в него унаследованные от простого IService классы без этих type_id. Эксперимент оказался неудачным :(

Ладно, если не пробовать, то как еще учиться? :) В любом случае большое спасибо за дельные советы. Попробую сделать что-то менее "хитрое"

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества