Пример #1
0
        public static List <SkillInfo> FindActionsUsingEvent(SkillState state, string eventName)
        {
            List <SkillInfo> list = new List <SkillInfo>();
            int num = 0;

            SkillStateAction[] actions = state.get_Actions();
            for (int i = 0; i < actions.Length; i++)
            {
                SkillStateAction fsmStateAction = actions[i];
                SkillInfo.currentInfo = new SkillInfo
                {
                    fsm         = state.get_Fsm(),
                    state       = state,
                    action      = fsmStateAction,
                    actionIndex = num
                };
                list.AddRange(SkillInfo.FindEventUsage(fsmStateAction, eventName));
                num++;
            }
            return(list);
        }
Пример #2
0
        private static IEnumerable <SkillInfo> FindEventUsage(object obj, string eventName)
        {
            List <SkillInfo> list = new List <SkillInfo>();

            if (obj != null)
            {
                Type        type   = obj.GetType();
                FieldInfo[] fields = type.GetFields(20);
                FieldInfo[] array  = fields;
                for (int i = 0; i < array.Length; i++)
                {
                    FieldInfo fieldInfo = array[i];
                    Type      fieldType = fieldInfo.get_FieldType();
                    object    value     = fieldInfo.GetValue(obj);
                    if (fieldType == typeof(SkillEventTarget))
                    {
                        SkillInfo.currentEventTarget = (value as SkillEventTarget);
                    }
                    if (SkillInfo.IsEventUsedInField(fieldType, value, eventName))
                    {
                        list.Add(new SkillInfo(SkillInfo.currentInfo)
                        {
                            field       = fieldInfo,
                            eventTarget = SkillInfo.currentEventTarget
                        });
                    }
                    else
                    {
                        if (fieldType.get_IsClass())
                        {
                            list.AddRange(SkillInfo.FindEventUsage(value, eventName));
                        }
                    }
                }
            }
            return(list);
        }