public void Initialize(TestityInvokableCallList invokableList, TestityEventBase unityEventBase)
		{
			foreach (TestityPersistentCall mCall in this.m_Calls)
			{
				if (mCall.IsValid())
				{
					TestityBaseInvokableCall runtimeCall = mCall.GetRuntimeCall(unityEventBase);
					if (runtimeCall == null)
					{
						continue;
					}
					invokableList.AddPersistentInvokableCall(runtimeCall);
				}
			}
		}
示例#2
0
        private static GenericMenu BuildPopupList(UnityEngine.Object target, TestityEventBase dummyEvent, SerializedProperty listener)
        {
            UnityEngine.Object @object = target;
            if (@object is Component)
            {
                @object = (target as Component).gameObject;
            }
            SerializedProperty serializedProperty = listener.FindPropertyRelative("m_MethodName");
            GenericMenu        genericMenu        = new GenericMenu();

            genericMenu.AddItem(new GUIContent("No Function"), string.IsNullOrEmpty(serializedProperty.stringValue), new GenericMenu.MenuFunction2(TesityEventDrawer.ClearEventFunction), new TesityEventDrawer.UnityEventFunction(listener, null, null, TestityPersistentListenerMode.EventDefined));
            if (@object == null)
            {
                return(genericMenu);
            }
            genericMenu.AddSeparator(string.Empty);
            Type       type   = dummyEvent.GetType();
            MethodInfo method = type.GetMethod("Invoke");

            Type[] delegateArgumentsTypes = (
                from x in method.GetParameters()
                select x.ParameterType).ToArray <Type>();
            TesityEventDrawer.GeneratePopUpForType(genericMenu, @object, false, listener, delegateArgumentsTypes);
            if (@object is GameObject)
            {
                Component[]   components = (@object as GameObject).GetComponents <Component>();
                List <string> list       = (
                    from c in components
                    where c != null
                    select c.GetType().Name into x
                    group x by x into g
                    where g.Count <string>() > 1
                    select g.Key).ToList <string>();
                Component[] array = components;
                for (int i = 0; i < array.Length; i++)
                {
                    Component component = array[i];
                    if (!(component == null))
                    {
                        TesityEventDrawer.GeneratePopUpForType(genericMenu, component, list.Contains(component.GetType().Name), listener, delegateArgumentsTypes);
                    }
                }
            }
            return(genericMenu);
        }
示例#3
0
        private static string GetEventParams(TestityEventBase evt)
        {
            MethodInfo    methodInfo    = evt.FindMethod("Invoke", evt, TestityPersistentListenerMode.EventDefined, null);
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.Append(" (");
            Type[] array = (
                from x in methodInfo.GetParameters()
                select x.ParameterType).ToArray <Type>();
            for (int i = 0; i < array.Length; i++)
            {
                stringBuilder.Append(array[i].Name);
                if (i < array.Length - 1)
                {
                    stringBuilder.Append(", ");
                }
            }
            stringBuilder.Append(")");
            return(stringBuilder.ToString());
        }
