Godot путь новичка. MainMenu ч4. Рефакторинг(Предпосылки)

Добрый вечер, мои дорогие подписчики. Это продолжение поста Godot Путь новичка. Main menu ч3. Рефакторинг(Теория)

Уже можно сказать по традиции, немного поплачусь и изложу свои соображения, по происходящему. Во-первых хочется выразить огромную благодарность тем кто читает, это действительно дает огромный заряд мотивации и не только. Мне уже доводилось слышать теорию, что если хочешь что-то изучить, попробуй начать делиться своим опытом. Это по аналогии с очень хорошим приемом, задавать вопрос уточке. Как только по хорошему сформулировал вопрос для уточки, уже можно бежать к техлиду и спрашивать, как сделать эту приблуду, а пока бежишь приходит осознание, что решение-то вот же оно, прямо в вопросе и было) И стоишь как дурак, перед техлидом, все осознавший, благодаришь за помощь, а он знай себе хитро улыбается, ни слова, не сказав. Он то понял, что ты понял и безмерно этому рад, поскольку теперь ты не мешаешь ему подбирать билд для вечернего рейда, на спину смертокрыла. Так и тут, в меру сил своих пытаясь что-то объяснить, на самом деле сам учусь очень радостными темпами, прям инсайт за инсайтом.


Во-вторых, появилась какая-то размеренность и я бы даже сказал неотвратимость, все делается медленно и неспеша, но регулярно. "Медленно как меласса течёт" -  Джон Рут Вешатель. Проникся этим персонажем, да и фильм обожаю. Другой бы убил и дело с концом, но если за дело берется Джон Рут, будь уверенна тебя повесят. В этом на самом деле очень много смысла, медленно, неторопливо, очень аккуратно и вдумчиво, но он всегда доводит дело до конца и поэтому он лучший, это приносит ему плоды и оплата у него одна из самых высоких. С другой стороны шайка стартаперов, наплодивших кучу простых и топорных решений, все же выпилила его. Количество переходит в качество рано или поздно. Как итог оба подхода хороши, что выбрать каждый решает сам) Но если количества было бы не достаточно, для перехода в качество, то они могли выгореть раньше, чем достигли результата. По факту так и произошло, локальный успех был достигнут(победа в джеме, релиз с минимальными продажами), но конечная цель(хит хитовый) достигнута не была, все выгорели. В идеале желательно, чтобы был на проекте один медленный вдумчивый сеньор-архитектор  и шайка спринтеров, пускай себе там скрамят, покер на карточках устраивают, прокрастинируют, любой каприз, лишь бы задачи удобоваримо закрывались.


К чему это написал, вот сейчас у меня прям уверенность, что сделаю проект. Очень простой и маленький, вот в прямом эфире так сказать. Ориентировочный срок - три года на разработку, ну по хорошему любую оценку программиста надо бы умножать на три. 9 лет меня тоже устраивает в принципе. Никакой гонки, никакого выгорания, а это важная часть. Важнейшая, никакие технические навыки и красота картинки не спасут проект, если его главный креакл выгорит и забьет. Потому и спешить не стану, в целом изначально и говорил на какую аудиторию буду ориентироваться, 15 и 40 лет, одним ещё некуда спешить, а вторым уже некуда.

Work-life balance соблюден и можно по настоящему расслабиться и не просто делать игрульку, а получать настоящее удовольствие от самого процесса, наплевав на мнение хейтеров и достигаторов. Когда нет цели, а есть только путь, то двигаться можно расслабленно и с удовольствием, любуясь окружающими пейзажами и своим гавнокодом. Ведь даже если он плохой, то все равно такой миленький и родненький, когда работает конечно)) Не выгорайте, если сложное что-то делаете и не получается, просто забейте, подумайте можно ли это не делать, а если нужно, то как можно упростить. Или просто забейте, купите скайрим ещё разок или ведьмака 3го, а потом внезапно посреди подземелья, только квен наложил и бац, вот же оно решение, в три часа ночи бежишь к компу, что-то пробуешь)) Красота)


Ну ладно, теперь освежим воспоминания, чего там сын наделал, напомню


https://cs14.pikabu.ru/post_img/2021/08/03/8/162799217811092...

Godot путь новичка. MainMenu ч4. Рефакторинг(Предпосылки) Godot, Godot Engine, Gamedev, Нытье, Шейдеры, Видео, Мат, Длиннопост

вот такая получилась структура по итогу этого поста Gogot путь новичка. Main menu ч2. События кнопки

В целом то даже кажется компактненько, незатейливо и работает же, с ошибкой правда, но работает. Ошибка была оставлена специально и не замечена сыном, ошибку уберу уже в конце поста, это ошибка не в коде, а в самой игровой логике, хотя казалось бы тут логики то +=1.

Но насчет компактности, не поленился с утра и переписал всё тут имеющееся без использования визуальных компонентов, вот все тоже самое, но только кодом. Сцены такие же оставил, Main и раз уж были им добавлены отдельные MainMenu и Game, то их тоже добавил отдельными сценами, наглядно даже получилось. Но экземпляры не перетаскиваются на дерево сцены, а то же кодом создаются инстансы и добавляются на сцену. Вот что получилось.

Сюда поместил копипасту https://docs.google.com/document/d/1-KLvTbmHMokCL0vKoLF4-osd...
вдруг у кого будет желание попробовать, то можно скопировать оттуда в скрипт Main.

