Example #1
0
    public static async Task Init(InitCallback initCallback, params Func <Task>[] initTasks)
    {
        if (null != Instance)
        {
            throw new ApplicationException("SystemManager already exsited, can't run Init more than once!");
        }

        var go = new GameObject("Systems", typeof(SystemManager));

        DontDestroyOnLoad(go);

        SystemInitLog.Log("----------Initialize Game----------");
        for (int i = 0; i < initTasks.Length; ++i)
        {
            var    func    = initTasks[i];
            string sysName = GetName(func);
            initCallback(0, sysName, (float)i / initTasks.Length);
            SystemInitLog.Log(sysName);
            await func();

            Instance.AddSystem(func);
            initCallback(0, sysName, (float)(i + 1) / initTasks.Length);
        }
        SystemInitLog.Log("----------Initialize Finished----------");
    }
Example #2
0
 void AddSystem(Func <Task> func)
 {
     try
     {
         var declaringType = func.Method.DeclaringType;
         if (declaringType.IsGenericType &&
             declaringType.GenericTypeArguments[0].Name.Contains("System"))
         {
             var prop = declaringType.GetProperty(
                 "Instance",
                 BindingFlags.Public | BindingFlags.Static);
             systems.Add(new System(prop.GetValue(null)));
         }
     }
     catch (Exception e)
     {
         SystemInitLog.LogException(e);
     }
 }