You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.2 KiB
83 lines
2.2 KiB
using System; |
|
using System.Collections.Generic; |
|
using System.Threading.Tasks; |
|
|
|
namespace ET |
|
{ |
|
[ObjectSystem] |
|
public class ConfigAwakeSystem : AwakeSystem<ConfigComponent> |
|
{ |
|
public override void Awake(ConfigComponent self) |
|
{ |
|
ConfigComponent.Instance = self; |
|
} |
|
} |
|
|
|
[ObjectSystem] |
|
public class ConfigDestroySystem : DestroySystem<ConfigComponent> |
|
{ |
|
public override void Destroy(ConfigComponent self) |
|
{ |
|
ConfigComponent.Instance = null; |
|
} |
|
} |
|
|
|
[FriendClass(typeof(ConfigComponent))] |
|
public static class ConfigComponentSystem |
|
{ |
|
public static void LoadOneConfig(this ConfigComponent self, Type configType) |
|
{ |
|
byte[] oneConfigBytes = self.ConfigLoader.GetOneConfigBytes(configType.FullName); |
|
|
|
object category = ProtobufHelper.FromBytes(configType, oneConfigBytes, 0, oneConfigBytes.Length); |
|
|
|
self.AllConfig[configType] = category; |
|
} |
|
|
|
public static void Load(this ConfigComponent self) |
|
{ |
|
self.AllConfig.Clear(); |
|
List<Type> types = Game.EventSystem.GetTypes(typeof (ConfigAttribute)); |
|
|
|
Dictionary<string, byte[]> configBytes = new Dictionary<string, byte[]>(); |
|
self.ConfigLoader.GetAllConfigBytes(configBytes); |
|
|
|
foreach (Type type in types) |
|
{ |
|
self.LoadOneInThread(type, configBytes); |
|
} |
|
} |
|
|
|
public static async ETTask LoadAsync(this ConfigComponent self) |
|
{ |
|
self.AllConfig.Clear(); |
|
List<Type> types = Game.EventSystem.GetTypes(typeof (ConfigAttribute)); |
|
|
|
Dictionary<string, byte[]> configBytes = new Dictionary<string, byte[]>(); |
|
self.ConfigLoader.GetAllConfigBytes(configBytes); |
|
|
|
using (ListComponent<Task> listTasks = ListComponent<Task>.Create()) |
|
{ |
|
foreach (Type type in types) |
|
{ |
|
Task task = Task.Run(() => self.LoadOneInThread(type, configBytes)); |
|
listTasks.Add(task); |
|
} |
|
|
|
await Task.WhenAll(listTasks.ToArray()); |
|
} |
|
} |
|
|
|
private static void LoadOneInThread(this ConfigComponent self, Type configType, Dictionary<string, byte[]> configBytes) |
|
{ |
|
byte[] oneConfigBytes = configBytes[configType.Name]; |
|
|
|
object category = ProtobufHelper.FromBytes(configType, oneConfigBytes, 0, oneConfigBytes.Length); |
|
|
|
lock (self) |
|
{ |
|
self.AllConfig[configType] = category; |
|
} |
|
} |
|
} |
|
} |