|
|
@@ -62,7 +62,7 @@ namespace Model
|
|
|
|
|
|
private Queue<Disposer> updates = new Queue<Disposer>();
|
|
|
private Queue<Disposer> updates2 = new Queue<Disposer>();
|
|
|
-
|
|
|
+
|
|
|
private readonly Queue<Disposer> starts = new Queue<Disposer>();
|
|
|
|
|
|
private Queue<Disposer> loaders = new Queue<Disposer>();
|
|
|
@@ -71,6 +71,10 @@ namespace Model
|
|
|
private Queue<Disposer> lateUpdates = new Queue<Disposer>();
|
|
|
private Queue<Disposer> lateUpdates2 = new Queue<Disposer>();
|
|
|
|
|
|
+ private readonly HashSet<Disposer> unique = new HashSet<Disposer>();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
public void LoadHotfixDll()
|
|
|
{
|
|
|
#if ILRuntime
|
|
|
@@ -264,6 +268,7 @@ namespace Model
|
|
|
|
|
|
public void Load()
|
|
|
{
|
|
|
+ unique.Clear();
|
|
|
while (this.loaders.Count > 0)
|
|
|
{
|
|
|
Disposer disposer = this.loaders.Dequeue();
|
|
|
@@ -272,6 +277,11 @@ namespace Model
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
+ if (!this.unique.Add(disposer))
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
IObjectSystem objectSystem;
|
|
|
if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectSystem))
|
|
|
{
|
|
|
@@ -301,10 +311,16 @@ namespace Model
|
|
|
|
|
|
private void Start()
|
|
|
{
|
|
|
+ unique.Clear();
|
|
|
while (this.starts.Count > 0)
|
|
|
{
|
|
|
Disposer disposer = this.starts.Dequeue();
|
|
|
|
|
|
+ if (!this.unique.Add(disposer))
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
IObjectSystem objectSystem;
|
|
|
if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectSystem))
|
|
|
{
|
|
|
@@ -324,6 +340,7 @@ namespace Model
|
|
|
{
|
|
|
this.Start();
|
|
|
|
|
|
+ this.unique.Clear();
|
|
|
while (this.updates.Count > 0)
|
|
|
{
|
|
|
Disposer disposer = this.updates.Dequeue();
|
|
|
@@ -332,6 +349,11 @@ namespace Model
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
+ if (!this.unique.Add(disposer))
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
IObjectSystem objectSystem;
|
|
|
if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectSystem))
|
|
|
{
|
|
|
@@ -361,6 +383,7 @@ namespace Model
|
|
|
|
|
|
public void LateUpdate()
|
|
|
{
|
|
|
+ this.unique.Clear();
|
|
|
while (this.lateUpdates.Count > 0)
|
|
|
{
|
|
|
Disposer disposer = this.lateUpdates.Dequeue();
|
|
|
@@ -369,6 +392,11 @@ namespace Model
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
+ if (!this.unique.Add(disposer))
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
IObjectSystem objectSystem;
|
|
|
if (!this.disposerEvents.TryGetValue(disposer.GetType(), out objectSystem))
|
|
|
{
|