🔥 Новая система предметов!
😭 Наконец-то подходит к концу огромный рефакторинг, на который я потратил немало сил.
Суть проблемы
В прошлой версии система предметов строилась на ООП-подходе. То есть у нас был базовый класс и его наследники (FoodItem, ToolItem, BlockItem и т.д.). Делал я так, потому что опирался больше на Java версию майна — там была похожая реализация.
Но при длительной работе и расширении контента, конечно, начали вылезать проблемы, связанные с дублированием кода. Например, у нас есть 2 вида предмета (еда и семена), и вот нам нужен третий тип предмета (арбуз, картошка и т.д.), который мы могли бы и съесть, и посадить как семя. В таком случае подход с ООП даёт трещину и не позволяет гибко конфигурировать предмет.
Решение
Переделать систему предметов на КОП — компонентный подход, по аналогии с bedrock версией майна. Теперь у нас есть всего один класс InventoryItem, на который мы уже можем вешать различные компоненты (FoodItemComponent, DamageItemComponent, ToolItemComponent и т.д.).
При такой системе мы уже легко можем добавить комбинированное поведение для предмета, не дублируя логику. Например, для предмета, который можно есть и сажать в землю, просто добавляем 2 компонента (FoodItemComponent и SeedItemComponent) — и всё! Максимально гибкая конфигурация предмета: если нужно что-то ещё, просто создаёшь новый компонент и добавляешь его в конфиг предмета.
Статы предмета
Так же была доработана система статов предмета, раньше у предмета был только 1 параметр это прочность. Теперь же мы можем лгко добавлять новые параметры, например статы магии, урон и т.д, эти параметры уже могут меняться у предмета и легко сохран
Конфигурация
И вишенкой на торте стала новая JSON-конфигурация: все предметы теперь описываются в своих JSON-файлах. Там мы задаём им id, ключи перевода и навешиваем нужные компоненты.
P.S Про сам подход с конфигурацией и почему я использую JSON, а не ScriptableObject, расскажу в следующих постах. 😎
Post #792
1.42K






- 🔥 25
- ❤ 3
- 👍 3