А если лень, то вот картиночки.

Godot путь новичка. MainMenu ч4. Рефакторинг(Предпосылки) Godot, Godot Engine, Gamedev, Нытье, Шейдеры, Видео, Мат, Длиннопост
Godot путь новичка. MainMenu ч4. Рефакторинг(Предпосылки) Godot, Godot Engine, Gamedev, Нытье, Шейдеры, Видео, Мат, Длиннопост
Godot путь новичка. MainMenu ч4. Рефакторинг(Предпосылки) Godot, Godot Engine, Gamedev, Нытье, Шейдеры, Видео, Мат, Длиннопост
Godot путь новичка. MainMenu ч4. Рефакторинг(Предпосылки) Godot, Godot Engine, Gamedev, Нытье, Шейдеры, Видео, Мат, Длиннопост

Легко заметить, что функциональность идентична, структура проекта один в один, специально запилил все в один класс, для наглядности, потому что именно так и было сделано все на визуальных компонентах у сына. Так что когда вы создаете новую кнопочку например, через "добавить дочернюю ноду", вы используете запись вида

myButton = Button.new()
add_child(MyButton)
перетаскиваете её по экрану, это равносильно методу myButton.set_position(Vector2(150,200))

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

А чем ниже уровень, тем больше кода, сами можете заметить, что было 15 строчек кода, а стало пиздец. И это ни какой-то абстрактный код для примера, это вполне мог бы быть реально существующий код и он даже мог бы попасть в продакшен, комментарии который я оставил, это мне по ходу написания вспомнились, были у нас такие в репозитории. Разве что кода было бы ещё больше, просто для двух кнопочек. Надо было бы вставить ключи локализации для текстов, добавить тултипы, ну логика была бы чуть посложнее чем +=1. Под условное окошечко используемое в разовом сезонном ивенте с двумя кнопочками, для покупки какой-нибудь недостающей фигулинки и под которое именно сейчас волей геймдизайнеров, ни одно из уже существующих и стандартных не подходит, вполне мог бы быть написан подобный кусок.


Самое интересное, что подобный кусок понятное дело бы не пропустили, сказали бы что у нас вообще-то MVC, ну ка давай переделывай. И вот у нас уже начинает это дело все превращаться не в один класс, а примерно в 10-12. Появляется MainMenuView, MainMenuModel, MainMenuController, аналогично для следующего экрана, для кнопочки прибавляющей 1, как это ни странно, но тоже начинает появляться три класса и ещё появятся вспомогательные классы, которые будут выравнивать интерфейс, в зависимости от ориентации устройства и разрешения экрана. Увлекательных можно вещей наделать конечно. В целом можно даже это переписать для наглядности, ещё бонусом навесить какой-нибудь дурной фреймворк типа PureMVC, кодовая база вырастет ещё втрое как минимум, для поддержания той же функциональности. Самое удивительное, что именно на таких примитивных примерах, всем сразу надо городить очень сложные архитектуры, в этом есть смысл и в этом есть большой смысл именно для программистов.

Сидит фрустрирующий формошлеп на однотипных задачах, надоело ему уже все до чертиков, сложностей не хочется. Подобные задачи и решения вызывают когнитивную легкость с одной стороны для разработчика, навострившегося на них. С другой имеется внешняя запутанность, в них очень непросто разобраться пришедшему со стороны, на создание этого уходит много времени, а это же ещё и как минимум 500 рублей в час. Смысл делать задачу за 15минут, да ещё так, чтобы это было понятно 15-летнему, тогда даже гуманитарии увидят что это же просто, за что тут столько платить тогда? И нет смысла делать колхоз-стайл за два часа, так джуны и студентики увидят, что они делают тоже самое, а получают втрое меньше. А тут и коммит выглядеть будет огого, столь любимую ими активность по гиту можно будет смотреть, эка столько классов, изящная архитектура, низкая связность и тд. Попутно можно на хабре написать статью из серии  "Добавить две кнопки - почему так дорого".


Блин бомбануло меня что-то в процессе написания, пост из радостного, стремительно превращается в разжигающий. Я не об этом собирался вроде написать, а получилось как-то так, с другой стороны если в процессе пришел именно к этому, значит это на текущий момент сильнее всего меня тревожит, избыточная сложность. Да пожалуй не стоит это удалять и переписывать заново, оставлю это как напоминание самому себе, что я на верном пути. У меня сами мысли о MVC вызывают жгучую ненависть ко всему живому, сразу никаких нет сожалений о том что ушел с галер. С другой стороны визуальное программирование по сути и реализует цели MVC, в очень даже полной мере, отделить логику от визуального представления. Представление так оно в явном виде и есть представление, самой графикой все и сделано, сигналами связано с логикой, а логика написана с использованием кода. Кажется все вполне себе гармонично, четенько, опять прихожу к тому что Flash это была великолепная технология, просто опередившая время. А Godot в полной мере наследник этой философии, только ещё прекраснее и лишенный многих проблем. Жизнь чудесна и прекрасна, вспомните сколько прекрасных миниигрушек подарил нам флеш. Kingdom rush, для меня лично, так вообще эталонный тавердефенс, на всех платформах покупал. Люди творили и не заморачивались архитектурой, кодом и прочим, просто творили.


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

Лига Разработчиков Видеоигр

6.8K постов22.2K подписчиков

Добавить пост

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

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

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"