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); }
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); }