Войти
ФлеймФорумПроЭкты

Жаба-гринд-2д

Страницы: 1 2 3 4 Следующая »
#0
(Правка: 23 мая 2020, 16:02) 18:25, 22 фев. 2020

Игра бесплатная, открытые исходники.
Вникай и делай свою игру, поверх моей.

(наш герой-попрыгунчик - это типаж робота под наименованием "жаба")

Линк на картинку

Скачать маленький движок-редактор Годот (не требует установки).
https://godotengine.org/

И открыть в нём вот эти исходники игры (любой архив нижэ)..

Малый архив 105-й версии
архив 106-ая версия
Архив 107-ая версия
версия 108
версия 110

версия 111 (win lin src) 40mb
Есть папка linux32 ( готовый файл игры - годот не требуется).
Есть папка win32 ( готовый файл игры - годот не требуется).

версия 112 (src) 10mb
v113 (src)


//

// ---
На основе дву-мерной демо движка Godot:
Dynamic Character Control-Based Platformer
(папка в архиве.. physics_platformer).
https://godotengine.org/asset-library/asset/119

Тюнинговать, и напихать туда всего - можт быть будет что-то вменяемое.

// Не исключено, что на Debian10 всё нормально, но у меня,
// линукс Debian9 --> Не запускается Godot_v3_2.
// Поэтому мои слова лиш про версию Godot_v3_1.


#1
18:25, 22 фев. 2020

// ---
Все эти наброски - туман.

Что делаем в игре..

1. собираем начальные плюшки (пушку, патроны, гранаты).
Всё доступное, чтобы продолжать повышать силу (убойную и экономическую).

2. пробуем разгадать замысел автора по поводу последовательности
начальных испытаний - успех в очередном задании дожн повышать шансы
прохождения других испытаний. Важная деталь - некоторые испытания
могут быть стабильными (как автор выставил - ждут игрока), а некоторые
испытания могут усиливать себя, или ослаблять себя (и подарок слабей).
// Не забываем про аркадность - некоторые игроки могут без ранений играть.


= коридор, без помех - разгончик
(новичков заставить получить рану - показать, что это не страшно)
(взять пару преметов, прочитать пару весточек).
У игрока есть изначальное колво денег,
и сразу есть разовые монетки, в этом коридоре.


= отвил не-обязательный - включить генератор запасных броне-пластинок
(это для тех, кто плохо _прыгает_избегает аркадных пуль)
Опытным игрокам пофигу на эти доп-хит-поинты-пластинки, но можно
их чуток закупить, чтобы в самом начале полегче было.
// Не исключено, что прыжок зажатый - надо развивать.

Колво броне-пластинок _накапливается - это просто пульт с числом.
Если прыгать и стрелять в значок руки, над пультом, то игрок пытается
обменять свой счётчик золота на один доп-хит-поинт - механика
владения доп-броне-пластинками - это отдельное свойство - наверно
можно прокачивать - сначала можт быть лиш один доп-хит, но
он на себя забирает весь урон пульки, что часто выгодно, если
игрок сражается против сильного врага, надеясь избежать все
пульки своим движэнием, но если вдруг какая-то пулька его
заденет, то там урон большэ, чем норм-хит-бар игрока - поэтому,
даж один такой броне-поинт можт помочь одолеть испытания,
где можно получить ваншот.

// Можно развивать норм-хит-бар, в количестве, и в реген-рэйтинге.
//
// Наверно, можно включить талант, который каждое косание монетки,
// отлечивает один нормальный хит-поинт - если много монет собирать,
// то можно отлечиваться - учитывая, что многие монетки респаунятся.


= бег в сторону основного лабиринта - убиваем легких врагов
(медлено идут, по нам не стреляют) - читаем пару весточек,
и вникаем в пару первых заданий
(что делать, чтобы тригеры сработали, чтобы выйти на продолжэние)

#2
18:25, 22 фев. 2020


= далее много развилок - можно пробежать в отвил, чтобы там взять
талант-чип или предмет _золотой_дух
// оформить можно, как черепок с двумя золотыми звёздами, вместо глаз.

Такой талант можно не брать (наверно, он вредный), но он сильно помогает,
потому-что _капает монетки от себя, и само-прокачивается от собирания
монеток - каждые 100 монет, он увеличивает свою _капельницу на монетку.
Тоесть, сначала 5 монет, каждые 10 сек.

(наверно, этот чип-талант полностью блокирует работу регена хит-поинтов)
// А в каком-то отдельном сценарии, аля дополнение игры, можно привязать
// работу этого таланта к _плавному_повышэнию силы главной злодейки -
// безпошядная жадность.
// Тоесть, не исключено, что чипы можно отключать в спец-местах,
// которые отмечены аля пульт_пере_распределитель талантов-чипов.

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

// Около узла_денег - тупик очень аркадный, и там _накапливается хит-бар
// псевдо-боса (страж узла) - сразу его не победить, наверно - какой-то
// предмет прям обязательно нужн - так-что сначала добыть, а потом
// в этот трудный тупик совать нос - фигово, если игрок будет
// туда бегать и подыхать, не понимая, что нет нужного предмета.

Если игрок не хочет поднимать _авто_экономику (добрый моралист),
то его доход будет зависеть от двух - собирать монетки,
и не делать ошыбок, чтобы не покупать компенсаторы этих ошыбок
(есть пре-компенсаторы - это доп-хит-поинты перед боем)
(есть норм компенсаторы - это лечилки после боя).
// Ну и нельзя забывать про исполнение заданий - могут дать
// любой предмет (оговореный, или сюрприз), вместе с деньгами,
// либо тупо только деньги за задание дадут.


Ахтунг - сомнительно внедрять мораль в пиф-паф-платформер.
И диалоги _плохой_хорошый мне тож не нравились никогда.

#3
18:26, 22 фев. 2020

= в разных местах, расположыть пульты, которые продают что-то
одно - патроны или гранаты, или типа того ...
// Есть пульты, которые надо _включить, и они будут накапливать.
// Магазин-пульты не накапливают предметы, но у них есть
// откат выдачи - купили гранату - откат минута - каждую минуту
// покупай _бесконечно - откат считаем _у_игрока - масив откатов,
// ставим номер купленого предмета, и колво секунд мотаем вниз.
// Тоесть, даж переход меж комнатами не сбрасывает откаты - магазин
// другой, а гранату всё-равно нам не хочет продавать. гы-гы.

Патроны - зажигательные или усыплялки (ну и простые патроны).
Зажигалки отличны тем, что есть враги с _огне_элементом - по ним
огне-патроны _слабо_ранят, либо лечат, если враг большэ 50 процентов
состоит из элемента огня.
Усыплялки - слабые, тормозят _жывых врагов - есть шанс вогнать
в сон - 3 секунды игнор урона, а потом - любой урон их _разбудит,
а если не разбудили, то 10 секунд они спят - иногда удобно.

// Но можно не усложнять пальбу - достаточно чтобы шанс торможэния
// срабатывал - тогда можно их ледяными патронами называть.
// Хотя не нужно - лёд слишком против огня не ясен - вроде-бы
// это противо-элемент, но я не верю, что лёд эфективен против огня.
// Поэтому не надо ледяных патронов - достаточно неких _тормозных,
// чтобы не пересекать тему элементов - лиш один элемент = огонь.


= пуляем во врагов - встречаем коридор, где трудно - надо что-то особое.
Шиты какие-нить или псевдо-расходник.
Вобшем, при правильном использовании, эта фигня отвлекает,
и вдобавок, можно эти _манекены_отвлекалки оставлять себе
на последних хит-поинтах - забирать в рюкзак, и они там отрегенят
себя, но сам факт _постановки_манекена идёт отдельным откатом, и факт
_подобрали_манекен тож идёт отдельным откатом. Либо сделать это
одним событием _работа_с_манекеном - один откат будет, и когда
мы взяли манекен обратно в рюкзак - откат обновился.
// Тоесть, абилка _выставления_манекена требует, чтобы отката не было,
// а вот возможность _взять_манекен, откат не смотрит, но его обновляет.


(снова накапливаем кучу деталей - слишком сложно такое делать).

#4
18:26, 22 фев. 2020


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

= тупая турель - пукает прямые невидимые пули по горизонтали
(игрок их не видит, чтобы не отвлекался, но они летят).
// Попадание пулей игрока (пуля только от игрока) должно менять
// направ - два варианта.
Чтобы игрок не пережывал о вылете пуль, надо обязательно
вспыхивать около дула, мол наша пуля вышла, хоть её и не видно.

= тупой_дрон (арканоидно отражается от стен - летает)
// Собирает на свой хит-бар пульки врагов любых.
// Иногда стреляет миговой пулькой во врага, если тот близко.
// Не чувствует тела врагов ... Возможно, ранит себя о любые лужы.
// (игрок тож можт тормозную лужу образовать).

= тупой манекен - бросаем рядом с героем - некоторые враги
по манекену будут пулять свои рокеты и пульки.
(будут толкать его, и замедлять своё движэние).
Манекен можно двигать, упираясь в него, замедляя своё движэние.
Если попасть пулькой игрока по манекену - это возврат манекена.
(манекен можно юзать, чтобы прыгать на высокие плато - подставка).

// После этого, надо попасть пулькой по манекену - как-будто мы
// его подняли к себе в сумку - можно снова его выставить. гы-гы.
// Засчитывать лиш _обычные пульки - если надо стрелять во врагов рядом
// с манекеном, и не убирать манекен - долби альтэрнативными пульками.

У всех верхних предметов, надо добавить хит-бар.
Не исключено, что можно находить _детали, которые повысят
хит-бар конкретному предмету (дрону или простой турели).
Тоесть, все верхние - это расходники (они все стаковые),
но за счёт хит-бара, можно экономить колво в стаке.
И при этом, _весь_стак всегда идёт в работу, когда из сумки
выбрасываем - надо быть внимательным - вовремя делить стак
турели, который мы _выкинем, и не вернём. Обычно, надо
отделить единичку и её выкинуть, но иногда, врагов много,
и надо выкинуть сразу 5 штук - хит-бар кончается и само-обновляется,
и наша турель долшэ будет держать _направление от толпы врагов.
// сложности - повсюду сложности

Не исключено, что у альтэр-атаки будет свой слот в сумке.
// игрок пере-ставляет предметы в сумке - первый слот - закрепить там
// не-убираемый предмет _генератор_болтерных_пулек, и рядом особый
// слот - для пуль альтэр-атаки (кнопка-команда _альтэр_атака).
Ставим в этот слот Гранаты, или можно поставить
бутылку с тормозной лужэй, либо поставить туда стак рокет ...
Вобшем, любые патроны туда можно поставить.
И обычная атака пусть всегда пуляет бесплатными пульками.
// Откат каждого вида пулек свой.
// Вероятно, каждый откат можно отдельно прокачать.
// Поэтому у каждого отката должн быть минимум-сейчас-максимум.
// Максимум надо иметь, если какой-то враг _проклял некий откат
// (или проклял все откаты героя) - удвоеное время ...

= патроны огня.
= патроны тормозухи (или отравления)
= рокеты (полу-само-наводка)
= гранаты (по местности бахаем)
= гранаты лужы (бутылка лужы - возможно, ядовитая зеленая лужа)
// для всех ядовитая - для игрока тож, но ранит не сильно, а
// тормозит всех одинаково, и наверно, прыжок блокирует.


Никаких замедлений времени не надо - слишком трудно реализовать.

Но вот некую шок-волну надо-бы как-то прилепить.
Тоесть, часто бывают моменты, когда враги близко, и пульки
не сносят их - зажал команду _вниз и пальнул норм-атакой - шок-волна
отбросила ближних врагов. А если зажать _вниз + альтэ-атака, то
какой-то второй особый боевой приёмчик - наверно, это зависит от
чип-талантов главного героя - надо найти-экипировать подобное.

#5
18:27, 22 фев. 2020

// --- обзор демо-платформера в годоте..

= Cтрельба не работает, если зажать влево + прыжок.
Пробел не хотят опознавать - значит, надо сменить кнопку стрельбы.
Например, Контрл выставил - нормально работает.


визуал = тайлы - прорехи - если убрать фильтр, то чуть лучшэ.
Значит виновата не-правильная оригинальная текстура для тайлов.
Не исключаю, что отдельные текстуры для каждого тайла могут порешать
эту проблему. Либо отредактировать текстуру, сделав _рамочки вокруг
тайла, с повтором крайних пикселей. Любая фильтрация станет
доступна - соседний пиксель края всегда будет _повтором края.

визуал = ноги героя чуток нижэ. Там у него красный триуг колизии вышэ,
поэтому провал ног. И вдобавок тело не центрировано (голова в центре),
и при развороте, ноги слегка вылезают за _траву, на склонах.

визуал = ноги врагов-панцирей вышэ, чем у героя.
Убрал им скорость движухи, и тормознул реакцию на колизию.
Теперь они вмеру правдиво двигают лапы, по отношэнию к движухе.
// И можно теперь их толкать - баран с бараном упираются.

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

Часть панцирей - мирная - это не напрягает, и ожывляет - косяки
забавные могут быть. И вдобавок, на них можно тригеры внедрять
(если игрок коснулся, или если убили панциря)
(или если панциря дотолкали до спец-сенсора).
(изменить цвет текстуры для мирных)

Допустим, красные будут, как шыпастые, и будут ранить,
но не надо делать _толкания_от_ранения.

Некий враг, через интэрвал, выстреливает шыпы, во все стороны.

Создать статичный спрайт-пульсарчик - из него летят
снаряды, которые медлено подкручивают угол на главного героя.
// снаряды не чуют никаких колизий, но само-погибают, от таймера.

#6
18:28, 22 фев. 2020


= Если смотреть на фон, то там розовые и жолтые яблоки, потому-что
пиксель вдали, как кулак вблизи ...
Тоесть, можно подобрать текстур кустов с ягодами, и понатыкать таких
спрайтов перед героем, как-бы между камерой и платформами.
Подобным образом, найти всякие пятна-размывы, чтобы натыкать поверх
волн земельных пластов.
// Сами волны забавны. Если делать подобный набор тайлов, то
// волну можно нарисовать чуть острей, но всё-равно плавными.


= Внедрил герою мини-откат прыжка - игроцкий вариант получился.

= рычаг-качалка из демо - не нужна - не вписывается в мой стиль.
// Рампа-наклон тож под негативным взглядом, потому-что
// сделал панцирям наклон, но панцирь явно вышэ склона ползёт.


= Добавил всему тайл-мэпу этапчика - _прыгучесть для выталкивания.

В демо есть прямуг, который пропускает в одну сторону.
Он глючит, конечно.
Возможно, там надо регулировать _маргин с умолчательной единицы до 128.

Но и на умолчанке забавно - героя почти не пускают, а вот пульки
часто с друг-другом колбасит, и одна проскакивает иногда _за_клапан.

Можно делать точ-филды для пулек _за_клапаном - чуток подолби
клавишу стрельбы - какая-нить из пулек проскочит, и активирует.
Но важно - нельзя так делать с обязательными точ-филдами - только
всякие _сайд_квэсты.

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

Тоесть, если нужэн клапан - надо, чтобы его квад на пиксель
проникал в другие колижны (колижны тайлов).
Пропускная сторона, как я понял - это угол поворота.

Жэлательно, аля решотки изобразить, если это боковые клапаны.

#7
18:29, 22 фев. 2020


= возможно, откат выстрела сделать, но чтобы была возможность
много выстрелов делать - пуле-стамину придумать, чтобы угасала
после какого-то уровня частых выстрелов.
Допустим, с интервалом срабатывает тригер - на него можно любое повесить.
Как-минимум, отнимать монетки - нет монетки при этом тригере - не
вылетает выстрел.
Пуле-стамина быстро регенится.
// Эти пульки друг-на-друга влияют - куда-то улетают - на этом
// можно делать всякие точ-филды для пуль _не_доступные_по_прямой.

Есть пример задачи - герой падает вправо, со старта, и находится
нижэ, чем первый враг - надо стрелять, чтобы пульки поднялись на этаж вышэ.
Вобшем, такие приколы лиш _пробами надо находить и регулировать.

#8
18:29, 22 фев. 2020

// --- вечер на исправление тайлов..
Двойной клик на TilesetEdit.tscn
Отрылась сцена, где готовили тайлы.
Всем чилдам базовой ноды (Node) (спрайтам: Floor, Edge ...)
выставить галочку Region:Enabled = true, и тогда будет виден чистый
набор тайлов без отрисовки лишнего.

Открываем опорную текстуру tiles_demo.png внутри проги GIMP.
Выставляем меню Вид: Показать сетку = Да.
Заходим в настройку Изображэние: Настроить сетку - выставляем 64*64.
Видим, что тайлы плотные - нужно расшырять ...

В меню Изображэние: Размер холста, убираем линковку шыри и высоты,
и ставим высоту 512 - следим, чтобы пустое место было внизу - Готово.
После этого, делаем поправку Слой: Слой к размеру изображэния,
чтобы удобней было. Затем, копируем слой, и отключаем его видимость,
для визуальной сохранки. Между слоями, создаём новый слой,
где можно рисовать стрелочки переноса тайлов на новые места.
// Изображэние: Режим: RGB
// Я подумал, что индексный цвет мне не подходит.
// Добавлю градиента, потом - будет чуток пожывей.

В редакторе годота, каждый клик по спрайтам (Floor, Edge ...)
откроет внизу доп-окошко, где хорошо видно рамочку тайла поверх
полной текстуры - мы ясно видим тайлы - когда будет готов
новый расклад тайлов, нам нужно будет изменить позицию Региона
тем тайлам, которые попали в новое место.


Подготовка завершэна. Цель - перенос альфа-зависимых тайлов
на свободное место. И докраска краёв плотных тайлов, которые
граничат с пустым местом.

Тайл _солид (позиция 0, 64) - хочу его на позицию 64, 128 + 64 (192).
Увеличиваю масштаб, чтобы точно выделить нужный кусок. Копирую,
и вставляю на нужное место - меняю слой - выбираю карандаш (черный),
и пишу кое-как _солид, чтобы отметить новый тайл. Потом, вокруг
этого тайла вставляю 5 таких тайлов
(вставил, подвинул, якорь - прикрепить плаваюший слой).
Отметил вертикаль - убрал все новые пикселя, кроме правого края.
Отметил горизонталь, под новым солидом, и убрал почти всё, кроме
тонкого края внизу - надо помнить, что там как-бы занято - можно
нарисовать красную черту, в слое _пояснялок.

Прокликиваем в годоте тайлы, и видим, что справа, есть двойка
Ceiling
CeilingWall
Как-минимум, CeilingWall можно переставить ...
Там ясно видно, что перенести надо все тайлы, справа, от дерева.
// Верхний тайл (над Ceiling) не используют, хотя он брат Ceiling,
// и его можно переставить, и внедрить, как новый тайл.
// Слева от Ceiling некий переходный тайл - пусть будет не используемым.

