Успешно отсортировано и закомпилино 74 файлов
Теперь проект отсортирован не только в Контент Браузере, а еще в папке Source (с кодом)
(Не обращайте внимание на 4 файла, классы компилились "пачками", всего их 74)
Теперь проект отсортирован не только в Контент Браузере, а еще в папке Source (с кодом)
(Не обращайте внимание на 4 файла, классы компилились "пачками", всего их 74)
Могу выделить основные разделы:
- Elements - Классы всех элементов головоломок
- Interfaces - Интерфейсы
- Settings - 2 класса для настроек игры (да, в нашей архитектуре GConfig не раскинут по всему бекенду, а красиво собран в 1 классе)
- Subsystems - Разного рода подсистемы (Discord, GameJolt, Лазеры и тд.)
- UI - Все классы для UI менюшек
- UMG - Классы кастомных UI элементов (А вы думали мы вручную в блюпринтах для каждой кнопочки делаем подсветку текста? Ага)
Так что... проблемы компиляции - это проблемы Анрила❤2🔥1💘1
Второй пост!
Тут я решил оставить вам самую вишенку на торте:
-
Почему? Когда вы создаете блюпринт, то Анрил вокруг вашего С++ класса создает свою обертку, хотя даже нет... виртуальную среду вокруг С++ класса. Благодаря ей вы можете редактировать этот блюпринт и тд. Но будем честны - если в уровне будет 200+ блюпринтов, то игра банально будет лагучей (И это правда, по ошибке молодости скажу - в Портал Солвер Демо десятки блюпринтов, даже статичных обьектов, вызывало большущие лаги). Но есть небольшая хитрость - то, что вы "делаете мышкой" можно сделать кодом!
Имеется ввиду, что загрузить и установить статик меш (к примеру-) можно прямо в коде, а основные параметры вывести в UPROPERTY и тогда можно отказаться от создания отдельного блюпринта. Но возникает логичный вопрос - как?
-
Чтобы быстро скопировать нужный путь: ПКМ по ассету -> Copy Object Path. И да - НЕ используйте его в любой другой функции, кроме конструктора класса!
А как сделать чтобы обьект мог иметь 2 статик меша по выбору? Тут тоже есть решение
-
И теперь вспоминая тот гайд про OnConstruction можем применить эти знания для переключения между статик мешами! (И вот вам домашнее задание хвхвхвх)
Да.... 8 тысяч символов в 2 поста... теперь я буду здесь рассказывать про прогресс и опыт, ибо вы меня очень сильно порадовали на релизе Альфы и поэтому я уже не могу просто опустить руки и пойти отдыхать :)
Тут я решил оставить вам самую вишенку на торте:
-
Blueprints -> C++ - Из блюпринтов в С++? Именно: это и есть одна из задач переписи бекенда - избавиться от блюпринтов и перейти на чистый спавн С++ классов в мире (Если кто не в курсе - в меню "Spawn Actor" можно заспавнить как блюпринт, так и чисто С++ класс)Почему? Когда вы создаете блюпринт, то Анрил вокруг вашего С++ класса создает свою обертку, хотя даже нет... виртуальную среду вокруг С++ класса. Благодаря ей вы можете редактировать этот блюпринт и тд. Но будем честны - если в уровне будет 200+ блюпринтов, то игра банально будет лагучей (И это правда, по ошибке молодости скажу - в Портал Солвер Демо десятки блюпринтов, даже статичных обьектов, вызывало большущие лаги). Но есть небольшая хитрость - то, что вы "делаете мышкой" можно сделать кодом!
Имеется ввиду, что загрузить и установить статик меш (к примеру-) можно прямо в коде, а основные параметры вывести в UPROPERTY и тогда можно отказаться от создания отдельного блюпринта. Но возникает логичный вопрос - как?
-
ConstructorHelpers::FObjectFinder<T> - Функция, что загружает ассет по определенному пути в конструкторе класса (Можно сказать на моменте его спавна в мире). Прикольная штука, но у меня она перестала работать с половинной ассетов ¯\_(ツ)_/¯ (Sound Cue и Ниагары-Системы)Чтобы быстро скопировать нужный путь: ПКМ по ассету -> Copy Object Path. И да - НЕ используйте его в любой другой функции, кроме конструктора класса!
А как сделать чтобы обьект мог иметь 2 статик меша по выбору? Тут тоже есть решение
-
StaticLoadObject - то же самое, что ConstructorHelpers::FObjectFinder<T>, но является низкоуровневым (и гибким) собратом, не ломает проект если его вызывать не в конструкторе класса, работает со всеми ассетами (как минимум трудностей я не встретил) и вообще он плюс вайб активити (Использование показано на фотке 1)И теперь вспоминая тот гайд про OnConstruction можем применить эти знания для переключения между статик мешами! (И вот вам домашнее задание хвхвхвх)
Да.... 8 тысяч символов в 2 поста... теперь я буду здесь рассказывать про прогресс и опыт, ибо вы меня очень сильно порадовали на релизе Альфы и поэтому я уже не могу просто опустить руки и пойти отдыхать :)
❤3🔥1🤔1
Наконец-то сделал то, что давно хотел сделать - использовать интерфейсы
Да, я знаю, использовать
Этим то и отличаются начинающие программисты от опытных. Опытные пишут немного сложно, но масштабируемо. И когда действительно надо расширить функционал - оно легко расширяется.
На 2-й фотке создаем новый интерфейс
На 3-й это результат того, как сильно упростился код. А куда подевалась вся логика? Она ушла на 4-ю фотку. Теперь каждый класс сам решает при каких условиях ему можно подсвечиваться
(От чего мне больше не надо лесть в Солвер Ган, чтобы что-то там добавить)
Да, я знаю, использовать
IsA(T::StaticClass())) это довольно таки плоховато... Хотя знаете, когда только пишешь код, думаешь "Ай ладно, 1 раз сделаю и ничего"Этим то и отличаются начинающие программисты от опытных. Опытные пишут немного сложно, но масштабируемо. И когда действительно надо расширить функционал - оно легко расширяется.
Про себя я могу сказать... Если только в UI - спустя +-7 месяцев на С++ я научился создавать реально масштабируемые структуры, от чего добавление нового UI не вызывает головной боли
На 2-й фотке создаем новый интерфейс
IHighlightableObjectInterfaceНа 3-й это результат того, как сильно упростился код. А куда подевалась вся логика? Она ушла на 4-ю фотку. Теперь каждый класс сам решает при каких условиях ему можно подсвечиваться
(От чего мне больше не надо лесть в Солвер Ган, чтобы что-то там добавить)
🔥2❤🔥1
Лаааадно, такого у меня еще не было со времен переписи UI...
Что могу сказать:
- Теперь все кубы являются самостоятельными акторами и не унаследуются от базового класса кубиков
- Добавлены новые интерфейсы:
- Также охрененно проделана работа в области раздатчика кубов - теперь раздатчик спавнит не блюпринт куба, а сам куб (вот о чем я вам говорил ранее)
- Ну а также под конец завез нам
Зачем? У меня как-то была идея сделать 2 куба в 1: Лазерный + Обычный и переключатель между типами. Но у них сильно отличается логика и их смешивание может полностью убить масштабируемость кода, читабельность и в первую очередь оптимизацию - зачем вам в обычном кубике логика для лазерного? Во-во..
А так я жесть устал, всем спокойной ночи! (Или доброе утро)
Что могу сказать:
- Теперь все кубы являются самостоятельными акторами и не унаследуются от базового класса кубиков
- Добавлены новые интерфейсы:
IIndicatorCubeInterface и IGrabbableInterface- Также охрененно проделана работа в области раздатчика кубов - теперь раздатчик спавнит не блюпринт куба, а сам куб (вот о чем я вам говорил ранее)
- Ну а также под конец завез нам
ABaseCubeElement, который хранит лишь параметр какого типа кубов он относится (обычный, лазерный и тд.). И перед стартом игры он заменяется на соответствующий куб с полной логикой (Сделано для редактора карт)Зачем? У меня как-то была идея сделать 2 куба в 1: Лазерный + Обычный и переключатель между типами. Но у них сильно отличается логика и их смешивание может полностью убить масштабируемость кода, читабельность и в первую очередь оптимизацию - зачем вам в обычном кубике логика для лазерного? Во-во..
А так я жесть устал, всем спокойной ночи! (Или доброе утро)
❤2🔥1🤩1
ха-ха.... да....
Теперь:
- Солвер можно добавить на любой обьект (через интерфейс)
- Модельки Солвера - это лишь 1 обьект на всю игру, а не на каждом кубике
- Лазерный кубик был сильно изменен, а если быть точнее - теперь это не 2 статик меша (куб + лого), а 1. А как вращать лого? Через материалы! (магия World Position Offset) Скажете что это может не оптимизированно? Следующий раз в комнате лифта поднимите голову - эти вентиляторы вращаются через материал, а не код :) (Разгружаем процессор так сказать)
А еще за 3 дня я успел сделать 10 коммитов, я уже не знаю где я и сейчас день или ночь....
А еще ну ой как спасибо за баг-репорты. Теперь легче сказать, в каких камерах нету софтлока! (хотя я думаю это вопрос времени...)
А если серьезно - то спасибо всем, кто писал в баг-репорты, та и просто давал хорошую критику
Ставьте свечку за мое ментальное здоровье, а мы начинаем делать 1.0.2 (27 поправок...)
Теперь:
- Солвер можно добавить на любой обьект (через интерфейс)
- Модельки Солвера - это лишь 1 обьект на всю игру, а не на каждом кубике
- Лазерный кубик был сильно изменен, а если быть точнее - теперь это не 2 статик меша (куб + лого), а 1. А как вращать лого? Через материалы! (магия World Position Offset) Скажете что это может не оптимизированно? Следующий раз в комнате лифта поднимите голову - эти вентиляторы вращаются через материал, а не код :) (Разгружаем процессор так сказать)
А еще за 3 дня я успел сделать 10 коммитов
А еще ну ой как спасибо за баг-репорты. Теперь легче сказать, в каких камерах нету софтлока! (хотя я думаю это вопрос времени...)
А если серьезно - то спасибо всем, кто писал в баг-репорты, та и просто давал хорошую критику
❤3💔1
Вы скажете, что я грохнулся с дубу - но это проблемы дуба, так что знакомьтесь с еще одним моим небольшим проектом:
Advanced System for Automotive Interface (ASAI)
Начнем по порядку - Относительно недавно отец взял Шкоду Фелицию 1.3
Не сказать что машина плохая, просто обслуживайте в нужное время и все ¯\_(ツ)_/¯
Небольшая вырезка из истории (кому лень - пропускайте):
В общем в машине +- настроили механику, просто заказываем новые детали начиная и обновляем. Но как-то подумали, что действительно было бы круто поставить хоть какие нибудь мозги для управления машиной (Ибо сейчас грубо говоря она работает на физических законах). Так что было принято решение начать этот небольшой проектик
Какие основные задачи/функции для ASAI могу выделить:
- Вывод на яркий 9 дюймовый дисплей с соотношением сторон 3 на 4 (С тачскрином естественно)
- Поддержка автономной записи с 4-х камер + 1 микрофон (у водителя) на SSD/HDD диск (С низким потреблением электроэнергии)
- GPS, навигатор, построение маршрута и тд.
- Аудио система - благодаря кастомизации мы можем сами установить любые динамики и сабвуферы
- Поддержка воспроизведения музыки с Блютуза (звонки тоже, поэтому нужен микрофон у водителя)
- Управление и вывод информации с внутренностей движка (Например открытие клапана по кол-ву оборотов)
- И когда будем добавлять подсветку в салон, то ее управление с ASAI было бы неплохим решением (Светомузыка дааа 🤩)
Считайте это самописный бортовой компьютер, полностью контролируемый и с открытым исходным кодом
Писать я буду очевидно на С++, но если придется писать драйвера на линуксе, то еще займусь С
Проблем с электроникой не будет, ведь все будет завязано вокруг сервоприводов (открытие на определенный угол) + Мосфеты (Включение/Выключение силовой электроники, замена старым релюшкам)
Конкретно про внутрянку ASAI:
- Дисплей возьму от планшетов, не стану брать готовые дисплеи для Rapberry Pi. Да, мы не ищем легких путей... А вообще они TFT'шные (Первые сенсорные телефоны использовали их кста), ультра темные и лагучие.
- Виновником торжества думал брать Raspberry Pi 3B+, но ее GPU аппаратно ограничен для дисплеев уровня планшетов и тд.
- От чего взял +- компромиссное решение - STM32H750. Этот микроконтроллер (?) имеет несколько ядер, способен запустить минимальный линукс, а самое главное - в него вшит модуль для общения с дисплеями любого уровня! (Дак еще оно полностью программируемое, кайф же. Кому интересно - я про
- Ну а раз STM32H750 имеет много всего, то думаю возьму ее вместо Rapberry Pi 3B+ (Тем более программатор у меня есть, а я всегда хотел поиграться с STM)
Основные задачи (Да, я любитель все делить на задачи):
- Выбрать дисплей, разобраться с его подключением и как бы выглядел его код (в теории)
- Купить дисплей, STM, подключить их и написать минимальный рабочий код для вывода на дисплей + обработка тачскрина
- После - взять самое легковесное ядро Линукса (чтобы не париться над многозадачностью, разделение процессов, файловой системой и тд. да еще и гит будет :3)
- И переписать рабочий код в драйвер под линукс (На С, даааа)
- И как только 7 кругов ада будет окончены, я смогу приступить к написанию программной базы ASAI, который будет состоять из центрального модуля + модуль рендера UI. А остальные просто будут дописываться и добавляться (Как раз изучу CMake)
Как-то так, всем доброе утро а я спать :)
Advanced System for Automotive Interface (ASAI)
Адаптивная Система Автомобильного Интерфейса (АСАИ/АСАЙ)Начнем по порядку - Относительно недавно отец взял Шкоду Фелицию 1.3
Не сказать что машина плохая, просто обслуживайте в нужное время и все ¯\_(ツ)_/¯
Небольшая вырезка из истории (кому лень - пропускайте):
Предыдущий хозяин поставил 100-ватные фары (какого болта? Сам не знаю). И итогом когда он их включал, то потребление было такое большое, что аккумулятор не заряжался, а разряжался. Но раз уж он разряжается, то это 100% проблема аккумулятора (нет). Они взяли в КАЖДУЮ ШТУКУ В САЛОНЕ (Кондиционер, Приборка, Радио, Задние камеры и тд.) поставили СУКА ВЫКЛЮЧАТЕЛЬ! (типа модульно включил что тебе надо и все). То что мы с оцтом приахерели, ничего не сказать :)
В общем в машине +- настроили механику, просто заказываем новые детали начиная и обновляем. Но как-то подумали, что действительно было бы круто поставить хоть какие нибудь мозги для управления машиной (Ибо сейчас грубо говоря она работает на физических законах). Так что было принято решение начать этот небольшой проектик
Какие основные задачи/функции для ASAI могу выделить:
- Вывод на яркий 9 дюймовый дисплей с соотношением сторон 3 на 4 (С тачскрином естественно)
- Поддержка автономной записи с 4-х камер + 1 микрофон (у водителя) на SSD/HDD диск (С низким потреблением электроэнергии)
- GPS, навигатор, построение маршрута и тд.
- Аудио система - благодаря кастомизации мы можем сами установить любые динамики и сабвуферы
- Поддержка воспроизведения музыки с Блютуза (звонки тоже, поэтому нужен микрофон у водителя)
- Управление и вывод информации с внутренностей движка (Например открытие клапана по кол-ву оборотов)
- И когда будем добавлять подсветку в салон, то ее управление с ASAI было бы неплохим решением (Светомузыка дааа 🤩)
Считайте это самописный бортовой компьютер, полностью контролируемый и с открытым исходным кодом
Писать я буду очевидно на С++, но если придется писать драйвера на линуксе, то еще займусь С
Проблем с электроникой не будет, ведь все будет завязано вокруг сервоприводов (открытие на определенный угол) + Мосфеты (Включение/Выключение силовой электроники, замена старым релюшкам)
Конкретно про внутрянку ASAI:
- Дисплей возьму от планшетов, не стану брать готовые дисплеи для Rapberry Pi. Да, мы не ищем легких путей... А вообще они TFT'шные (Первые сенсорные телефоны использовали их кста), ультра темные и лагучие.
- Виновником торжества думал брать Raspberry Pi 3B+, но ее GPU аппаратно ограничен для дисплеев уровня планшетов и тд.
- От чего взял +- компромиссное решение - STM32H750. Этот микроконтроллер (?) имеет несколько ядер, способен запустить минимальный линукс, а самое главное - в него вшит модуль для общения с дисплеями любого уровня! (Дак еще оно полностью программируемое, кайф же. Кому интересно - я про
DSI Host = Display Serial Interface Host)- Ну а раз STM32H750 имеет много всего, то думаю возьму ее вместо Rapberry Pi 3B+ (Тем более программатор у меня есть, а я всегда хотел поиграться с STM)
Основные задачи (Да, я любитель все делить на задачи):
- Выбрать дисплей, разобраться с его подключением и как бы выглядел его код (в теории)
- Купить дисплей, STM, подключить их и написать минимальный рабочий код для вывода на дисплей + обработка тачскрина
- После - взять самое легковесное ядро Линукса (чтобы не париться над многозадачностью, разделение процессов, файловой системой и тд. да еще и гит будет :3)
- И переписать рабочий код в драйвер под линукс (На С, даааа)
- И как только 7 кругов ада будет окончены, я смогу приступить к написанию программной базы ASAI, который будет состоять из центрального модуля + модуль рендера UI. А остальные просто будут дописываться и добавляться (Как раз изучу CMake)
Как-то так, всем доброе утро а я спать :)
P.S. Название ASAI 100% вышло чисто случайно :3❤🔥3❤1🔥1
От создателей легендарного шедевра "Новая папка (2)", покорившего сердца миллионов пользователей, представляем вам долгожданное продолжение - "Новая папка (3)"
Этот проект взял в себя все лучшее из предыдущих версий, сохранил фирменную простоту названия и привнес в мир бескомпромиссную инновацию - порядковый номер в скобках, увеличенный на единицу!
Особая гордость - это эксклюзивная коллекция бекапов из неработающего гита, собранных после множества конфликтов слияния коммитов, где каждая попытка объединенить коммит превращается в эпичную битву(и сломанный репозиторий)
"Новая папка (3)" - это не просто папка. Это символ новой эры в организации файлов, наследие, которое мы передадим будущим поколениям!
Этот проект взял в себя все лучшее из предыдущих версий, сохранил фирменную простоту названия и привнес в мир бескомпромиссную инновацию - порядковый номер в скобках, увеличенный на единицу!
Особая гордость - это эксклюзивная коллекция бекапов из неработающего гита, собранных после множества конфликтов слияния коммитов, где каждая попытка объединенить коммит превращается в эпичную битву
"Новая папка (3)" - это не просто папка. Это символ новой эры в организации файлов, наследие, которое мы передадим будущим поколениям!
❤6🎉1