Demo6 Shaped Items
Examples/Demo6 Shaped Items/Shaped Items.unity
Этот пример показывает предметы, которые занимают не один слот, а footprint из нескольких клеток grid-инвентаря.
Что показывает демо
- прямоугольные предметы вроде меча и щита
- сложные формы через маску занятых клеток - топор и коса
PlacementInventoryDataBindingдля данных вида item + anchor + orientationIItemPlacementShapeProviderна adapter-е предмета- поворот предмета во время drag через
RotateDragAction - preview занятых клеток и проверку размещения по топологии
- рисовка предметов поверх слотов
- совместимость с обычными инвентарями и стратегиями
- бонус: Editor для настройки маски предметов
Как устроено
Данные предметов:
ShapedItemExampleSO.csComplexShapedItemExampleSO.csSO/RectShapes/*SO/ComplexShapes/*
Binding и adapter:
Adapters/ShapedItemAdapter.csDataBindings/ShapedItemsInventoryDataBinding.cs
Editor утилита:
Editor/ComplexShapedItemExampleSOEditor.cs
Как работает
Перенос и поворот:
- Во время переноса система хранит форму, якорьный слот и поворот в
DragEntry. - Клавиши
QиEв demo-профиле вызываютRotateDragActionс шагами поворота-1и1что в сетке соответсвует -90 и +90. - После успешного переноса binding записывает предмет, якорь и поворот в список.
Прямоугольные и сложные формы
ShapedItemExampleSO описывает обычный прямоугольник через Width и Height. Его GetOccupiedCells() возвращает все клетки внутри bounding box.
ComplexShapedItemExampleSO добавляет bool-маску _cells. Она позволяет сделать L-, T-, cross- и другие формы, где часть клеток bounding box пустая. Если маска случайно стала пустой, предмет fallback-ится к базовому прямоугольнику, чтобы не получить предмет без footprint-а.
ComplexShapedItemExampleSOEditor рисует кликабельную сетку поверх иконки предмета: включённые клетки считаются занятыми, выключенные - пустыми.
Когда брать этот пример за основу
- предметы должны занимать несколько клеток в inventory grid
- нужно хранить позицию и ориентацию предмета в своих данных
- нужен поворот предметов во время drag
- нужны нестандартные формы, а не только прямоугольники