Тайл (над Ceiling) переносим под тайл Рамп, слева приделываем то,
что было справа от дерева, а справа - Ceiling & CeilingWall.
Но всё-таки, всю эту кучку новых тайлов сдвигаем на 2 тайла вправо.
Тайл (над Ceiling) - надо убрать два пикселя в самом низу, чтобы
они не могли мелкать, при отрисовке WallDeco.
// Можно вернуть нижний край, под _солид.

Ставлю PlatformEdge над CeilingWall.
Но сдвигаю PlatformEdge на тайл правей, а над CeilingWall
копирую верхний край этого-жэ тайла.
И левый край PlatformEdge копирую влево.

PlatformFloor переносим вниз.
Floor копируем вниз.
И вокруг них края дублируем.

Floor( 64, 6 * 64 = 384)
солид( 64, 3 * 64 = 192)
PlatformFloor( 6 * 64 = 384, 6 * 64 = 384)
PlatformEdge( 7 * 64 = 448, 3 * 64 = 192)
WallDeco( 3 * 64 = 192, 5 * 64 = 320)
CeilingWall( 6 * 64 = 384, 4 * 64 = 256)
Ceiling( 5 * 64 = 320, 4 * 64 = 256)
Ceiling2( 4 * 64 = 256, 4 * 64 = 256) // оставить без колизий.

// При экспорте нового тайл-мэпа, порядок тайлов изменился,
// потому-что добавил тайл копированием, и забыл его вниз поставить.
// Снова загрузил - переставил, сохранил сделал ре-экспорт без _мегрэ,
// и всё вернулось - старый тайл-мэп исправился.

#9
23:34, 22 фев. 2020

Не хватило терпения на чтение.
Структурировать бы все это и по спойлерам разложить.

#10
0:39, 23 фев. 2020

programina
гы-гы.
Не надо ничего читать здесь - всё сыро и мутно :)
Не отвлекайся от своего проекта - я наблюдаю и радуюсь твоим успехам.

#11
4:12, 23 фев. 2020

я тоже проскроллил сразу на комменты

#12
21:17, 23 фев. 2020

// ---
// ночной цвет - для рыжого тайлсета норм. гы-гы
7bb8ff


// --- надо сделать такую связку базовых нод, чтобы пост-обработка была.
Создаём сцену - там базовую ноду выбираем, и добавляем вьюпорт и прямуг.
Эту сцену сохраним, как Main.tscn и сделаем её умолчанкой, чтобы
вся игра начиналась с неё. В меню, можно сделать кнопки, которые
будут загружать нужный этапчик - ту сцену, которая изначально в демо была.

Node
+ Viewport2 // он сам найдёт камеру в этапе // он вышэ, чем TextureRect
++ сюда загрузка ноды этапа (Viewport2.add_child этап_такой_то).
+ TextureRect // текстуру --> Viewport2 // в материал, шэйдэр лепить.
+ здесь панель индикаторов игры.
+ здесь панэль меню-опций.
// панэли друг-друга отключают, наверно.

В каждом этапе повторяем строение изначального этапа - обязательно
подгрузить готовую сцену Player, и проявить заботу о нодах _телепортов.

Чтобы редактировать этап - надо открыть его сцену в годот-редакторе.
А чтобы его тэстировать - запуск игры, и надо нажать кнопку меню ...
Но меню долго делать, и поэтому можно тупо менять название
нужного этапа в скрипте Main.gd

var current_scene = null

func _ready(): # проца, которую скрипт вызывает автоматически.
  var s = ResourceLoader.load( "Stage1.tscn") # <---- вот здесь.

  if not s: # не загрузилось
    print( "error")
    get_tree().quit() # фаталити, закрываемся
    return
  current_scene = s.instance()
  $Viewport2.add_child( current_scene)
  #get_tree().set_current_scene( current_scene) ???
  
  // здесь можно найти ноду Player, и добавить ему какой-нить предмет,
  // который выгодно иметь на этом этапчике.
#---------

#13
22:29, 24 фев. 2020

