Неделя 7 (ноябрь 2): Инвентарь, апгрейд построек.

Оглавление

Наконец в игре появился инвентарь. Сделать его было довольно просто, хотя успел побадаться с лайаутами внутри лайаутов.

Мне очень хотелось чтобы все объекты, отсортированные по типам отображались в отдельных панелях, которые сами были бы элементами списка. Тогда при смене закладки сортировки можно было бы включать или выключать панель, а не бегать по списку отдельных объектов.

Можно устроить конкурс кто больше ошибок, совершенных при создании этого макета назовет…

Но у меня получался список (иконок предметов на панели) в списке (панелей на экране), и иконки отказались выстраиваться нужным мне образом. В результате я просто отказался от идеи делить предметы в инвентаре на отдельные панели. Нет ничего страшного в том, чтобы при переключении закладок бегать по всему набору иконок, включать нужные, и прятать не нужные. Немного выкрученный интерфейс все того же магазина и вуаля.

***

Сделал механизм апгрейда построек на основе рецептов. Получилось довольно быстро, но оказалось проблематично встроить новый тип рецептов в имеющийся механизм простых и дефолтных рецептов.

А вдруг мне не поверят в то, что я новый тип добавил?

Рецептам улучшения построек нужны не только ингредиенты, но и результат. Чтобы ничего не попуталось результат в нашем случае будет иметь тип (BonusObjectType) — BuildingLevel. Других подсказок системе не нужно, мы же улучшаем конкретный параметр — уровень.

Проблема была в том, что система крафта оказалась довольно нежно настроена на то, что у каждого сверчка есть свой шесток. И появление инстанса рецепта, который вроде принадлежит постройке, но находится вне системы слотов, привело к проблемам с логикой. Затыкал я ее как мог. Вроде заработало.

Не на долго, правда.

***

Второй частью механизма апгрейда построек является довольно неожиданный механизм — ограничения или рестрикшены (как-то так повелось еще со времен Рыбного Места что я использую именно слово «рестрикшены»).

Мысль довольно простая: каждый рецепт апгрейда построек увеличивает ее уровень на… значение результата бонуса (я же могу в бонус рецепта поставить лубую цифру), но главное что на каждый уровень приходится свой рецепт. А как определить какой именно рецепт в данный момент времени делать доступным? Рестрикшенами.

В коде контроллера рестрикшенов есть полный перечень логических условий, использующихся в поле ConditionTypeBuildingLevelCurrent — это условие на конкретное значение уровня постройки. Поле conditionValueType используется в случаях когда через ConditionType нельзя однозначно установить какое именно значение нужно сравнивать. Например у персонажа есть список параметров, со значениями которых можно связывать ограничения. Со списком не получится работать напрямую — количество значений неизвестно — и тут поможет поле conditionValueType.

В итоге ингредиенты в бонусах ограничивают с помощью механизма списания из инвентаря, а рестрикшены ограничивают с помощью сравнения параметров. Еще один конфиг и еще один механизм сверки параметров.

Оглавление