EnumEventTable.cs
2.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/******************************************************************************
* Copyright (C) Leap Motion, Inc. 2011-2017. *
* Leap Motion proprietary and confidential. *
* *
* Use subject to the terms of the Leap Motion SDK Agreement available at *
* https://developer.leapmotion.com/sdk_agreement, or another agreement *
* between Leap Motion and you, your company or other organization. *
******************************************************************************/
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
namespace Leap.Unity {
[Serializable]
public class EnumEventTable : ISerializationCallbackReceiver {
[Serializable]
private class Entry {
[SerializeField]
public int enumValue;
[SerializeField]
public UnityEvent callback;
}
//The actual serialized list of entries
[SerializeField]
private List<Entry> _entries = new List<Entry>();
//Not serialized, is just populated after deserialization and used
//when calling Invoke for speed.
private Dictionary<int, UnityEvent> _entryMap = new Dictionary<int, UnityEvent>();
public bool HasUnityEvent(int enumValue) {
UnityEvent callback;
if (_entryMap.TryGetValue(enumValue, out callback)) {
return callback.GetPersistentEventCount() > 0;
}
else {
return false;
}
}
public void Invoke(int enumValue) {
UnityEvent callback;
if (_entryMap.TryGetValue(enumValue, out callback)) {
callback.Invoke();
}
}
public void OnBeforeSerialize() { }
public void OnAfterDeserialize() {
if (_entryMap == null) {
_entryMap = new Dictionary<int, UnityEvent>();
} else {
_entryMap.Clear();
}
foreach (var entry in _entries) {
_entryMap[entry.enumValue] = entry.callback;
}
}
}
}