|
|
@@ -14,6 +14,8 @@ namespace ETModel
|
|
|
|
|
|
public sealed class EventSystem
|
|
|
{
|
|
|
+ private readonly Dictionary<long, Component> allComponents = new Dictionary<long, Component>();
|
|
|
+
|
|
|
private readonly Dictionary<DLLType, Assembly> assemblies = new Dictionary<DLLType, Assembly>();
|
|
|
|
|
|
private readonly Dictionary<string, List<IEvent>> allEvents = new Dictionary<string, List<IEvent>>();
|
|
|
@@ -28,18 +30,16 @@ namespace ETModel
|
|
|
|
|
|
private readonly UnOrderMultiMap<Type, ALateUpdateSystem> lateUpdateEvents = new UnOrderMultiMap<Type, ALateUpdateSystem>();
|
|
|
|
|
|
- private Queue<Component> updates = new Queue<Component>();
|
|
|
- private Queue<Component> updates2 = new Queue<Component>();
|
|
|
+ private Queue<long> updates = new Queue<long>();
|
|
|
+ private Queue<long> updates2 = new Queue<long>();
|
|
|
|
|
|
- private readonly Queue<Component> starts = new Queue<Component>();
|
|
|
-
|
|
|
- private Queue<Component> loaders = new Queue<Component>();
|
|
|
- private Queue<Component> loaders2 = new Queue<Component>();
|
|
|
+ private readonly Queue<long> starts = new Queue<long>();
|
|
|
|
|
|
- private Queue<Component> lateUpdates = new Queue<Component>();
|
|
|
- private Queue<Component> lateUpdates2 = new Queue<Component>();
|
|
|
+ private Queue<long> loaders = new Queue<long>();
|
|
|
+ private Queue<long> loaders2 = new Queue<long>();
|
|
|
|
|
|
- private readonly HashSet<Component> unique = new HashSet<Component>();
|
|
|
+ private Queue<long> lateUpdates = new Queue<long>();
|
|
|
+ private Queue<long> lateUpdates2 = new Queue<long>();
|
|
|
|
|
|
public void Add(DLLType dllType, Assembly assembly)
|
|
|
{
|
|
|
@@ -134,36 +134,48 @@ namespace ETModel
|
|
|
return this.assemblies.Values.ToArray();
|
|
|
}
|
|
|
|
|
|
- public void Add(Component disposer)
|
|
|
+ public void Add(Component component)
|
|
|
{
|
|
|
- Type type = disposer.GetType();
|
|
|
+ this.allComponents.Add(component.InstanceId, component);
|
|
|
+
|
|
|
+ Type type = component.GetType();
|
|
|
|
|
|
if (this.loadEvents.ContainsKey(type))
|
|
|
{
|
|
|
- this.loaders.Enqueue(disposer);
|
|
|
+ this.loaders.Enqueue(component.InstanceId);
|
|
|
}
|
|
|
|
|
|
if (this.updateEvents.ContainsKey(type))
|
|
|
{
|
|
|
- this.updates.Enqueue(disposer);
|
|
|
+ this.updates.Enqueue(component.InstanceId);
|
|
|
}
|
|
|
|
|
|
if (this.startEvents.ContainsKey(type))
|
|
|
{
|
|
|
- this.starts.Enqueue(disposer);
|
|
|
+ this.starts.Enqueue(component.InstanceId);
|
|
|
}
|
|
|
|
|
|
if (this.lateUpdateEvents.ContainsKey(type))
|
|
|
{
|
|
|
- this.lateUpdates.Enqueue(disposer);
|
|
|
+ this.lateUpdates.Enqueue(component.InstanceId);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void Awake(Component disposer)
|
|
|
+ public void Remove(long instanceId)
|
|
|
{
|
|
|
- this.Add(disposer);
|
|
|
+ this.allComponents.Remove(instanceId);
|
|
|
+ }
|
|
|
|
|
|
- List<AAwakeSystem> iAwakeSystems = this.awakeEvents[disposer.GetType()];
|
|
|
+ public Component Get(long instanceId)
|
|
|
+ {
|
|
|
+ Component component = null;
|
|
|
+ this.allComponents.TryGetValue(instanceId, out component);
|
|
|
+ return component;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void Awake(Component component)
|
|
|
+ {
|
|
|
+ List<AAwakeSystem> iAwakeSystems = this.awakeEvents[component.GetType()];
|
|
|
if (iAwakeSystems == null)
|
|
|
{
|
|
|
return;
|
|
|
@@ -181,15 +193,13 @@ namespace ETModel
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
- iAwake.Run(disposer);
|
|
|
+ iAwake.Run(component);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void Awake<P1>(Component disposer, P1 p1)
|
|
|
+ public void Awake<P1>(Component component, P1 p1)
|
|
|
{
|
|
|
- this.Add(disposer);
|
|
|
-
|
|
|
- List<AAwakeSystem> iAwakeSystems = this.awakeEvents[disposer.GetType()];
|
|
|
+ List<AAwakeSystem> iAwakeSystems = this.awakeEvents[component.GetType()];
|
|
|
if (iAwakeSystems == null)
|
|
|
{
|
|
|
return;
|
|
|
@@ -207,15 +217,13 @@ namespace ETModel
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
- iAwake.Run(disposer, p1);
|
|
|
+ iAwake.Run(component, p1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void Awake<P1, P2>(Component disposer, P1 p1, P2 p2)
|
|
|
+ public void Awake<P1, P2>(Component component, P1 p1, P2 p2)
|
|
|
{
|
|
|
- this.Add(disposer);
|
|
|
-
|
|
|
- List<AAwakeSystem> iAwakeSystems = this.awakeEvents[disposer.GetType()];
|
|
|
+ List<AAwakeSystem> iAwakeSystems = this.awakeEvents[component.GetType()];
|
|
|
if (iAwakeSystems == null)
|
|
|
{
|
|
|
return;
|
|
|
@@ -233,15 +241,13 @@ namespace ETModel
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
- iAwake.Run(disposer, p1, p2);
|
|
|
+ iAwake.Run(component, p1, p2);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void Awake<P1, P2, P3>(Component disposer, P1 p1, P2 p2, P3 p3)
|
|
|
+ public void Awake<P1, P2, P3>(Component component, P1 p1, P2 p2, P3 p3)
|
|
|
{
|
|
|
- this.Add(disposer);
|
|
|
-
|
|
|
- List<AAwakeSystem> iAwakeSystems = this.awakeEvents[disposer.GetType()];
|
|
|
+ List<AAwakeSystem> iAwakeSystems = this.awakeEvents[component.GetType()];
|
|
|
if (iAwakeSystems == null)
|
|
|
{
|
|
|
return;
|
|
|
@@ -259,43 +265,42 @@ namespace ETModel
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
- iAwake.Run(disposer, p1, p2, p3);
|
|
|
+ iAwake.Run(component, p1, p2, p3);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void Load()
|
|
|
{
|
|
|
- unique.Clear();
|
|
|
while (this.loaders.Count > 0)
|
|
|
{
|
|
|
- Component disposer = this.loaders.Dequeue();
|
|
|
- if (disposer.IsDisposed)
|
|
|
+ long instanceId = this.loaders.Dequeue();
|
|
|
+ Component component;
|
|
|
+ if (!this.allComponents.TryGetValue(instanceId, out component))
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
-
|
|
|
- if (!this.unique.Add(disposer))
|
|
|
+ if (component.IsDisposed)
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
-
|
|
|
- List<ALoadSystem> aLoadSystems = this.loadEvents[disposer.GetType()];
|
|
|
+
|
|
|
+ List<ALoadSystem> aLoadSystems = this.loadEvents[component.GetType()];
|
|
|
if (aLoadSystems == null)
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- this.loaders2.Enqueue(disposer);
|
|
|
+ this.loaders2.Enqueue(instanceId);
|
|
|
|
|
|
foreach (ALoadSystem aLoadSystem in aLoadSystems)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- aLoadSystem.Run(disposer);
|
|
|
+ aLoadSystem.Run(component);
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
- Log.Error(e.ToString());
|
|
|
+ Log.Error(e);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -305,17 +310,16 @@ namespace ETModel
|
|
|
|
|
|
private void Start()
|
|
|
{
|
|
|
- unique.Clear();
|
|
|
while (this.starts.Count > 0)
|
|
|
{
|
|
|
- Component disposer = this.starts.Dequeue();
|
|
|
-
|
|
|
- if (!this.unique.Add(disposer))
|
|
|
+ long instanceId = this.starts.Dequeue();
|
|
|
+ Component component;
|
|
|
+ if (!this.allComponents.TryGetValue(instanceId, out component))
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- List<AStartSystem> aStartSystems = this.startEvents[disposer.GetType()];
|
|
|
+ List<AStartSystem> aStartSystems = this.startEvents[component.GetType()];
|
|
|
if (aStartSystems == null)
|
|
|
{
|
|
|
continue;
|
|
|
@@ -325,11 +329,11 @@ namespace ETModel
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- aStartSystem.Run(disposer);
|
|
|
+ aStartSystem.Run(component);
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
- Log.Error(e.ToString());
|
|
|
+ Log.Error(e);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -338,38 +342,37 @@ namespace ETModel
|
|
|
public void Update()
|
|
|
{
|
|
|
this.Start();
|
|
|
-
|
|
|
- this.unique.Clear();
|
|
|
+
|
|
|
while (this.updates.Count > 0)
|
|
|
{
|
|
|
- Component disposer = this.updates.Dequeue();
|
|
|
- if (disposer.IsDisposed)
|
|
|
+ long instanceId = this.updates.Dequeue();
|
|
|
+ Component component;
|
|
|
+ if (!this.allComponents.TryGetValue(instanceId, out component))
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
-
|
|
|
- if (!this.unique.Add(disposer))
|
|
|
+ if (component.IsDisposed)
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- List<AUpdateSystem> aUpdateSystems = this.updateEvents[disposer.GetType()];
|
|
|
+ List<AUpdateSystem> aUpdateSystems = this.updateEvents[component.GetType()];
|
|
|
if (aUpdateSystems == null)
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- this.updates2.Enqueue(disposer);
|
|
|
+ this.updates2.Enqueue(instanceId);
|
|
|
|
|
|
foreach (AUpdateSystem aUpdateSystem in aUpdateSystems)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- aUpdateSystem.Run(disposer);
|
|
|
+ aUpdateSystem.Run(component);
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
- Log.Error(e.ToString());
|
|
|
+ Log.Error(e);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -379,37 +382,36 @@ namespace ETModel
|
|
|
|
|
|
public void LateUpdate()
|
|
|
{
|
|
|
- this.unique.Clear();
|
|
|
while (this.lateUpdates.Count > 0)
|
|
|
{
|
|
|
- Component disposer = this.lateUpdates.Dequeue();
|
|
|
- if (disposer.IsDisposed)
|
|
|
+ long instanceId = this.lateUpdates.Dequeue();
|
|
|
+ Component component;
|
|
|
+ if (!this.allComponents.TryGetValue(instanceId, out component))
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
-
|
|
|
- if (!this.unique.Add(disposer))
|
|
|
+ if (component.IsDisposed)
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- List<ALateUpdateSystem> aLateUpdateSystems = this.lateUpdateEvents[disposer.GetType()];
|
|
|
+ List<ALateUpdateSystem> aLateUpdateSystems = this.lateUpdateEvents[component.GetType()];
|
|
|
if (aLateUpdateSystems == null)
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- this.lateUpdates2.Enqueue(disposer);
|
|
|
+ this.lateUpdates2.Enqueue(instanceId);
|
|
|
|
|
|
foreach (ALateUpdateSystem aLateUpdateSystem in aLateUpdateSystems)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- aLateUpdateSystem.Run(disposer);
|
|
|
+ aLateUpdateSystem.Run(component);
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
- Log.Error(e.ToString());
|
|
|
+ Log.Error(e);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -432,7 +434,7 @@ namespace ETModel
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
- Log.Error(e.ToString());
|
|
|
+ Log.Error(e);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -452,7 +454,7 @@ namespace ETModel
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
- Log.Error(e.ToString());
|
|
|
+ Log.Error(e);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -472,7 +474,7 @@ namespace ETModel
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
- Log.Error(e.ToString());
|
|
|
+ Log.Error(e);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -492,7 +494,7 @@ namespace ETModel
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
- Log.Error(e.ToString());
|
|
|
+ Log.Error(e);
|
|
|
}
|
|
|
}
|
|
|
}
|