Серия «LOL Engine»

9

LOL Engine день 3

Серия LOL Engine

Всем привет.

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

Переделал структуру на гите и вынес include по совету из коммента

Include статической библиотеки

Include статической библиотеки

Взял spdlog для логов. Пока не оборачивал - сделаю позже.

Убрал Timer и this_thread::sleep

переделанный основной цикл

переделанный основной цикл

Как советовали, вместо того, чтобы заниматься фигней и получать состояние выполнения bool, сделал возврат состояния EXIT_SUCCESS/EXIT_FAILURE прямо из Application, ну и убрал все инициализации в конструктор

int main стал аккуратнее

int main стал аккуратнее

Структура проекта больше похожа на другие проекты на гите:

src / include / thirdparty / example (куда убрал базовый проект. Он пока пустоват. Займусь)

Более аккуратная структура

Более аккуратная структура

Инициализация запускаемого проекта проходит теперь через два extern.

Один прокидывает настройки приложения (разрешение, название, лимит кадров, название стартовой сцены)

Второй регистрирует сцены в SceneManager

Ну и удалил бгмерзский ServiceProvider. Это была ну ооочень плохая идея. Возможно, не буду изобретать велосипед, а просто возьму потом какую-нибудь DI библиотеку типа Boost.DI

Основной работы прибавилось, так что занимаюсь пет-проектом пореже. Спасибо всем кто участвует и помогает!

Ссылка на пустоватый репозиторий

Показать полностью 4
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

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

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

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

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

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

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

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

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

Показать полностью 3
7

Девлог LOLEngine 0

Серия LOL Engine

Привет, игроделы!

Денёк выдался тяжелый и кодить получилось мало, но, учитывая успешный успех предыдущего поста, пора браться за работу.

На сегодня успелось только собрать базу на гит и вызывать окошко. Обо всем по порядку:

Завел проект на гите и стянул его на машину. Далее создал вот такую структуру папок:

Код движка расположился в папке LOLEngine, и собираться он будет в виде статической библиотеки. Точка входа int main() тоже будет расположена здесь.

Код проекта будет в папке Game, сборка - в исполняемый файл.

Ну и все сторонние библиотеки будут складываться в папку ThirdParty.

Начну с подключения сабмодулей к своему репозиторию. Мне понадобятся: сейчас - glfw, потом - glm (сильно потом сюда будут спиханы все json, imgui и прочее)

Сабмодули подключил, обновил, проверил наличие в папке ThirdParty. Далее - прежде чем открывать папку репозитория в VS Code, следует сразу создать файл .gitignore (чтобы в комит не шло то, что не должно туда идти) и файл CMakeLists.txt в корне репозитория, и по одному CMakeLists.txt в папках LOLEngine и Game

Открываю папку в VS Code и создаю файл main.cpp в LOLEngine/Internal и пустой GameSettings.cpp в Game/Sources (в каждый проект надо добавить как минимум один файл исходного кода, чтобы CMake не ругался)

Далее перехожу в корневой CMakeLists и пишу следующее:

CMAKE_SUPPRESS_REGENERATION добавил, чтобы при сборке в IDE не создавался таргет для теста сборки

Движок и исполняемый проект подключаю через add_subdirectory. CMake найдет файлы CMakeLists в соответствующих папках.

CMakeLists.txt проекта Game выглядит так:

В туториалах часто видел, как все добавляемые файлы прописывают вручную в add_executable или add_library.

Здесь я использую file(GLOB_RECURSE) чтобы рекурсивно пройти по папкам и найти все файлы, сохранить их в переменную GAME_SOURCES и GAME_HEADERS и дальше добавить в проект. Для сборки достаточно добавить только cpp и c файлы, но чтобы hpp, h были видны в IDE если кто-то соберет под Visual Studio или XCode, добавляю и их.

source_group(TREE) сохранит структуру каталогов при сборке под IDE

Далее на очереди CMakeLists движка:

Нахожу OpenGL, аналогично Game, прохожусь рекурсивно по папкам в поисках исходников, подключаю в статическую библиотеку.

Далее папку с внутренними заголовками подключаю как PRIVATE, а папку Include и загаловки glm, glfw - как PUBLIC, чтобы они были видны в Game

Ну и заканчиваю подключением библиотек. Если в папке сабмодуля есть CMakeLists.txt высокая вероятность, что ее можно подключить через add_subdirectory и не париться вообще (Imgui потом придется собирать самим)

С этим закончили. Теперь если в main.cpp написать простой int main(), то все запустится.

Заработало

Заработало

Теперь проекту нужно передать размер и название окна в движок (позднее и некоторые другие данные). Для этого в LOLEngine/Include/Engine/Core создаю файл AppSettings.hpp и объявляю простую структурку.

Pikabu! Сделай форматирование кода в тексте! задолбался все картинками ставить!

Pikabu! Сделай форматирование кода в тексте! задолбался все картинками ставить!

Все внешние функции и методы я сложу в файле LOLEngine/Include/Engine/ExternalSettings.hpp где пока будет объявлена одна extern функция GetApplicationSettings()

В папке Game/Sources/ создаю файл GameSettings.cpp и пишу реализацию функции GetApplicationSettings();

Возвращаюсь в движок - в main.cpp и получаю первые настройки из исполняемого модуля Game.

Запускаю и радуюсь окошку.

На сегодня это все. Успел мало, но надеюсь разогнаться на днях. Спасибо тем, кто подписался и @AABVGD, за идею написать под веб-сборку. В следующем посте постараюсь подключить OpenGL, glad и emscripten для сборки цветного окошка под desktop и web. Ссылка на репо

Ставьте плюсы/минусы, пишите в комментах что я сделал так, а что не так.

PS: Если кто знает как вставлять код с форматированием на Pikabu, расскажите

Показать полностью 17
Отличная работа, все прочитано!

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества