|
|
@@ -33,6 +33,8 @@ namespace ETModel
|
|
|
private readonly UnOrderMultiMap<Type, ILateUpdateSystem> lateUpdateSystems = new UnOrderMultiMap<Type, ILateUpdateSystem>();
|
|
|
|
|
|
private readonly UnOrderMultiMap<Type, IChangeSystem> changeSystems = new UnOrderMultiMap<Type, IChangeSystem>();
|
|
|
+
|
|
|
+ private readonly UnOrderMultiMap<Type, IDeserializeSystem> deserializeSystems = new UnOrderMultiMap<Type, IDeserializeSystem>();
|
|
|
|
|
|
private Queue<long> updates = new Queue<long>();
|
|
|
private Queue<long> updates2 = new Queue<long>();
|
|
|
@@ -82,46 +84,32 @@ namespace ETModel
|
|
|
|
|
|
object obj = Activator.CreateInstance(type);
|
|
|
|
|
|
- IAwakeSystem objectSystem = obj as IAwakeSystem;
|
|
|
- if (objectSystem != null)
|
|
|
- {
|
|
|
- this.awakeSystems.Add(objectSystem.Type(), objectSystem);
|
|
|
- }
|
|
|
-
|
|
|
- IUpdateSystem updateSystem = obj as IUpdateSystem;
|
|
|
- if (updateSystem != null)
|
|
|
- {
|
|
|
- this.updateSystems.Add(updateSystem.Type(), updateSystem);
|
|
|
- }
|
|
|
-
|
|
|
- ILateUpdateSystem lateUpdateSystem = obj as ILateUpdateSystem;
|
|
|
- if (lateUpdateSystem != null)
|
|
|
- {
|
|
|
- this.lateUpdateSystems.Add(lateUpdateSystem.Type(), lateUpdateSystem);
|
|
|
- }
|
|
|
-
|
|
|
- IStartSystem startSystem = obj as IStartSystem;
|
|
|
- if (startSystem != null)
|
|
|
- {
|
|
|
- this.startSystems.Add(startSystem.Type(), startSystem);
|
|
|
- }
|
|
|
-
|
|
|
- IDestroySystem destroySystem = obj as IDestroySystem;
|
|
|
- if (destroySystem != null)
|
|
|
- {
|
|
|
- this.destroySystems.Add(destroySystem.Type(), destroySystem);
|
|
|
- }
|
|
|
-
|
|
|
- ILoadSystem loadSystem = obj as ILoadSystem;
|
|
|
- if (loadSystem != null)
|
|
|
- {
|
|
|
- this.loadSystems.Add(loadSystem.Type(), loadSystem);
|
|
|
- }
|
|
|
-
|
|
|
- IChangeSystem changeSystem = obj as IChangeSystem;
|
|
|
- if (changeSystem != null)
|
|
|
- {
|
|
|
- this.changeSystems.Add(changeSystem.Type(), changeSystem);
|
|
|
+ switch (obj)
|
|
|
+ {
|
|
|
+ case IAwakeSystem objectSystem:
|
|
|
+ this.awakeSystems.Add(objectSystem.Type(), objectSystem);
|
|
|
+ break;
|
|
|
+ case IUpdateSystem updateSystem:
|
|
|
+ this.updateSystems.Add(updateSystem.Type(), updateSystem);
|
|
|
+ break;
|
|
|
+ case ILateUpdateSystem lateUpdateSystem:
|
|
|
+ this.lateUpdateSystems.Add(lateUpdateSystem.Type(), lateUpdateSystem);
|
|
|
+ break;
|
|
|
+ case IStartSystem startSystem:
|
|
|
+ this.startSystems.Add(startSystem.Type(), startSystem);
|
|
|
+ break;
|
|
|
+ case IDestroySystem destroySystem:
|
|
|
+ this.destroySystems.Add(destroySystem.Type(), destroySystem);
|
|
|
+ break;
|
|
|
+ case ILoadSystem loadSystem:
|
|
|
+ this.loadSystems.Add(loadSystem.Type(), loadSystem);
|
|
|
+ break;
|
|
|
+ case IChangeSystem changeSystem:
|
|
|
+ this.changeSystems.Add(changeSystem.Type(), changeSystem);
|
|
|
+ break;
|
|
|
+ case IDeserializeSystem deserializeSystem:
|
|
|
+ this.deserializeSystems.Add(deserializeSystem.Type(), deserializeSystem);
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -207,6 +195,32 @@ namespace ETModel
|
|
|
this.allComponents.TryGetValue(id, out component);
|
|
|
return component;
|
|
|
}
|
|
|
+
|
|
|
+ public void Deserialize(Component component)
|
|
|
+ {
|
|
|
+ List<IDeserializeSystem> iDeserializeSystems = this.deserializeSystems[component.GetType()];
|
|
|
+ if (iDeserializeSystems == null)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach (IDeserializeSystem deserializeSystem in iDeserializeSystems)
|
|
|
+ {
|
|
|
+ if (deserializeSystem == null)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ deserializeSystem.Run(component);
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ Log.Error(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
public void Awake(Component component)
|
|
|
{
|