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

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors