Сколько заработала игра за первый месяц и рейтинг 😁 Выходит, что если надо 100к в месяц, то мне надо по 1000 таких игрух выпускать, либо повышать качество игр и пилить то, что в трендах
🔥4❤1👍1
Почему мне не зашёл Zenject
Ответ прост: потому что я креветка ) Я использовал композицию, например: Мне нужен спавнер врагов, он внутри себя созавал пул, который внутри себя создавал фабрику, которая должна была принимать какие-то данные о врагах (из конфига или сохранений). И я такой: блин, чтобы всё это биндилось, зависимости раскидались, надо как-то вывернуться непонятно как. Поэтому я ручками прокидывал все данные, которые не нужны ни спавнеру, ни пулу. И вот недавно я начал новый проект на свежую голову, но уже решил пощупать VContainer. Только в этот раз я уже инжектил конфиг в фабрику, фабрику регистрировал и инжектил в пул, а пул регал и инжектил в спавнер. И тогда всё встало на свои места. Короче, DI Container - такая штука, которая вынуждает вас соблюдать SOLID и наоборот, если вы делаете по SOLID, то удобно юзать DI контейнеры.
Раньше я просто не соблюдал "D" (DIP: принцип инверсии зависимостей) из SOLID. Он гласит:
1. Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций (интерфейсов, абстрактных классов).
2. Абстракции не должны зависеть от деталей. Детали (конкретные реализации) должны зависеть от абстракций.
Когда начал соблюдать этот принцип, пазл тут же сошёлся.
Всем хорошего кода
Ответ прост: потому что я креветка ) Я использовал композицию, например: Мне нужен спавнер врагов, он внутри себя созавал пул, который внутри себя создавал фабрику, которая должна была принимать какие-то данные о врагах (из конфига или сохранений). И я такой: блин, чтобы всё это биндилось, зависимости раскидались, надо как-то вывернуться непонятно как. Поэтому я ручками прокидывал все данные, которые не нужны ни спавнеру, ни пулу. И вот недавно я начал новый проект на свежую голову, но уже решил пощупать VContainer. Только в этот раз я уже инжектил конфиг в фабрику, фабрику регистрировал и инжектил в пул, а пул регал и инжектил в спавнер. И тогда всё встало на свои места. Короче, DI Container - такая штука, которая вынуждает вас соблюдать SOLID и наоборот, если вы делаете по SOLID, то удобно юзать DI контейнеры.
Раньше я просто не соблюдал "D" (DIP: принцип инверсии зависимостей) из SOLID. Он гласит:
1. Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций (интерфейсов, абстрактных классов).
2. Абстракции не должны зависеть от деталей. Детали (конкретные реализации) должны зависеть от абстракций.
Когда начал соблюдать этот принцип, пазл тут же сошёлся.
Всем хорошего кода
🔥5
Второй проект, который командный, уже в процессе разработки!
Уже поймал несколько затыков с фруструмом камеры, созданием elastic эффекта границ, соотношением дельты курсора/пальца с дельтой перемещения в мировых координатах.
Но сейчас всё уже прекрасно. Пока в пути, расписал задачи на ближайжее будущее
Уже поймал несколько затыков с фруструмом камеры, созданием elastic эффекта границ, соотношением дельты курсора/пальца с дельтой перемещения в мировых координатах.
Но сейчас всё уже прекрасно. Пока в пути, расписал задачи на ближайжее будущее
🔥3
Особенности проекта:
Все кнопки, окна и многие сервисы управляются с помощью команд - выключенные монобех классы, забравшие на себя разнородную логику. Минус, что они монобехи. Плюс, что их прям в инспеторе накидываешь стопкой в список на кнопке, а внутри просто по списку пробегаешься и вызываешь Execute(). Поэтому кода сильно меньше, как и дубляжа. Окна открываются с дотвин анимацией и самое прикольное, что окна примают конфиги, поэтому на каждое можно сделать свою анимацию опять же не изменяя код
Все кнопки, окна и многие сервисы управляются с помощью команд - выключенные монобех классы, забравшие на себя разнородную логику. Минус, что они монобехи. Плюс, что их прям в инспеторе накидываешь стопкой в список на кнопке, а внутри просто по списку пробегаешься и вызываешь Execute(). Поэтому кода сильно меньше, как и дубляжа. Окна открываются с дотвин анимацией и самое прикольное, что окна примают конфиги, поэтому на каждое можно сделать свою анимацию опять же не изменяя код
🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Как по мне - очень удобная надстройка получилась
🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
За последнюю неделю было не так много времени. Что сделано:
- добавил класс ClickDetector - обрабатывает нажатия, если курсор/тач не над UI из списка исключений. Возвращает коллайдер, если куда-то попал;
- добавил TerritorySelector, который под интерфейсом слушает ClickDetector и, если на коллайдере есть компонент Territory, то кеширует выбор и сообщает об этом всем подписчикам;
- добавил TerritoryElevator - принимает под интерфейсом TerritorySelector, подписывается на изменения. Если выбрана территория, то приподнимает её, если снят выбор, то опускает обратно. Анимация через DOTWeen;
- добавил TerritoryPopUpShower - принимает TerritorySelector, будет принимать TerritoryConfig, чтобы заполнять инфу в окне. Показывает окно над территорией и, если она доступна, кнопку перехода к сцене боя;
- чуть накинул текстур в материалы, чтобы сделать визуал чуть поприятнее;
- масштабный рефакторинг и оптимизации.
Если видео не грузит, можно посмотреть на яндекс диске: https://disk.yandex.ru/i/IDYasUqHFdDqtg
- добавил класс ClickDetector - обрабатывает нажатия, если курсор/тач не над UI из списка исключений. Возвращает коллайдер, если куда-то попал;
- добавил TerritorySelector, который под интерфейсом слушает ClickDetector и, если на коллайдере есть компонент Territory, то кеширует выбор и сообщает об этом всем подписчикам;
- добавил TerritoryElevator - принимает под интерфейсом TerritorySelector, подписывается на изменения. Если выбрана территория, то приподнимает её, если снят выбор, то опускает обратно. Анимация через DOTWeen;
- добавил TerritoryPopUpShower - принимает TerritorySelector, будет принимать TerritoryConfig, чтобы заполнять инфу в окне. Показывает окно над территорией и, если она доступна, кнопку перехода к сцене боя;
- чуть накинул текстур в материалы, чтобы сделать визуал чуть поприятнее;
- масштабный рефакторинг и оптимизации.
Если видео не грузит, можно посмотреть на яндекс диске: https://disk.yandex.ru/i/IDYasUqHFdDqtg
🔥2
Для сцены с картой добавил CameraOrientationAdapter. Получает соотношение сторон, если высота больше ширины, делит высоту на ширину и на полученный коэффициент домножает _minimum и _maximumOrtographicSize. Эти данные через свойства берёт CameraZoom. Таким образом при повороте экрана размер карты остаётся такой же. Так как это отдельный класс с интерфейсом, который можно инжектить через VContainer, можно будет чуть доработать и переиспользовать в сцене уровня.
Вообще я бы не делал логику под поворот экрана, но требования пыточной - поддержка вертикальной и горизонтальной ориентации для мобилок. Поэтому приходится изобретать
Вообще я бы не делал логику под поворот экрана, но требования пыточной - поддержка вертикальной и горизонтальной ориентации для мобилок. Поэтому приходится изобретать
Завтра ориентировочно в 19:00 или 20:00 состоится созвон в дискорд, плюс трансляция на ютуб. Я буду проводить лекцию по VContainer. Я подготовил презентацию и чистый проект. На своём недоджуновском уровне расскажу, как установить, настроить и использовать. Подробности будут в канале
https://t.me/IndieGameMill
Ну и с вас 🔥 если планируете прийти 🙂
https://t.me/IndieGameMill
Ну и с вас 🔥 если планируете прийти 🙂
🔥3
Лекция по VContainer сегодня в 20:00. Волнуюсь. Как бы не ударить в грязь лицом и никто не догадался, что я такой себе кодер )
VContainer - почти тоже самое, что и Zenject (Extenject), разница лишь в мелочах. Я долго подбирался к пониманию DI-контейнеров, пересмотрел много лекций, но не ощущал преимуществ. В итоге оказалось всё просто: надо было строить немного иную архитектуру проекта. Удивительно, как все принципы и паттерны проектирования находятся близко к друг другу и, по сути, талдычат об одном и том же. Тут и DIP, и SRP, и точка входа
Встреча пройдёт в дискорд, там можно прям общаться в процессе изучени/рассмотрения темы.
ДС: https://discord.gg/TNT28W8y
В ютубе будет трансляция. И возможно даже сохранится.
Ютуб канал: https://www.youtube.com/@indiegamemill
Приходите, буду рад 🙂
VContainer - почти тоже самое, что и Zenject (Extenject), разница лишь в мелочах. Я долго подбирался к пониманию DI-контейнеров, пересмотрел много лекций, но не ощущал преимуществ. В итоге оказалось всё просто: надо было строить немного иную архитектуру проекта. Удивительно, как все принципы и паттерны проектирования находятся близко к друг другу и, по сути, талдычат об одном и том же. Тут и DIP, и SRP, и точка входа
Встреча пройдёт в дискорд, там можно прям общаться в процессе изучени/рассмотрения темы.
ДС: https://discord.gg/TNT28W8y
В ютубе будет трансляция. И возможно даже сохранится.
Ютуб канал: https://www.youtube.com/@indiegamemill
Приходите, буду рад 🙂
Discord
Join the Indie Game Mill Discord Server!
Check out the Indie Game Mill community on Discord - hang out with 174 other members and enjoy free voice and text chat.
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
По проекту Пыточной:
- карта мира стала больше;
- на уровне появилась мини-карта;
- после перетаскивания добавил инерцию;
- добавлена возможность отображать объекты игры на миникарте (в видео нет, записывал до того, как реализовал);
- в верикальном режиме база игрока снизу, в горизонтальном слева;
- клики по миникарте мгновенно переносят камеру в соответсвующую точку в мире.
Немного ещё дорефакторю и начну переходить к геймплею
- карта мира стала больше;
- на уровне появилась мини-карта;
- после перетаскивания добавил инерцию;
- добавлена возможность отображать объекты игры на миникарте (в видео нет, записывал до того, как реализовал);
- в верикальном режиме база игрока снизу, в горизонтальном слева;
- клики по миникарте мгновенно переносят камеру в соответсвующую точку в мире.
Немного ещё дорефакторю и начну переходить к геймплею
🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
А, ну вот с компа запись
This media is not supported in your browser
VIEW IN TELEGRAM
Вчера общался со знакомым разрабом. Обсуждали, как реализовать инвентарь. Я в голове сложил красивый вариант (потому что я умный), но не смог объяснить, как это должно работать (потому что я тупой). Поэтому просто сел и сделал.
Как? Никаких IPointerDownHandler и прочих юньковских приколов. Написал свою инпут систему, свою систему детекции UI, подружил с системой, что отвечает за начало, сам процесс и конец перетаскивания, управляет как фасад другими системами, которые перекрашивают слоты, устанавливают предмет в инвентарь, сбрасывают позицию и так далее. Вот, допилил. Забавно, что мне это никуда не нужно и в целом инвентарь я пилил впервые, хотя давно хотелось запилить какой-нидь инвентарь, но не было повода (правда, и сейчас нет). Так что раз уж сделал, тут же отрефакторил по SOLID. Будет лежать неплохая заготовка на будущее
Как? Никаких IPointerDownHandler и прочих юньковских приколов. Написал свою инпут систему, свою систему детекции UI, подружил с системой, что отвечает за начало, сам процесс и конец перетаскивания, управляет как фасад другими системами, которые перекрашивают слоты, устанавливают предмет в инвентарь, сбрасывают позицию и так далее. Вот, допилил. Забавно, что мне это никуда не нужно и в целом инвентарь я пилил впервые, хотя давно хотелось запилить какой-нидь инвентарь, но не было повода (правда, и сейчас нет). Так что раз уж сделал, тут же отрефакторил по SOLID. Будет лежать неплохая заготовка на будущее
🔥6
Кстати, я не знаю, по какой игре мы смотрели инвентарь, чтобы повторить, но там при захвате предмет прыгал в центр курсора, что вообще некрасиво. Я сделал с компенсацией отступа курсора от центра предмета.
Самое забавное, что это всё было продумано ещё на этапе планирования в голове и по итогу задумка прекрасно реализовалась в коде без дополнительных корректировок 🙂
Самое забавное, что это всё было продумано ещё на этапе планирования в голове и по итогу задумка прекрасно реализовалась в коде без дополнительных корректировок 🙂
🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
Вывожу кукиш вместо иконки валюты, если недостаточно средств )
😁4