Цитата (|DUОS|)
Сегодня нас ждёт очень интересный практикум, связанный с типом, которого в триггерах нет. Это тип region.
region - тип, который позволяет создавать непрямоугольные области, разбросанные хоть по всей карте. Тип достаточно лёгок в освоении, однако есть несколько вещей, которые требуется запомнить.
Функций, связанных с типом region, в common.j немного и надо знать их особенности.
Создаётся такой регион через функцию CreateRegion().
Для построения сложного региона используются функции вида RegionAddCell и RegionAddRect. Разберём каждую.
RegionAddCell принимает в качестве параметров уже созданный регион и координаты x и y. Казалось бы, эта функция добавляет точку. Но ничего подобного! Она добавляет в регион прямоугольник размером 32х32 с центром в этой точке. Будьте внимательны и учитывайте это, чтобы избежать ошибок при построении региона.
RegionAddRect принимает в качестве параметров уже созданный регион и прямоугольную область, которая в GUI называется Область, а в Jass носит название rect. Здесь никаких ухищрений нет.
Не забудьте, что region как и любой тип, наследующийся от handle, надо обнулять и можно удалять при помощи функции RemoveRegion. Конечно же, можно удалить отдельные Cell'ы или отдельный рект, используя функции RegionClearCell и RegionClearRect соответственно.
Теперь о том, как можно использовать этот тип для оптимизации своего кода в событиях триггеров.
TriggerRegisterEnterRegion может отловить вход в регион и сразу же отфильтровать всех ненужных юнитов.
TriggerRegisterLeaveRegion может отловить выход из региона и сразу же отфильтровать всех ненужных юнитов.
Ещё одно преимущество регионов над ректами заключается в том, что их событийно можно отловить, используя GetTriggeringRegion().
Этого багажа знаний вам должно хватить для построения нестандартных непрямоугольных областей.