Skip to content

colorful-thundercloud/TestInventory

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Запуск основной сцены (MainScene) не требует подготовки. Реализовано следующее:

  1. Создание изначального инвентаря заданного размера
  2. Генерация случайных предметов для возможности взаимодействовать с ними. Есть кнопка регенерации для создания новой партии
  3. Информация о предметах отображается при наведении (тултип) и клике (окно взаимодействия). Предметы можно использовать (уменьшает количество на 1) или выбросить (удаляет предмет из инвентаря). Бонусом есть проверка на то, находится ли предмет в инвентаре, и если нет, то кнопки не работают
  4. У предметов есть число - количество, они успешно стакаются в один, что отображается и визуально, и в списке инвентаря. Бонус: если предмет не стакаемый, количество на будет отображаться на маленькой иконке
  5. Предметы перемещаются по слотам инвентаря, и все изменения отображаются на списке предметов. При попытке перетащить предмет не на слот он будет возвращён на своё предыдущее место
  6. Работает сохранение и загрузка инвентаря. Загрузка полностью очищает текущий инвентарь и вместо него раскладывает по местам сохранённые предметы

Игровая логика разбита на две основные части - инвентарь с предметами и UI.

Основные классы для хранения информации о предметах - ItemData, Inventory и GameDataHolder.

ItemData: ScriptableObject. Содержит следующую информацию о предмете:

  • Наименование
  • Описание
  • Спрайт
  • Тип (enum)
  • Булево поле для указания возможности стакаться Хорошо бы объединить enum с параметрами стаков, по типу "все оружия не стакаются, все ресурсы стакаются".

GameDataHolder: статичный объект-хранитель, который забирает из папки Resources созданные инстанции ItemData и держит их в списке, доступном из любого места игры. Был создан изначально для генерации случайных предметов, и нагло скоммунизден из другого моего проекта :D

Inventory: статичный объект, отвечающий за список предметов и его изменение. Имеет дочерний класс InventoryItemData (был структурой, но структура - статичная копия, а не динамическая ссылка с изменением параметров на лету), нужный для хранения такой информации о предметах, как количество и индекс в инвентаре. Инвентарь - статичный, потому что добавление предметов в него может понадобиться из любого места игры (при условии, что она однопользовательская).

UI разбит на четыре основных класса: инвентарь, слот, предмет и система подсказок. InventoryUI: основной класс для работы с визуальным отображением инвентаря. Хранит список ячеек, заполняет их предметами при генерации и при загрузке сохранения.

InventorySlot: простейший класс-хранилище, у которого два поля - ссылка на предмет в ячейке и индекс ячейки. Мог бы быть частью InventoryUI, но висит на префабе слота, потому что инстанциировать кусочек класса я не очень понимаю, как :D

InventoryUIItem: самый жирный из всех классов, в котором содержится логика работы предмета и триггерятся функции из Inventory. Отвечает за драг'н'дроп и всякие проверки, которые по-хорошему бы положить в другое место, но у меня кончились варианты, как можно было бы улучшить ситуацию.

UITooltipSystem: отдельный класс для отображения тултипов и окна взаимодействия. Мог бы быть частью InventoryUI, но в целом наличие отдельного независимого объекта для такой вещи, как отображение информации, показалось мне более удобным.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors