Active zone
Данный объект предназначен для автоматизации управления в игровой локации. Для работы обязательно должен быть подключен к адвентюрному менеджеру локации(должен быть его подобъектом или прописан через дополнительный параметр менеджера). Имеет основные параметры объекта.
Основные параметры
Состояние (state) - начальное состояние зоны. По умолчанию - disabled . Можно указать состояние active , если зона должна быть активной сразу, а не после некоторого действия.
В опции (saveopt) - если "да" , то зона будет сохранять свое состояние в опции и при ините будет находится в этом состоянии. Это позволяет значительно упростить управление. Данный параметр опций можно изменять с помощью объекта как в текущем экране, так и в другом.
res (res) - графический ресурс для отображения объекта. Перетаскивается мышкой из редактора ресурсов. В основном используется безресурсная зона. Размер зоны задается через ее параметры w, h .
Курсор (curs) - графический ресурс курсора текущего и всех дочерних объектов. Перетаскивается мышкой из редактора ресурсов.
Условие допустимости хинта
- объект (objEx) - объект, который должен находиться в определенном состоянии для подхинтовывания зоны.
- состояние (stEx) - состояние объекта из предыдущего поля.
- параметр (parEx) - параметр объекта из предыдущего поля.
- значение (valEx) - значение выше указанного параметра.
- НЕ (notEx) - отрицание условия.
- общее НЕ (notExAll) - отрицание всего набора условий. Используется, если нужно чтобы все указанные условия подхинтовывания воспринимались через "или", а не через "и".
Дополнительные параметры
реакция
Реализует реакцию на клик и/или дроп тула.
- дроп (drop) - объект, который дропаем на активную зону. Если не задан - обрабатываем клик.
Если дроп прописан и в туле и в зоне, то команда для дропа выполнится в обоих объектах (команда в зоне отработает на 10-20 мс позже, при этом если команды в зоне и туле одинаковы, то первый set данной команды выполнится дважды). По этому желательно прописывать команду дропа или в туле или в зоне.
Но если на зону есть применение тула, то как минимум должно быть заполнено поле "дроп"(остальные могут быть пустыми). Так как, когда зоне вызывается hint, то и тул прописанный в поле "дроп" тоже будет подсвечиваться, но после передачи менеджеру состояния hint_tool.
- объект (obj) - объект, которому будем менять состояние.
Один объект может отвечать за несколько действий.
Пример: Пока не применили некоторый тул (или не совершили любое другое действие, которое можно проверить через параметр в опциях) при клике на зону объект показывает одну текстовую подсказку, после применения - другую.
- состояние (st) - состояние для объекта из предыдущего поля.
- состояние зоны (stz) - новое состояние активной зоны, в которое она перейдет после отработки реакции.
- work - новое состояние зоны по умолчанию. Зона на клик/дроп не реагирует, глинт/хинт зону не подсвечивает.
- active - активация зоны для отработки следующей реакции(в случае, если прописано несколько реакций). Если не указать active, зона перейдет в work и для отработки следующей реакции, ее нужно будет перевести в active другим объектом.
- reset - сбрасывает состояние все параметры зоны: зона переходит в active, счетчик реакции стает = 0 (будет выполняться первая реакция). Применяется когда нужно зациклить одну команду (например показ сообщения, что нужно что то использовать и т.д.). При этом, если на клик должно быть несколько действий, то нужно их логику прописать в машине, которая обрабатывает реакцию(если указано reset, как новое состояние зоны, то следующие реакции никогда не выполнятся, так как счетчик реакций всегда сбрасывается на первую ). Если в области зоны должен применяться тул, то его прописываем в параметре "дроп", а остальные поля не подключаем.
Состояния
- disabled - начальное состояние по умолчанию. В нем зона на реакции не реагирует, глинтом/хинтом не подсвечивается.
- work - состояние отработавшей зоны. В нем зона на реакции не реагирует, глинтом/хинтом не подсвечивается.
- active - в данном состоянии зона активна: может отработать очередную реакцию (1 раз), подсвечивается глинтом/хинтом.
- reset - сбрасывает параметры зоны: зона переходит в active, счетчик реакции = 0. В отличии от других состояний не пишется в опции, так как отрабатывает непосредственно после реакции.
Особенности использования
- Если зона имеет параметр vis = 0, то она не подсвечивается глинтом/хинтом (и на клик/дроп не реагирует). Это используется если в локации есть зумы. чтобы когда зум открыт, не подсвечивались хинтом/глинтом зоны в самой локации. Для этого нужно зоны в локации объединить в groupset и при открытии зума, передавать этому groupset vis = 0. При этом зум должен при окртытии/закрытии изменять vis объектам, которые содержит.
- Если есть зона, которая должна быть активна пока не совершено некоторое действие, то в ее реакции целесообразно использовать reset, как новое состояние зоны. А после совершения действия зону нужно перевести в work, чтобы она не подсвечивалась глинтом/хинтом.
- Если на некоторую область нужно применить несколько тулов, то для каждого применения должна быть своя зона, чтобы при хинте подсвечивался только один тул(в основном так и будет и в случае одной зоны, так как для всех тулов используется один флаер для подсветки, но могут возникать трудноуловимые ошибки). Пример: Есть область к которой нужно применить тул1, тул2 и тул3 (в таком же порядке). Для этого делаем 3 зоны: зона1, зона2, зона3(номера соответствуют тулам). Алгоритм следующий: Сначала активна только зона1, после применения зона1 переводится в work, а зона2 в active. После применения тула2 переводим зону2 в work, а зону3 в active. При этом если зона должна активироваться после анимации, то нужно предусмотреть страховку от падения приложения во время анимации(машинка, которые проверяет некоторые условия, и в случае их истинности, активирует зону).
- Если нужно, чтобы зона некоторое время не была активной(пока не закончится анимация и т.п.), то на это время ей нужно установить vis = 0 (и оставить состояние active - в случае падения приложения, при повторном заходе зона будет активна и отработает как нужно(в случае если зона пишет свое состояние в опции - что почти всегда так)), но если после реакции зоне вызывается reset, то vis нужно устанавливать с задержкой в 50 мс(reset устанавливает vis = 1).
- Состояние зоны можно изменять из другого экрана с помощью set изменяя у опций (для пользователя) параметр azones.z(id зоны).st, у зоны должен быть включен параметр "в опции".
- порядок расположения зон в дереве проекта и в азменеджере (добавляемый параметр - дополнительная зона) задает порядок хинтования зон при вызове азменеджеру hint_seq
- При динамическом изменении параметров азменеджера (машиной, при загрузке экрана, с передачей азменеджеру состояния init), который управляет зоной, которой тоже динамически изменяют параметры, нужно чтобы сначала изменялись параметры азменеджера, а потом активной зоны; иначе после init'a азменеджера зона сбросит свои параметры.
- При наличии объекта, который можно дропнуть на зону и он при этом остается доступным игроку, в машине-обработчике дропа нужно делать проверку было ли применение; иначе предмет можно будет дропнуть неограниченное количество раз (связано с изменением vis активной зоны).
Пример
S:\!MOBILE\!!!EditorGames\Wiki_sample
Файл sample_activezone_and_azmanager.zip