Я очень люблю Valheim. То есть выживалки. С этого все и началось. Зачем вечно делать платформеры и учиться на них, когда...
Когда можно поставить себе челендж сделать за 2 дня скелет выживалки, где ты можешь грабить корованы, добывать ресуры и крафтить новые предметы не зная практически ничего о Godot!!! (то есть можно что-то ломать, оттуда что-то падает, подбирается и отображается в инвентаре, где можно скрафтить по рецепту новый предмет и поставить его на уровне)
Короче...
- Уровень в 1920х1080, перезапускается на R и закрывается на Esc
- На 4-ый день экспортировал проект в Web (GitHub -> Vercel) И ПОЧЕМУ-ТО НЕ РАБОТАЕТ ИНВЕНТАРЬ В ВЕБ БИЛДЕ (WTF)
- Добавил прикольные шрифты
- Есть игрок (
Player,CharacterBody2D) - Игрок нарисован
- Игрок передвигается на WASD
- Игрок смотрит на мышь (крутится его обьект)
- При клике проигрывается анимация удара меча (крутится реальный обьект, анимация не фиктивная)
- Меч это отдельная нода в дереве игрока
- Направление удара меча всегда следует за мышкой (атакует туда, куда смотрит игрок)
- Когда игрок поворачивается во время атаки, то меч перестает следовать его взгляду (иначе это выглядело очень странно)
- Когда меч с чемто соприкасается, то вызывается сигнал атаки
- Есть кусты (
ItemObject,StaticBody2D) - Куст нарисован
- Куст имеет хп
- Куст при попадании мечом получает урон и мигает (
sprite.modulate) - На кусте в Loot Settings можно указать какой предмет будет выпадать (
PackedScene), количество и шанс выпадения - С куста падает дерево в количестве 1-3 с 75% шансом
- Дерево нарисовано и создан ресурс (
Resource,.tres) - Дерево (
Item,Area2D) не имеет коллизиии может быть подобрано игроком(пока нет) - Когда дерево спавнится, то определяется случайная позиция в радиусе от куста, куда движется предмет дерева (tween анимация) - кучка нескольких дропов распределена в радиусе, а не лежит друг на друге
Есть ягода, семя, но они пока ниоткуда не выпадают и не отображаются в игре (Item,Area2D)- Ягода нарисована и создан ресурс
- Семя нарисовано и создан ресурс
- Камень, блюдо из ягод, топор, ой короче кучу всего добавил, даже стены (без логики, просто предметы)
- Подробное описание и доп характеристики в зависимости от кагории, типа у
Tool/Weaponбудетdamageиdurability
- Таблица лута (
LootTable) с конфигом предметов для дропа (ItemRes) - Кусту присваивается таблица, в которой настроено сразу какие вещи будут падать
- Теперь не нужно делать отдельные сцены для каждого нового предмета, тк они автоматически генерируются на базе конфига предмета лута (
ItemRes) и сцены (Item) - У игрока есть радиус сбора предметов
Когда предмет находится в этом радиусе, то пульсирует (hightlight), иначе лежит неподвижно(изменено)- При нажатии кнопки E, все предметы в радиусе сбора подбираются (анимация притягивания к игроку, добавление в инвентарь)
- Можно включить автолут на Q и тогда предметы будут собираться автотически, когда в радиусе сбора
- Когда предмет в радиусе сбора, то обводится белым контуром с плавной анимацией (первый раз писал шейдер, вухуу)
На данном этапе прошло уже 3 дня. Основные сложности заключались в непонимании апихи годота, реализации анимаций и сложнее всего было соединить все сигналы между разными обьектами так, чтобы в момент рендера и появление обьектов, они могли все считаться, было непонятно, когда что отрисовывается, оказалось, что если обьект спавнится внутри Area2D, на которой висит area_entered, то обьект не будет прочитан, а так же различные собственные ошибки в алгоритмах
Короче это сложнее, чем казалось
НО! Будь я опытным разработчиком, то 100% сделал бы все за 2 дня.
- На Tab можно открыть инвентарь
- Когда предметы подбираются, то сразу отображаются в инвентаре
- Каждый предмет находится в слоте, а в углу отображается количество
- (на самом деле это было пиздец как сложно сделать, я столько раз путался, ПОЧЕМУ В GODOT ТАКАЯ ПЛОХАЯ СИСТЕМА ТИПОВ? Я только изза этого ошибки допускал, когда нет проверки, что я передал
Dictionary, а неItemRes) - Нарисовал текстуры для инвентаря (слоты, панель, углы, обводка)
- Анимация, когда добавляется предмет в инвентарь
- Тултипы при наведении на предмет
- Белая обводка и увеличение при наведении на предмет
- Еще одно окно интерфейса
- Рецепты создаются отдельно конфигами (
RecipeRes), как было с лутом - Все рецепты хранятся в услоной бд (
RecipeDB), куда все складывается при запуске игры из файлов в папочке (код скана файлов) - В этот раз узнавал че такое
ScrollContainer,V- и H- BoxContainer(как же игровым движкам не хватает флекса) - В первом рецепте, чтобы сделать каменную стену, нужно 3 дерева и 2 ягоды (так и задумано, все правильно)
- В зависимости от доступности ингредиентов, кнопочка крафта может быть недоступна
- При крафте, искомые предметы удаляются, а новый добавляется (вдруг неочевидно)
короче вот такой вот бутерброд бля жрать хочу ух ебать 6 утра сколько я сидел- Добавил еще кучу рецептов (6-ой день)
Бляя, львиную доли времени занимает понять, как что либо вообще сделать. Порйо я вообще логику и алгоритм не понимаю и долго долго гуглю примеры. А бывает я начинаю чтото писать и потом через пару часов это улетает в stage, потому что хуйня вышла. 8-ой или 9-ый день, забыл. Ебаный Drag & Drop - но мне нужно разобраться как это работает.
-
Папочки РЕШЕНО