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); } } }
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); } } } }
private static int triggerEventRegistDataCompare(TriggerEventRegistData arg1, TriggerEventRegistData arg2) { if (arg1.priority == arg2.priority) { return(0); } //大的在前 return(arg1.priority > arg2.priority ? -1 : 1); }