Возникла проблема со свойством include_scene_to_parent,
но показалось, что надо пробануть краткий вариант названия.
Ага - ошыбка ушла - всё заработало,
хоть и осталось мутное предупреждение.
Сделал _экспорт (подобие компиляции) == всё работает.
Буду считать, что готова версия 101.

Код важных файлов таков..

# file Main.gd
extends Node2D

onready var stage_root = $Viewport2

func _ready():
  g1.include_scene_to = stage_root # warning, но пофиг

  # для нужд быстрого тэстирования, грузим этап..
  g1.include_scene( "Stage1.tscn", 1)
#---------

# file global.gd  // call g1.an()
extends Node


var current_scene = null # не используем.


var position1_name := "-"
var position2_name := "-"
var camera_low_name := "-" # нода для лимита движухи камеры вниз.
var camera_rit_name := "-" # нода для лимита движухи камеры вправо.
var my_scene = null

var include_scene_to = null # private. // include_scene_to.add( my_scene)
#var include_scene_to_parent == error
# Наверно, нельзя использовать длиные имена свойств - их перестают видеть.




func _ready():
  var root = get_tree().get_root()
  current_scene = root.get_child( root.get_child_count() -1)
  # get_tree().set_current_scene( current_scene) ???

#---------




func current_scene_load( path):
  call_deferred( "_deferred_current_scene_load", path)
#---------


func _deferred_current_scene_load( path):
  if current_scene:
    current_scene.free()
  var s = ResourceLoader.load( path)
  if not s:
    return
  current_scene = s.instance()
  get_tree().get_root().add_child( current_scene)
  get_tree().set_current_scene( current_scene)
#---------




func include_scene( path, err_is_fatal: int = 0):
  call_deferred( "_deferred_include_scene", path, err_is_fatal)
#---------


func _deferred_include_scene( path, err_is_fatal):
  if not include_scene_to:
    print( "ERR: init include_scene_to")
    if err_is_fatal:
      get_tree().quit()
    return

  var s = ResourceLoader.load( path)
  if not s:
    print( "ERR: location_name not found")
    if err_is_fatal:
      get_tree().quit()
    return

  if my_scene != null:
    my_scene.free()

  my_scene = s.instance()
  include_scene_to.add_child( my_scene) # it is not current_scene.


  # --- extra
  var b = my_scene
  if position1_name != "-":
    var n = b.find_node( position1_name)
    var a = b.find_node( "Player")
    if a and n:
      a.position = n.position

  var camera = b.find_node( "Camera") # Camera2D
  if camera:
    if position2_name != "-":
      var n = b.find_node( position2_name)
      if n:
        camera.position = n.position

    if camera_low_name != "-":
      var n = b.find_node( camera_low_name)
      if n:
        camera.limit_bottom = n.position.y
    if camera_rit_name != "-":
      var n = b.find_node( camera_rit_name)
      if n:
        camera.limit_right = n.position.x
  else:
    print( "not found Camera")
#---------

#14
22:51, 24 фев. 2020
# file coin_exit.gd
extends Area2D
class_name Coin_Exit # точ-филд выхода из локации

var taken = false
export var next_name := "an" # next location scene_name.
export var pos_name := "-" # название ноды, куда поставить игрока.
export var vis_name := "-" # название ноды, куда поставить камеру.
export var vis_low_name := "-" # название ноды, чтобы ограничить камеру вниз.
export var vis_rit_name := "-" # название ноды, чтобы ограничить камеру вправо.

func _on_body_enter( body):
  if not taken and body is Player: # не_взято и косание_игрока
  #{
    ($Anim as AnimationPlayer).play( "taken") # "fade_screen"
    taken = true # взято
    g1.position1_name = pos_name
    g1.position2_name = vis_name

    g1.camera_low_name = vis_low_name
    g1.camera_rit_name = vis_rit_name

    g1.include_scene( next_name)
  #}
#---------
Страницы: 1 2 3 4 Следующая »
ФлеймФорумПроЭкты