Переключатели
Переключатели (Triggers) — это объекты, которые реагируют на присутствие других объектов. Объёмные и сеточные переключатели могут быть при создании карты, а программисты могут превратить в переключатель всё что угодно.
Создание карт
Существует много типов объёмных объектов переключателей, которые можно разместить на карте в редакторе Hammer; смотрите Special:PrefixIndex/Trigger с полным перечнем. Наиболее часто используемыми объектами переключателями общего назначения являются trigger_once, trigger_multiple, trigger_look и trigger_proximity. Все они имеют следующие одинаковые свойства и выходы:
- tools/toolstrigger
- Все грани объёмов объекта переключателя должны быть полностью покрыты этим материалом. В качестве альтернативы с помощью признака %CompileTrigger можно создать собственный материал для переключателей.
Примечание: Элементы объекта переключателя можно покрывать материалами без признака %CompileTrigger (переключатели всегда будут нематериальны и невидимы), однако использование %CompileTrigger гарантирует, что не будет посторонних данных в карте освещения.
- Filters
- Объекты фильтры могут быть использованы для определения объектов на которые будет срабатывать переключатель.
- Filter Flags
- Существуют признаки объекта, которые позволяют выполнять простую фильтрацию без использования дополнительного объекта фильтра.
OnStartTouch(при начале касания)OnEndTouch(при завершении касания)- Эти выходы срабатывают всякий раз, когда объект, соответствующий всем фильтрам, касается объёма или покидает объём переключателя соответственно, независимо от любых других дополнительных проверок. Объект, который входит или покидает переключатель, будет числиться как ссылка !caller.
OnStartTouchAll(при начале касания, индивидуально)OnEndTouchAll(при начале касания, индивидуально)- Действуют как и предыдущие, но срабатывают только в том случае, если переключателя не касаются другие (удовлетворяющие фильтру) объекты.
OnTouching(если касается)OnNotTouching(если не касается)- Соответствующий из этих выходов будет срабатывать в ответ на вход
TouchTest. Все переключатели поддерживают этот вход, но для большинства он не указан в FGD-файле. OnTrigger(при соответствии)- Срабатывает каждый раз, когда объект соответствует всем критериям переключателя.
OnStartTouch и OnStartTouchAll. Если повторно срабатывает не восстанавливающийся переключатель, то он удалит себя с карты через 0.1 секунду. Выход OnStartTouch всё равно может повторно сработать в этом промежутке времени. Смотреть также
- Объёмный объект
- Сеточный объект
- Входы и выходы
- Фильтры
- Special:PrefixIndex/trigger
showtriggers_toggle, команда управления, которая делает видимыми объёмы объектов переключателей.
Программирование
Все объекты могут реагировать на пересечение с другими объектами (смотрите Touch()). Если нужно учитывать касания без учёта столкновений, то доступны два варианта:
SetSolid(SOLID_NONE)иAddSolidFlags(FSOLID_TRIGGER)- Объект переключателя будет фиксировать касание с предметами, которые походят сквозь него.
CollisionProp()->UseTriggerBounds(true,iBloatSize)- Для объекта будет создан "короб переключатель", который превышает размеры его ограничивающего короба на iBloatSize единиц по осям X/Y и (iBloatSize/2) по оси +Z (-Z остается неизменным). Короб переключатель ориентирован относительно начала координат карты и будет работать независимо от материальности и габаритов столкновений исходного объекта. После ввода команды управления
ent_bboxон будет отображаться в виде светло-синих рёбер короба. - Valve использует короб переключатель для всех подбираемых предметов. Размер увеличения их габарита составляет 24 единицы, довольно большая цифра задана для простоты срабатывания соответствующих событий.
Объёмный объект
Чтобы создать новый объект переключатель, который будет использовать для проверки объём своих элементов карты вместо ограничивающего короба, наследуйте класс CBaseTrigger и вызовите метод InitTrigger().
