Godot. Путь Алкаша.VisibilityNotifier2D
Всем привет, я буду сразу в заголовке указывать, чтобы было понятно, в какую сторону содержимое скатится)
Но тут прям и тематика подходит как раз, кода будет, самый минимум, все как я люблю)
Не помню писал про эту ноду или нет, но даже если и писал, повториться будет не зазорно. Очень удобная и утилитарная нода.
https://docs.godotengine.org/ru/stable/classes/class_visibil...
Разбирать буду сразу на примере реальной задачи, как делаю для себя. Без всяких там ужимок про хороший код и тд, для себя я знаю приблизительно конечную цель, чего мне лишний раз потеть.
У меня согласно диздоку, сверху должны падать всякие кирпичи, бутылки, огрызки, окурки, случайно дожившие эмо и тд.
Гиперкеж про дрона доставляющего посылки в район низкой социальной ответственности.
Дом не бесконечен в высоту и имеет крышу, которую можно увидеть если долететь. Так что из воздуха падать ничего не должно. Можно конечно сделать анимацию, как из окна высовывается очередной негодяй и бросает мусор, но это дорого, одна анимация дороже всей игры получится. Можно уйти в дичь и запилить летающую тарелку или Байдена на вертолете, все и так знают, что они основной источник мусора под балконами.
Но можно сделать проще и спавнить объекты, только тогда, когда ещё не видно крыши и игрок не видит источник спавна, но его наличие там подразумевается. Так и в реальности обычно происходит, окурок падает, голову поднимешь, а там уже и нет никого.
Ну хватил лирики, начну делать.
Теперь доработаем сцену до нужных кондиций и проверим.
Переходим на закладку сигналы.
Теперь подвяжем сигналы к скрипту.
Так же делаем со вторым сигналом.
Кода минимум, но это эталонная реализация паттерна Observer, ладно проверим, работает или нет.
Ну и максимально быстро тогда покажу код бутылки, не буду сейчас доделывать коллизии, просто пусть вниз падает.
И код фабрики, тут будет с небольшим изъебом, это задел на следующий пост оставлю.
Все у меня уже мысли путаются и на одной картинке сложно объяснить все что хотел, код тоже простой, таймер спавнит сигнал, если сейчас видно фабрику, то ничего не спавнится, и наоборот.
Почему поставил ноду таймер, а не указал время спавна в export var?? Да просто так меньше кода. Ну и там в рандомном диапазоне выбирается позиция по x для бутылки, проще уже некуда казалось бы) Но на самом деле, пока писал, понял что можно ещё проще, просто по сигналу нотифаера стопать таймер, а потом снова включать, ещё меньше кода будет.
Я побольше акцентировал внимание на сигналах, да просто потому что это кайфовая тема, событийно-ориентированное программирование, на мой взгляд наилучшим образом подходит для геймдева, оно логичное и понятное, оно очень понятно даже далеким от программирования людям. Ну и я не использую никаких IDE, да просто потому что базовый редактор, он гораздо больше подходит для удобочитаемости кода. Да тут я кликнул два раз мышкой и вижу зеленые фитюльки, мне они нагляднее и понятнее чем self.connected(self.... и уж это гораздо понятнее новичкам. Засим прощаюсь, всем GODOT!!
Если есть вопросы, пожелания то велкам в чатик сообщества. https://t.me/Godot_pikabu
Впрочем сейчас он превращается в спонтанный чат разработки pve-coop_платформера в 3D на базе Godot, но там есть по настоящему умные люди, которые могут подсказать дельные вещи.
UPD. Вот алкашина-то, даже не залил видео с бутылками падающими)
ну а хуле у себя работает и нормас, чего о других думать, было бы грустно если бы не было так смешно))