/*
 * gfx_sprite_ysort — включить/выключить сортировку блит-прохода
 * sprite_update (painter's algorithm) и выбрать компоненты порядка:
 * mode = YSORT_Y | YSORT_LAYER (см. sprite.h).  Дефолт 0 (выкл):
 * z-order = индекс массива.
 *
 * Компоненты управляются МАСКАМИ ключа (_spr_ysort_kmask): выключенный
 * компонент затирается в 0 при построении ключа — в сортировщике нет
 * ни одного ветвления по режиму.
 *
 * Включение — подключением указателя _spr_ysort_fn (паттерн funcptr-DCE
 * как у тикера): только этот модуль ссылается на код сортировщика —
 * программа без вызова gfx_sprite_ysort() не линкует ни его, ни таблицу.
 */
#include "../_bgi.h"
#include <sprite.h>          /* YSORT_* */

void gfx_sprite_ysort(uint8_t mode)
{
    if (mode) {
        _spr_ysort_kmask[0] = (mode & YSORT_Y)     ? 0xFF : 0x00;
        _spr_ysort_kmask[1] = (mode & YSORT_LAYER) ? 0xFF : 0x00;
        _spr_ysort_fn = _spr_ysort;
        _spr_ysort_last = 0;     /* форс rebuild: пока было выключено /
                                  * при смене режима порядок мог уехать */
    } else
        _spr_ysort_fn = 0;
}
