Beispiel #1
0
            /// <summary>Creates a MethodEventBinder to handle event binding for all overloads that are part of this method.</summary>
            /// <param name="FullMethodSet">Array of all of the overloads of this method.</param>
            public MethodEventBinder(MethodInfo[] FullMethodSet)
            {
                //Copies information
                MethodName = FullMethodSet[0].Name;

                //Creates OverloadEventBinders
                MethodOverloads = new OverloadEventBinder[FullMethodSet.Length];
                for (int i = 0; i < FullMethodSet.Length; i++)
                {
                    MethodOverloads[i] = new OverloadEventBinder(FullMethodSet[i]);
                }
            }
Beispiel #2
0
            /// <summary>Creates and binds a new BindedEvent.</summary>
            /// <returns>The BindedEvent.</returns>
            /// <param name="DesiredTriggerType">The desired trigger type.</param>
            /// <param name="DesiredOverload">The method overload to bind.</param>
            /// <param name="MethodParamaterValues">The values to pass as paramaters to the method overload.</param>
            public BindedEvent CreateAndBindEvent(EventTriggerType DesiredTriggerType, OverloadEventBinder DesiredOverload, object[] MethodParamaterValues)
            {
                //Creates invokable action and name
                UnityAction <object> Callback  = DesiredOverload.CreateInvokableAction((object[])MethodParamaterValues.Clone());
                string           EventName     = DesiredOverload.CreateEventName(MethodParamaterValues);
                UnityObjectEvent CallbackEvent = new UnityObjectEvent();

                UnityEventTools.AddPersistentListener(CallbackEvent, Callback);

                //Binds the event
                return(new BindedEvent(EventName, DesiredTriggerType, CallbackEvent, ClassType));
            }
Beispiel #3
0
            //Draws Playlist inspector
            public override void OnInspectorGUI()
            {
                if (!CreatingEvent)
                {
                    CreatingEvent |= GUILayout.Button("Create new Event");
                }
                else
                {
                    SelectedTrigger = (EventTriggerType)EditorGUILayout.EnumPopup("Event Trigger Type", SelectedTrigger);


                    int NewClassIndex = EditorGUILayout.Popup("Manager", SelectedClassIndex, ClassNames);
                    if (NewClassIndex != SelectedClassIndex)
                    {
                        SelectedMethodIndex   = 0;
                        SelectedOverloadIndex = 0;
                    }
                    SelectedClassIndex = NewClassIndex;
                    ClassEventBinder SelectedClass = ClassBinders[SelectedClassIndex];


                    int NewMethodIndex = EditorGUILayout.Popup("Method", SelectedMethodIndex, SelectedClass.MethodNameList);
                    if (NewMethodIndex != SelectedMethodIndex)
                    {
                        SelectedOverloadIndex = 0;
                    }
                    SelectedMethodIndex = NewMethodIndex;
                    MethodEventBinder SelectedMethod = SelectedClass.BindableMethods[SelectedMethodIndex];

                    if (SelectedMethod.MethodOverloads.Length > 1)
                    {
                        SelectedOverloadIndex = EditorGUILayout.Popup("Overload", SelectedOverloadIndex, SelectedMethod.OverloadNameList);
                    }
                    else
                    {
                        SelectedOverloadIndex = 0;
                    }
                    OverloadEventBinder SelectedOverload = SelectedMethod.MethodOverloads[SelectedOverloadIndex];
                    EditorGUILayout.LabelField(SelectedOverload.FullDisplayName, EditorStyles.wordWrappedMiniLabel);
                    if (SelectedOverload != LastSelectedOverload)
                    {
                        LastSelectedOverload = SelectedOverload;
                        CurrentParams        = new object[SelectedOverload.MethodParamaters.Length];
                        for (int i = 0; i < CurrentParams.Length; i++)
                        {
                            ParameterInfo Param     = SelectedOverload.MethodParamaters[i];
                            Type          ParamType = Param.ParameterType;
                            if (!DBNull.Value.Equals(Param.DefaultValue))
                            {
                                CurrentParams[i] = Param.DefaultValue;
                            }
                            else
                            {
                                if (ParamType.IsValueType)
                                {
                                    CurrentParams[i] = Activator.CreateInstance(ParamType);
                                }
                                else if (ParamType == typeof(string))
                                {
                                    CurrentParams[i] = "";
                                }
                                else
                                {
                                    CurrentParams[i] = null;
                                }
                            }
                        }
                    }
                    for (int i = 0; i < CurrentParams.Length; i++)
                    {
                        ParameterInfo Param = SelectedOverload.MethodParamaters[i];
                        if (Param.ParameterType == typeof(int))
                        {
                            CurrentParams[i] = EditorGUILayout.IntField(Param.Name, (int)CurrentParams[i]);
                        }
                        else if (Param.ParameterType == typeof(float))
                        {
                            CurrentParams[i] = EditorGUILayout.FloatField(Param.Name, (float)CurrentParams[i]);
                        }
                        else if (Param.ParameterType == typeof(string))
                        {
                            CurrentParams[i] = EditorGUILayout.TextField(Param.Name, (string)CurrentParams[i]);
                        }
                        else if (Param.ParameterType == typeof(bool))
                        {
                            CurrentParams[i] = EditorGUILayout.Toggle(Param.Name, (bool)CurrentParams[i]);
                        }
                        else if (Param.ParameterType == typeof(Vector3))
                        {
                            CurrentParams[i] = EditorGUILayout.Vector3Field(Param.Name, (Vector3)CurrentParams[i]);
                        }
                        else if (typeof(UnityEngine.Object).IsAssignableFrom(Param.ParameterType))
                        {
                            CurrentParams[i] = EditorGUILayout.ObjectField(Param.Name, (UnityEngine.Object)CurrentParams[i], Param.ParameterType, !(typeof(ScriptableObject).IsAssignableFrom(Param.ParameterType) || EditorUtility.IsPersistent(target)));
                        }
                        else
                        {
                            EditorGUILayout.LabelField(CurrentParams[i] == null ? "null" : CurrentParams[i].ToString());
                        }
                    }

                    GUILayout.BeginHorizontal();
                    if (GUILayout.Button("Bind Event"))
                    {
                        BindedEvent NewBindedEvent = SelectedClass.CreateAndBindEvent(SelectedTrigger, SelectedOverload, CurrentParams);
                        //serializedObject.FindProperty("AllEvents").InsertArrayElementAtIndex(0);
                        //serializedObject.FindProperty("AllEvents").GetArrayElementAtIndex(0).objectReferenceValue  = NewBindedEvent;
                        ((AMPEventBinder)target).AllEvents.Add(NewBindedEvent);
                        CreatingEvent = false;
                    }
                    if (GUILayout.Button("Cancel"))
                    {
                        CreatingEvent = false;
                    }
                    GUILayout.EndHorizontal();
                }

                for (int i = 0; i < ((AMPEventBinder)target).AllEvents.Count; i++)
                {
                    EditorGUILayout.LabelField((((AMPEventBinder)target).AllEvents[i].EventCallback != null).ToString());
                }

                serializedObject.ApplyModifiedProperties();
                base.DrawDefaultInspector();
            }