private static void Cache <T>(MonoBehaviour p) where T : SFHCall
    {
        var type = p.GetType();
        // 不会重复调用父类的方法了。
        var fields2 = type.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly);

        foreach (var field in fields2)
        {
            AtrributeFlagFunction aff = new AtrributeFlagFunction();
            var objs = field.GetCustomAttributes(typeof(T), false);
            if (objs.Length > 0)
            {
                aff.monob      = p;
                aff.methodInfo = field;
                T   attr  = (T)objs[0];
                int value = attr.GetLevel();
                if (!myFuctionList.ContainsKey(value))
                {
                    {
                        List <AtrributeFlagFunction> AttributeList = new List <AtrributeFlagFunction>();
                        AttributeList.Add(aff);
                        myFuctionList.Add(value, AttributeList);
                    }
                }
                else
                {
                    List <AtrributeFlagFunction> mlist = (List <AtrributeFlagFunction>)myFuctionList[value];
                    mlist.Add(aff);
                }
                //Debug.Log(field.GetMethodBody().ToString() + "my levle is  " + value);
            }
        }
    }
Exemple #2
0
 private static void InitialStart()
 {
     MonoBehaviour[] testMono = GetScriptAssetsOfType <MonoBehaviour>();
     AttributeUtils.GetAllDestByProperties <SFHStartCall>(testMono);
     for (int i = 0; i < AttributeUtils.myFuctionList.Count; i++)
     {
         List <AtrributeFlagFunction> mlist = (List <AtrributeFlagFunction>)AttributeUtils.myFuctionList.GetByIndex(i);
         for (int j = 0; j < mlist.Count; j++)
         {
             AtrributeFlagFunction item = (AtrributeFlagFunction)mlist[j];
             Debug.Log("order is " + AttributeUtils.myFuctionList.GetKey(i));
             MonoBehaviour monob  = (MonoBehaviour)item.monob;
             object        result = item.methodInfo.Invoke((object)monob, new object[] { });
             if (item.methodInfo.ReturnType == typeof(IEnumerator))
             {
                 monob.StartCoroutine((IEnumerator)result);
             }
         }
     }
 }