SaloEater (обсуждение | вклад) |
м (→Работа с контейнером) |
||
(не показаны 2 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
Контейнер - это объект, позволяющий хранить предметы в слотах, осуществлять операции с ними и так же обладающий методами для интеграции с любым интерфейсом, который открыт для этого контейнера. Произвольный контейнер может быть открыт как любой интерфейс, при этом он будет привязан ко всем слотам интерфейса. | Контейнер - это объект, позволяющий хранить предметы в слотах, осуществлять операции с ними и так же обладающий методами для интеграции с любым интерфейсом, который открыт для этого контейнера. Произвольный контейнер может быть открыт как любой интерфейс, при этом он будет привязан ко всем слотам интерфейса. | ||
− | |||
− | |||
Каждый объект tile entity в мире по умолчанию обладает контейнером, который автоматически сохраняется и для которого открывается интерфейс, отданый при выполнении события getGuiScreen. Подробнее об этом в уроке по tile entity и ниже. | Каждый объект tile entity в мире по умолчанию обладает контейнером, который автоматически сохраняется и для которого открывается интерфейс, отданый при выполнении события getGuiScreen. Подробнее об этом в уроке по tile entity и ниже. | ||
− | |||
− | |||
Все специальные контейнеры, такие как инвентарь игрока или сундука наследуют все методы базового контейнера. | Все специальные контейнеры, такие как инвентарь игрока или сундука наследуют все методы базового контейнера. | ||
− | |||
− | |||
=== Методы === | === Методы === | ||
Создание нового контейнера: | Создание нового контейнера: | ||
− | <pre>var container = new UI.Container();</pre> | + | <pre>var container = new UI.Container(); |
− | + | </pre> | |
− | |||
Обращение к встроенному контейнеру внутри tile entity: this.container | Обращение к встроенному контейнеру внутри tile entity: this.container | ||
− | |||
− | |||
=== Работа со слотами === | === Работа со слотами === | ||
− | |||
− | |||
− | |||
− | |||
Пример: | Пример: | ||
Строка 44: | Строка 31: | ||
} | } | ||
− | }</pre> | + | } |
− | + | </pre> | |
− | |||
А прототип tile entity имеет событие клика предметом по нему: | А прототип tile entity имеет событие клика предметом по нему: | ||
Строка 67: | Строка 53: | ||
}</pre> | }</pre> | ||
− | + | <br/> Таким образом каждый раз, когда мы будем тапать предметом по блоку данного tile entity, то в слоте test_slot будет лежать тот же самый предмет, что и в руке. | |
− | + | === Работа с контейнером === | |
− | |||
− | |||
+ | *getSlot("имя слота") - возвращает объект слота с данным именем, если такого слота нет, создает пустой слот на этом имени и возвращает его. Слот это объект вида {id: id предмета, count: кол-во предмета, data: data предмета}. К слотам интерфейса привязываются слоты с такими же именами, как и у элементов этих слотов в интерфейсе. | ||
*setSlot("имя слота", id, кол-во, data) - устанавливает переданный предмет в слот с данным именем. Краткая запись того, что было показано в примере. | *setSlot("имя слота", id, кол-во, data) - устанавливает переданный предмет в слот с данным именем. Краткая запись того, что было показано в примере. | ||
*clearSlot("имя слота") - очищает слот с данным именем | *clearSlot("имя слота") - очищает слот с данным именем | ||
Строка 80: | Строка 65: | ||
*refreshSlots() - ничего не делает в стандартном контейнере, для контейнеров инвентаря блоков и мобов обновляет данные о слотах в контейнере | *refreshSlots() - ничего не делает в стандартном контейнере, для контейнеров инвентаря блоков и мобов обновляет данные о слотах в контейнере | ||
*applyChanges() - ничего не делает в стандартном контейнере, для контейнеров инвентаря блоков и мобов сохраняет изменения, которые были произведены на контейнере | *applyChanges() - ничего не делает в стандартном контейнере, для контейнеров инвентаря блоков и мобов сохраняет изменения, которые были произведены на контейнере | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
*openAs(объект интерфейса любого типа) - открывает данный объект интерфейса и привязывается к нему | *openAs(объект интерфейса любого типа) - открывает данный объект интерфейса и привязывается к нему | ||
*isOpened() - возвращает, открыт ли этот контейнер для какого-то интерфейса | *isOpened() - возвращает, открыт ли этот контейнер для какого-то интерфейса |
Контейнер - это объект, позволяющий хранить предметы в слотах, осуществлять операции с ними и так же обладающий методами для интеграции с любым интерфейсом, который открыт для этого контейнера. Произвольный контейнер может быть открыт как любой интерфейс, при этом он будет привязан ко всем слотам интерфейса.
Каждый объект tile entity в мире по умолчанию обладает контейнером, который автоматически сохраняется и для которого открывается интерфейс, отданый при выполнении события getGuiScreen. Подробнее об этом в уроке по tile entity и ниже.
Все специальные контейнеры, такие как инвентарь игрока или сундука наследуют все методы базового контейнера.
Создание нового контейнера:
var container = new UI.Container();
Обращение к встроенному контейнеру внутри tile entity: this.container
Пример:
//интерфейс tile entity задается так: { // ... elements: { // ... "test_slot": {type: "slot", x: 400, y: 400, size: 100} // самый обычный слот с именем test_slot } }
А прототип tile entity имеет событие клика предметом по нему:
{ // ... click: function(id, count, data, coords){ var slot = this.container.getSlot("test_slot"); // получаем объект слота, который привязан к слоту test_slot в интерфейсе slot.id = id; slot.count = count; slot.data = data; // устанавливаем в слот тот предмет, которым тапнули по блоку tile entity return false; } }
Таким образом каждый раз, когда мы будем тапать предметом по блоку данного tile entity, то в слоте test_slot будет лежать тот же самый предмет, что и в руке.