Esempio n. 1
0
            public void Init()
            {
                if (argMode == ActionArgMode.NoArg)
                {
                    action = Activator.CreateInstance(typeof(ActionVoid)) as DelegateBase;
                    typeof(ActionVoid).GetMethod("Init").Invoke(action, new object[] { instance, actionName });
                }
                else if (argMode == ActionArgMode.Arg1)
                {
                    //一つ目の引数のタイプ(Typeがシリアル化不可のため)
                    Type type1 = typeof(object);
                    switch (argType1)
                    {
                    case ArgType.UnityObject:
                        type1 = arg1.GetTypeArg(ArgType.UnityObject).GetType();
                        break;

                    case ArgType.Bool:
                        type1 = typeof(bool);
                        break;

                    case ArgType.Float:
                        type1 = typeof(float);
                        break;

                    case ArgType.Int:
                        type1 = typeof(int);
                        break;

                    case ArgType.String:
                        type1 = typeof(string);
                        break;
                    }

                    Type type = typeof(ActionVoid <>).MakeGenericType(type1);
                    action = Activator.CreateInstance(type) as DelegateBase;
                    //delegate作成
                    type.GetMethod("Init").Invoke(action, new object[] { instance, actionName, arg1.GetTypeArg(argType1) });
                }
                else if (argMode == ActionArgMode.Arg2)
                {
                    //一つ目の引数のタイプ(Typeがシリアル化不可のため)
                    Type type1 = typeof(object);
                    switch (argType1)
                    {
                    case ArgType.UnityObject:
                        type1 = arg1.GetTypeArg(ArgType.UnityObject).GetType();
                        break;

                    case ArgType.Bool:
                        type1 = typeof(bool);
                        break;

                    case ArgType.Float:
                        type1 = typeof(float);
                        break;

                    case ArgType.Int:
                        type1 = typeof(int);
                        break;

                    case ArgType.String:
                        type1 = typeof(string);
                        break;
                    }
                    //二つ目の引数
                    Type type2 = typeof(object);
                    switch (argType2)
                    {
                    case ArgType.UnityObject:
                        type2 = arg2.GetTypeArg(ArgType.UnityObject).GetType();
                        break;

                    case ArgType.Bool:
                        type2 = typeof(bool);
                        break;

                    case ArgType.Float:
                        type2 = typeof(float);
                        break;

                    case ArgType.Int:
                        type2 = typeof(int);
                        break;

                    case ArgType.String:
                        type2 = typeof(string);
                        break;
                    }

                    Type type = typeof(ActionVoid <,>).MakeGenericType(type1, type2);
                    action = Activator.CreateInstance(type) as DelegateBase;
                    //delegate作成
                    type.GetMethod("Init").Invoke(action, new object[] { instance, actionName, arg1.GetTypeArg(argType1), arg2.GetTypeArg(argType2) });
                }
            }
Esempio n. 2
0
            public void Init()
            {
                if (argMode == ActionArgMode.NoArg)
                {
                    action = Activator.CreateInstance(typeof(ActionVoid)) as DelegateBase;
                    typeof(ActionVoid).GetMethod("Init").Invoke(action, new object[] { instance, actionName });
                }
                else if (argMode == ActionArgMode.Arg1)
                {
                    //一つ目の引数のタイプ(Typeがシリアル化不可のため)
                    Type type1 = typeof(object);
                    switch (argType1)
                    {
                    case ArgType.UnityObject:
                        type1 = arg1.GetTypeArg(ArgType.UnityObject).GetType();
                        break;

                    case ArgType.Bool:
                        type1 = typeof(bool);
                        break;

                    case ArgType.Float:
                        type1 = typeof(float);
                        break;

                    case ArgType.Int:
                        type1 = typeof(int);
                        break;

                    case ArgType.String:
                        type1 = typeof(string);
                        break;

                    case ArgType.Enum:
                        type1 = typeof(int);
                        break;
                    }

                    Type type = typeof(ActionVoid <>).MakeGenericType(type1);
                    action = Activator.CreateInstance(type) as DelegateBase;
                    //delegate作成
                    if (argType1 == ArgType.Enum)
                    {
                        type.GetMethod("Init").Invoke(action, new object[] { instance, actionName, arg1.GetTypeArg(argType1), arg1.GetEnumType(), arg1.assembly_Name });
                    }
                    else
                    {
                        type.GetMethod("Init").Invoke(action, new object[] { instance, actionName, arg1.GetTypeArg(argType1), null, null });
                    }
                }
                else if (argMode == ActionArgMode.Arg2)
                {
                    //一つ目の引数のタイプ(Typeがシリアル化不可のため)
                    Type type1 = typeof(object);
                    switch (argType1)
                    {
                    case ArgType.UnityObject:
                        type1 = arg1.GetTypeArg(ArgType.UnityObject).GetType();
                        break;

                    case ArgType.Bool:
                        type1 = typeof(bool);
                        break;

                    case ArgType.Float:
                        type1 = typeof(float);
                        break;

                    case ArgType.Int:
                        type1 = typeof(int);
                        break;

                    case ArgType.String:
                        type1 = typeof(string);
                        break;

                    case ArgType.Enum:
                        type1 = typeof(int);
                        break;
                    }
                    //二つ目の引数
                    Type type2 = typeof(object);
                    switch (argType2)
                    {
                    case ArgType.UnityObject:
                        type2 = arg2.GetTypeArg(ArgType.UnityObject).GetType();
                        break;

                    case ArgType.Bool:
                        type2 = typeof(bool);
                        break;

                    case ArgType.Float:
                        type2 = typeof(float);
                        break;

                    case ArgType.Int:
                        type2 = typeof(int);
                        break;

                    case ArgType.String:
                        type2 = typeof(string);
                        break;

                    case ArgType.Enum:
                        type2 = typeof(int);
                        break;
                    }

                    Type type = typeof(ActionVoid <,>).MakeGenericType(type1, type2);
                    action = Activator.CreateInstance(type) as DelegateBase;
                    string enum1 = null, enum2 = null, enumAs1 = null, enumAs2 = null;
                    if (argType1 == ArgType.Enum)
                    {
                        enum1   = arg1.enum_Name;
                        enumAs1 = arg1.assembly_Name;
                    }
                    if (argType2 == ArgType.Enum)
                    {
                        enum2   = arg2.enum_Name;
                        enumAs2 = arg2.assembly_Name;
                    }
                    //delegate作成
                    type.GetMethod("Init").Invoke(action, new object[] { instance, actionName, arg1.GetTypeArg(argType1), arg2.GetTypeArg(argType2), enum1, enum2, enumAs1, enumAs2 });
                }
            }