-
Notifications
You must be signed in to change notification settings - Fork 0
/
Toolbox.cs
67 lines (51 loc) · 1.81 KB
/
Toolbox.cs
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
using System;
using System.Collections.Generic;
using UnityEngine;
namespace BLK10.Singleton
{
[ExecuteInEditMode]
[DisallowMultipleComponent]
public class Toolbox : AToolBehaviourbox<Toolbox>, IToolbox
{
private static readonly StringComparer kComparer = StringComparer.InvariantCulture;
[NonSerialized, HideInInspector]
private Dictionary<string, Component> _cache;
protected Toolbox() {}
public new HideFlags hideFlags
{
get { return (this.gameObject.hideFlags); }
set { this.gameObject.hideFlags = value; }
}
public T GetOrAddComponent<T>()
where T : Component
{
var fullName = typeof(T).FullName;
this._cache = this._cache ?? new Dictionary<string, Component>(Toolbox.kComparer);
Component comp;
if (!this._cache.TryGetValue(fullName, out comp))
{
comp = this.GetComponent<T>();
if (comp == null)
comp = this.gameObject.AddComponent<T>();
this._cache.Add(fullName, comp);
}
return (comp as T);
}
public static IToolbox Instance
{
get { return (Toolbox.UnderlyingInstance as IToolbox); }
}
#region "INIT"
[RuntimeInitializeOnLoadMethod]
#if UNITY_EDITOR
[UnityEditor.InitializeOnLoadMethod]
#endif
private static void Initialize()
{
IToolbox tool = Toolbox.Instance;
if ((tool != null) && (((Toolbox)tool)._cache == null))
((Toolbox)tool)._cache = new Dictionary<string, Component>(Toolbox.kComparer);
}
#endregion
}
}