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
Автор поста оценил этот комментарий

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

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

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

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

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

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

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

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

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

1
Автор поста оценил этот комментарий
Для начала надо было начинать с сервис контейнера и инъекции зависимостей, то что ты начал делать - через месяц будет невозможно поддерживать и исправлять баги а тем более покрывать тестами. Пока ещё много не написал, лучше переписать пока не стало поздно.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

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

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

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

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

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

1
Автор поста оценил этот комментарий
Теперь по файлам.
Почему ITimer отвечает за deltaTime? Судя по его имени это должен быть класс таймера?
Логгер пока что никакой абсолютно. Глянте реализации на гите, либо оберните spdlog пока что.
Зачем enum LogType не в файле логгера?
Юзинги птр эт я уважаю, эт мне нравится.
Application loop должен возвратить инт, который просто вернём в main.
const int и подобное - бессмысленно.
SyncFPSLimit - спим, да? Может, в это время движок сделает что-то полезное? В текущей реализации это просто висяк, даже события glfw не обрабатываем. В нете есть примеры как с glfw правильно fps limit реализовать.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо. учту. А вот насчет Application loop не сильно понял. Может имели ввиду Application::Init. Тут соглашусь наполовину. Вместо була лучше буду возвращать свой код статуса.

const int - это сложившаяся привычка по умолчанию все делать констами. const int& было-бы бессмысленно, а вот в просто const int не вижу ничего плохого. Был случай по молодости, когда я получил в функцию чиселку, потом ее поменял, спустя пару месяцев в конец функции дописал что-то, думая, что внизу придет параметр, который передавался в функцию и, как понимаете, результат не сложился.

SyncFPSLimit - абсолютно согласен. Это я погорячился.

eLogLevel вынес отдельно, чисто чтобы в GetApplicationSettings() прокинуть не подключая хедер самого логера.

Большое спасибо за советы. Пойду гляну как правильно сделать fps limit и нормальный логгер

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества

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

Теги

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

Сообщества