示例#4
0
 public void OnGUI(Rect position)
 {
     if (this.m_ListenersArray == null || !this.m_ListenersArray.isArray)
     {
         return;
     }
     this.m_DummyEvent = TesityEventDrawer.GetDummyEvent(this.m_Prop);
     if (this.m_DummyEvent == null)
     {
         return;
     }
     if (this.m_Styles == null)
     {
         this.m_Styles = new TesityEventDrawer.Styles();
     }
     if (this.m_ReorderableList != null)
     {
         int indentLevel = EditorGUI.indentLevel;
         EditorGUI.indentLevel = 0;
         this.m_ReorderableList.DoList(position);
         EditorGUI.indentLevel = indentLevel;
     }
 }
		private static GenericMenu BuildPopupList(UnityEngine.Object target, TestityEventBase dummyEvent, SerializedProperty listener)
		{
			UnityEngine.Object @object = target;
			if (@object is Component)
			{
				@object = (target as Component).gameObject;
			}
			SerializedProperty serializedProperty = listener.FindPropertyRelative("m_MethodName");
			GenericMenu genericMenu = new GenericMenu();
			genericMenu.AddItem(new GUIContent("No Function"), string.IsNullOrEmpty(serializedProperty.stringValue), new GenericMenu.MenuFunction2(TesityEventDrawer.ClearEventFunction), new TesityEventDrawer.UnityEventFunction(listener, null, null, TestityPersistentListenerMode.EventDefined));
			if (@object == null)
			{
				return genericMenu;
			}
			genericMenu.AddSeparator(string.Empty);
			Type type = dummyEvent.GetType();
			MethodInfo method = type.GetMethod("Invoke");
			Type[] delegateArgumentsTypes = (
				from x in method.GetParameters()
				select x.ParameterType).ToArray<Type>();
			TesityEventDrawer.GeneratePopUpForType(genericMenu, @object, false, listener, delegateArgumentsTypes);
			if (@object is GameObject)
			{
				Component[] components = (@object as GameObject).GetComponents<Component>();
				List<string> list = (
					from c in components
					where c != null
					select c.GetType().Name into x
					group x by x into g
					where g.Count<string>() > 1
					select g.Key).ToList<string>();
				Component[] array = components;
				for (int i = 0; i < array.Length; i++)
				{
					Component component = array[i];
					if (!(component == null))
					{
						TesityEventDrawer.GeneratePopUpForType(genericMenu, component, list.Contains(component.GetType().Name), listener, delegateArgumentsTypes);
					}
				}
			}
			return genericMenu;
		}
		public static bool IsPersistantListenerValid(TestityEventBase dummyEvent, string methodName, UnityEngine.Object uObject, TestityPersistentListenerMode modeEnum, Type argumentType)
		{
			return !(uObject == null) && !string.IsNullOrEmpty(methodName) && dummyEvent.FindMethod(methodName, uObject, modeEnum, argumentType) != null;
		}
		public void OnGUI(Rect position)
		{
			if (this.m_ListenersArray == null || !this.m_ListenersArray.isArray)
			{
				return;
			}
			this.m_DummyEvent = TesityEventDrawer.GetDummyEvent(this.m_Prop);
			if (this.m_DummyEvent == null)
			{
				return;
			}
			if (this.m_Styles == null)
			{
				this.m_Styles = new TesityEventDrawer.Styles();
			}
			if (this.m_ReorderableList != null)
			{
				int indentLevel = EditorGUI.indentLevel;
				EditorGUI.indentLevel = 0;
				this.m_ReorderableList.DoList(position);
				EditorGUI.indentLevel = indentLevel;
			}
		}
		private static string GetEventParams(TestityEventBase evt)
		{
			MethodInfo methodInfo = evt.FindMethod("Invoke", evt, TestityPersistentListenerMode.EventDefined, null);
			StringBuilder stringBuilder = new StringBuilder();
			stringBuilder.Append(" (");
			Type[] array = (
				from x in methodInfo.GetParameters()
				select x.ParameterType).ToArray<Type>();
			for (int i = 0; i < array.Length; i++)
			{
				stringBuilder.Append(array[i].Name);
				if (i < array.Length - 1)
				{
					stringBuilder.Append(", ");
				}
			}
			stringBuilder.Append(")");
			return stringBuilder.ToString();
		}
		public TestityBaseInvokableCall GetRuntimeCall(TestityEventBase theEvent)
		{
			if (this.m_CallState == TestityEventCallState.RuntimeOnly && !Application.isPlaying)
			{
				return null;
			}
			if (this.m_CallState == TestityEventCallState.Off || theEvent == null)
			{
				return null;
			}

			MethodInfo methodInfo = theEvent.FindMethod(this);

			if (methodInfo == null)
			{
				return null;
			}
			switch (this.m_Mode)
			{
				case TestityPersistentListenerMode.EventDefined:
					{
						return theEvent.GetDelegate(this.target, methodInfo);
					}
				case TestityPersistentListenerMode.Void:
					{
						return new TestityInvokableCall(this.target, methodInfo);
					}
				case TestityPersistentListenerMode.Object:
					{
						return TestityPersistentCall.GetObjectCall(this.target, methodInfo, this.m_Arguments);
					}
				case TestityPersistentListenerMode.Int:
					{
						return new TestityCachedInvokableCall<int>(this.target, methodInfo, this.m_Arguments.intArgument);
					}
				case TestityPersistentListenerMode.Float:
					{
						return new TestityCachedInvokableCall<float>(this.target, methodInfo, this.m_Arguments.floatArgument);
					}
				case TestityPersistentListenerMode.String:
					{
						return new TestityCachedInvokableCall<string>(this.target, methodInfo, this.m_Arguments.stringArgument);
					}
				case TestityPersistentListenerMode.Bool:
					{
						return new TestityCachedInvokableCall<bool>(this.target, methodInfo, this.m_Arguments.boolArgument);
					}
			}
			return null;
		}
示例#10
0
 public static bool IsPersistantListenerValid(TestityEventBase dummyEvent, string methodName, UnityEngine.Object uObject, TestityPersistentListenerMode modeEnum, Type argumentType)
 {
     return(!(uObject == null) && !string.IsNullOrEmpty(methodName) && dummyEvent.FindMethod(methodName, uObject, modeEnum, argumentType) != null);
 }