LOL Engine день 3
Всем привет.
Из комментов в прошлых постах я кое что изменил. Огромное спасибо всем, кто помогает мне учиться:
Переделал структуру на гите и вынес include по совету из коммента
Взял spdlog для логов. Пока не оборачивал - сделаю позже.
Убрал Timer и this_thread::sleep
Как советовали, вместо того, чтобы заниматься фигней и получать состояние выполнения bool, сделал возврат состояния EXIT_SUCCESS/EXIT_FAILURE прямо из Application, ну и убрал все инициализации в конструктор
Структура проекта больше похожа на другие проекты на гите:
src / include / thirdparty / example (куда убрал базовый проект. Он пока пустоват. Займусь)
Инициализация запускаемого проекта проходит теперь через два extern.
Один прокидывает настройки приложения (разрешение, название, лимит кадров, название стартовой сцены)
Второй регистрирует сцены в SceneManager
Ну и удалил бгмерзский ServiceProvider. Это была ну ооочень плохая идея. Возможно, не буду изобретать велосипед, а просто возьму потом какую-нибудь DI библиотеку типа Boost.DI
Основной работы прибавилось, так что занимаюсь пет-проектом пореже. Спасибо всем кто участвует и помогает!
LOL Engine день 2
(пожалуй, буду нумеровать посты по дням)
Итак, сегодня после работы поработал немного больше.
Из полезностей - абстрагировал мусор в int main() в класс Application, добавил Logger и Timer (на очереди WindowManager и Renderer)
Из важного - сделал ServiceProvider.
Синглтоны в проекте будут, куда без них, но складывать их в глобальном пространстве я не люблю, так как такое трудно отлаживать. Поэтому, в Application появился ServiceProvider, в который я начал складывать все синглтоны для последующего прокидывания вглубь приложения. Вместо Logger::getInstance() будет _serviceProvider->GetService<Logger>()
Таким образом доступ к сервисам не будет у тех, у кого его быть не должно, а тех, у кого доступ есть - будет легче отлаживать.
Победить сборку под веб сегодня не получилось, пошел сидеть над этим дальше.
Основная работа не позволяет заниматься движком много времени в день, но постараюсь что-то полезное делать ежедневно.
Принял решение не тратить много времени на расписывание каждой строчки кода, лучше этот часик потратить на сам код.
Огромное спасибо всем, кто задает вопросы в комментах и тычет носом в ошибки - постараюсь учесть и исправить. Вырасти, так сказать, над собой.
Из личного заметил, что два дня уже не думскролю пикабу, а пишу код. Очень этому рад, так что даже если эти посты будут набирать больше минусов, чем плюсов, все равно продолжу.
Как всегда - жду ваши плюсы/минус/комменты. Пошел кодить дальше
Всем привет
Приветствую пикабушников и пикабушниц, интересующихся разработкой комплюхтерных игор, да и разработкой в принципе.
Меня зовут Ярослав и я новорег (хотя и читал пикабу больше 10 лет). Собственно эти 10 лет я занимался работой на одном легаси мобильном проекте и стал подозревать, что навыки утекают в унитаз.
Я был одним из тех кто долго ждал релиза пошумевшего в новостях Российского движка Nau. Обещали кроссплатформенный движок с возможностью писать игровую логику на плюсах.
Выходит бета, и работает только под Windows (единственная ось, которая больше официально в России не работает) и только с DirectX рендером.
Такое положение дел меня категорически не устроило и я принял решение вести девлог на этом замечательном ресурсе, работая над собственным движком с маджонгом и гейшами. (Еще один самописный индюшайчий движок - это то, что нужно этому миру)
Почему я не взял какой-нибудь Unity или Unreal? Пытался. Не зашло.
Что я буду делать:
Писать свой игровой движок на примере маленьких проектов с целью подтянуть навыки в C++, CMake, GIT, Vulkan API, кроссплатформенной разработке, разобраться с хорошей архитектурой, ну и по мелочам чего-то наберется.
Сам работаю на Mac, поэтому проект будет собираться на CMake, IDE - Visual Studio Code,
язык C++ 23, чтобы читатели могли повторить это на винде и линухе.
Что я жду от сообщества:
Надеюсь, найдутся люди, кому это будет полезно.
Еще больше надеюсь, что найдутся люди, которые увидят слабые места в моем коде и честно накидают мне в панамку.
Когда проект будет дописан до состояния, когда говно и палки уже не надо будет крепить изолентой, сделаю проект на гите публичным.
Всем спасибо за внимание, надеюсь, пребывание здесь будет полезно и мне и вам. Ставьте плюсы/минусы, пишите комменты (в принципе пишите - интересно вам такое или нет?). Следующий пост напишу про структуру проекта на данный момент и настройку сборки.
В разработке Radio Attack
Всем привет. Я разработчик данной игры. Занимаюсь я созданием данной игры уже как месяц. В разработку входят: создание движка, разработка логики, написание компилятора и эмулятора. Зачем и для чего спросите вы? Ага, тут я создал небольшую завесу тайны, но как скоротечны бывают мысли автора статьи, мне всё-таки придется изложить суть игры.
Это военная стратегия для программистов. В мире полно разных игр, и я бы хотел, чтобы моё творение пополнило список игр, в которую будут играть. Может показаться, что игра сложная, а ведь писать код придется на ассемблере. Но вспомните такие игры как SHENZHEN I/O или EXAPUNKS. В них играют, и они нашли своих игроков. Может и среди вас найдется тот, кто захочет поиграть в такое произведение. А теперь подробней об игре.
Есть две воюющие стороны. За одну сторону могут играть до пяти операторов. Оператор отвечает за наблюдением за радиоэфиром и пытается анализировать перехваченные данные. Здесь можно применить полностью дезинформацию или шифрование канала. Это стало возможным, потому что я разработал собственный компилятор с байт кодом, который очень похож на INTEL 8086. Это компилятор 16-битного процессора. Я решил взять что-то похожее, с чем люди на протяжении 30 лет сталкивались, например в реверс инжиниринге именно с таким процессором. Так как это мой первый компилятор, то он простой в реализации и имеет свой байткод, отличный от настоящего intel. Также я делаю эмулятор, который выполняет этот байткод и делает логику кода осуществимой. Когда мы передаем данные в эфир, например в свой штаб, то вражеские сканеры могут засечь этот код. Если этот код будет с шифрованием, то враг не сможет догадаться, о чем общаются юниты вашей команды.
В игре есть танки, сканеры, инжекторы, киборги, строители, доставщики вооружения, сборщика ресурсов, дроны.
Танки и киборги являются боевой частью команды. Сканеры сканируют эфир в радиусе определенных клеток, инжекторы созданы для дезинформации, строители создают новые постройки, доставщики доставляют вооружение, сборщик ресурсов ищет подземные течения рек и добывает нефть или воду (я пока не решил), дроны созданы для разведки.
Как игроки, мы не можем видеть врага на карте. Это и логично, клетка занимает в реальности несколько километров, и поэтому врагов можно обнаружить с помощью дронов. Но враг хитёр, например, если у врага 120 танков, то он может замаскировать всех или замаскировать 100 танков. Тогда, дрон увидет только 20 танков и мы подумаем, что там на той клетке слабый противник. Атака из засады даёт преимущество. Такую тактику я вычитал в книге "Искусство войны". На клетке могут собираться сразу все типы юнитов и также маскироваться. Можно будет пробовать искать замаскированные юниты, но на это будет требоваться больше времени.
Первым делом, перед боем, мы должны запрограммировать всех юнитов в специальном режиме симуляции. Здесь можно отточить все навыки ведения боя, и когда будет игра, то будем только делать мелкие улучшения.
В эмуляторе пока что мало команд реализовано и поэтому я могу показать только передвижение в одну сторону, но я так был рад, когда мне это удалось сделать, вы не представляете.
Вот это видео.
На видео можно увидеть, справа игровое поле в режиме симуляции, слева прошивки и кодинг на ассемблере. Стороны задаются обычным числом. 0 это левая сторона, и идём по часовой стрелке и число 3 получается правая сторона.
Спасибо за внимание.
Ссылка на игру https://vkplay.ru/play/game/radio_attack
Unreal Engine 5 и VR с нуля. Часть 9. Основы С++. С++ vs Blueprint. Курс по Level Design
Что нового за последнее время и что делать дальше?
После успешного завершения мини игры Darts VR, нужно разобраться, что делать дальше и в каком порядке. Но в целом, у меня сформировался план развития, чтобы в итоге приблизиться к VR демо.
Ссылки пришлось вставить в текст, потому что ссылки на плейлисты ютуба не дает вставить.
Мне нужен С++ чтобы в будущем работать в команде. Изменения в блюпринтах не показываются в коммитах git.
Мне нужно научиться применять С++ в Unreal Engine , особенно для проектов VR.
Мне нужно больше знаний о Level Design, а еще лучше, для игр от первого лица.
План дальнейшего обучения.
Основы C++
Для изучения синтаксиса я выбрал эти плейлисты. Где-то информация одинаковая, но где то свои особенные задания или лайфхаки применения языка.
Базовое программирование на примере создания игры для Windows по референсу DOS игры.
Level Design Master Class: All in One Complete Course
С++ и блюпринты в Unreal Engine 5
Создание проекта на С++ для Unreal Engine 5
Создание VR проекта в Unreal Engine C++ и Blueprint
(Курс я еще не выложил но обязательно вставлю сюда ссылку)
Пет проект С++
Для практики С++ я уже придумал себе задачу написать скрипт, который будет сравнивать данные из csv и json. Это мне нужно для работы.
Если всё получится, прикреплю сюда ссылку на проект в github (Вставлю ссылку сюда).
Заключение
Надеюсь после прохождения этих курсов, я смогу двинуться по VR дальше и это уже будет более понятной мне областью. Информацию по VR, я так же коплю и выкладываю в телеграм канале.
Ну, что ж начнем страдать))
Приветствую всех на Pikabu. Это мой первый пост так, что пинайте. Если серьезно я уже как 4 года занимаюсь разработкой собственного игрового движка. Да безумно, да бессмысленно, но мне это нравится. В особенности капаться в Unity или в Source, чтобы реализовать подобный функционал самому.
Говоря кратко, я решил похвастаться своим недоразвитым движком)).