Exemple #1
0
    protected void addEventListener(TriggerConfigData config, int index, TriggerFuncData data)
    {
        SList <TriggerEventRegistData> list = _eventActiveDic.computeIfAbsent(data.id, k => new SList <TriggerEventRegistData>());

        TriggerEventRegistData eData = _eventRegistDataPool.getOne();

        eData.config   = config;
        eData.index    = index;
        eData.data     = data;
        eData.priority = config.priority;

        if (list.isEmpty())
        {
            list.add(eData);
        }
        else
        {
            TriggerEventRegistData[] values = list.getValues();
            int idx = Array.BinarySearch(values, 0, list.size(), eData, _comparer);

            if (idx >= 0)
            {
                list.insert(idx, eData);
            }
            else
            {
                list.insert(-idx + 1, eData);
            }
        }
    }
Exemple #2
0
    protected void removeEventListener(TriggerConfigData config, int index, TriggerFuncData data)
    {
        SList <TriggerEventRegistData> list = _eventActiveDic.get(data.id);

        if (list == null)
        {
            return;
        }

        TriggerEventRegistData[] values = list.getValues();

        for (int i = list.size() - 1; i >= 0; --i)
        {
            if (values[i].config.id == config.id)
            {
                TriggerEventRegistData eData = list.remove(i);

                if (eData.isUsing)
                {
                    eData.needRelease = true;
                }
                else
                {
                    _eventRegistDataPool.back(eData);
                }
            }
        }
    }
Exemple #3
0
    private static int triggerEventRegistDataCompare(TriggerEventRegistData arg1, TriggerEventRegistData arg2)
    {
        if (arg1.priority == arg2.priority)
        {
            return(0);
        }

        //大的在前
        return(arg1.priority > arg2.priority ? -1 : 1);
    }