Привет, анон, теперь тут будет тред моей всратой 2D фермы Жанр: 2D ферма для аутистоов Движок: Godo
Аноним07/02/24 Срд 22:07:38№9333291
Привет, анон, теперь тут будет тред моей всратой 2D фермы
Жанр: 2D ферма для аутистоов Движок: Godot csharp mono
Описание: можно будет выращивать помидорки, огурчики, делать закрутки и все такое. А сейчас нет нихуя, поэтому, пока что беру прицел на уровень "стардьюваля на минималках".
Что есть из реализованного: - Сетка игровых объектов поверх тайлмапы - Инвентарь персонажа + инвентарь контейнера, можно теребить предметы туда-сюда - Подбор/дроп предметов - UI инвентаря, UI контейнера, хотбар - Использование предметов в инвентаре по райткликту - Использование райткликом активного предмета в хотбаре
Сегодня вот сделал первый предмет, Use которого ставит под курсор блок забора.
Список дальнейших действий в произвольном порядке. - Добавить логику роста растений от времени или другого фактора - Реакция растений на касание коллизии игрока - добавить музыку из лесного эмбиэнта или чего-то такого, чтобы не так гумозно было тестить - сделать губами "чпок" в микрофон и поставить это на звук подбора предметов, по-моему, это забавно - описать класс размещаемого объекта - ресурса на карте, например, дерево или валун - сделать инструмент с типом добывающего инструмента, типа топора или кирки - реализовать возможность добычи ресурса инструментом - какой-нибудь базовый крафт, крафт станция и все такое
Покожу вам базовые классы для предмета и объекта на карте, все максимально просто
Сразу скажу, на пиках кое где я ещё не размазал ответственность по классам. Так что там и try-out, проброс или отсутствие проброса параметров методов.
Сначала про предметы. Пик 1 Есть у нас базовый предмет, от него появляется разновидность предметов "юзабельных", неважно каким способом, из инвентаря или хотбара, главное что их можно юзать.
Закинул сюда свойство "Является инструментом" и реализую все инструменты типа мотыг, топоров, лопат и всего наследуясь именно от этого класса.
Пик 2. И самое вкусное в предметах - их реализация в готовом виде.
На скриншоте - класс предмета мотыга, которую я использую из панели быстрого доступа персонажа, для вскапывания грядок.
Имея ссылку на объект игрока, получаю окружение уровня, подготавливаю объект грядки и через менеджер уровня спавню его, возвращая true если все ок и предмет использован удачно, или же в случае неудачи false
Пик 3. От ItemUsable наследуется тип ItemConsumable, который потребляется при использовании. Это всякие банки-склянки, еда, семена и все такое.
На скриншоте предмет "абстрактных семян", т.к. я не сделал ничего конкретного. И вся прелесть наследования в том - что достаточно переопределить метод использования предмета для изменения поведения.
Подготавливаем объект семян, получаем окружение уровня и в отличие от копания грядок, здесь уже проверяем есть ли под курсором любой объект типа "размещаемый" и нет ли другого объекта типа "семян" и всего такого под курсором. Если снизу грядка и на ней пусто - сажаем семена
И вот из всего этого получается такое колдунство, что для создания нового предмета - достаточно натянуть новый спрайт и переопределить поведение при клике, без лишнего геморроя, что важно для программирования, и прочих запар
Собственно, сделал "систему роста" растений. Наброски класса растущего растения - пик 1.
Принцип работы - когда объект готов, у него появляется система роста, куда помещается перечень стадий роста, у каждой стадии может быть своё условие и спрайт(пик2, пока так).
Сама система - пик 3 Растение в каждом кадре дёргает свой метод Process, где происходит вызов попытки системы перевести своё состояние на следующий этап и выбросить оповещение, что стадия изменилась, в свою очередь класс растения поймает этот ивент и сменит спрайт.
Эх, как же хочется 2D художника, худенького, бледного, не очень требовательного, готового к правкам, работающему за спасибо и процент от будущих донатов, умелого, делающего качественно, с синяками под глазами, растрёпанными или неуложенными волосами, дабы вместе с ним(а лучше он сам) наклепать спрайтов для игрули.
Собственно, запилил "съедание" ингредиентов для крафта из сумки. В первую очередь съедаются стопки предметов размером поменьше. Зачем? Не знаю.
У рецепта есть поля: Результат Количество Массив требуемых предметов и их кол-во
При крафте валидируется наличие предметов в инвентаре и их количества, затем все считается магическим образом Если все ок - забираем материалы и выдаем результат.
Захотел прикрутить тестовые анимации. На использовании предметов жидко дристанул, потому что эффект должен наступать либо в середине, либо в конце проигрывания.
Пока ухватился за AnimationTree и его AnimationStarted/Finished + длину анимации в ms.
Думаю завозить какую-то абстрактную работу с таймером или чисто на ивентах колдовать. Энивей надо где-то закидывать референс на дерево в котором дерево анимаций и к тому же запускать саму анимацию. Вот думаю как это сделать расширяемо и красиво без бойлерплейта
Худшие две вещи лично для меня это рисование пиксельных спрайтов и ебучая работа с анимациями.
Там делать ссылку на собственное дерево анимаций и сделать ивент что анимация завершена
В Use методе предмета подвязывать к этому ивенту реализацию использования предмета и файрить нужную анимацию в базовом классе, вынесу реализацию действия в OnUse и дергать его на все тот же ивент AnimationFinished из Creature, после чего отписываться от события
Завафлил немного с разработкой из-за дел ирл, сегодн смог понюхать IDE и подрубил репозиторий на гитхабе, потом мб на свой гитлаб перееду, потому что местный CI мне больше нравится
>>939379 >Завафлил немного с разработкой Это первые звоночки анончик. Все через это проходили. В начале чутка проебешься, потом всё больше и больше. Не бывает такого что наоборот темп наращиваешь. Походу R.I.P игре будет, а такие надежды были :(