Beispiel #1
0
        private void DisplayEventParameters(ConversationTrigger.eEventType eventType)
        {
            switch (eventType)
            {
            case ConversationTrigger.eEventType.OnClick:
                if (!m_target.GetComponent <Collider>() && !m_target.GetComponent <Collider2D>())
                {
                    GUI.backgroundColor = Color.yellow;
                    EditorGUILayout.HelpBox("You need to add a collider or collider2D to detect the onClick event.", MessageType.Info);
                    GUI.backgroundColor = Color.white;
                    if (GUILayout.Button("Add Collider"))
                    {
                        m_target.gameObject.AddComponent <BoxCollider>().isTrigger = true;
                    }
                    if (GUILayout.Button("Add Collider2D"))
                    {
                        m_target.gameObject.AddComponent <BoxCollider2D>().isTrigger = true;
                    }
                }
                break;

            case ConversationTrigger.eEventType.OnTimer:
                EditorGUILayout.PropertyField(m_DialogTimeProp);
                EditorGUILayout.PropertyField(m_TimeBetweenDialogsProp);
                break;

            case ConversationTrigger.eEventType.OnKeyDown:
            case ConversationTrigger.eEventType.OnButtonDown:
                if (eventType == ConversationTrigger.eEventType.OnKeyDown)
                {
                    EditorGUILayout.PropertyField(m_TriggerKeyCodeProp);
                }
                else
                {
                    EditorGUILayout.PropertyField(m_TriggerButtonNameProp);
                }

                EditorGUILayout.PropertyField(m_TagFilterProp);
                if (!m_target.GetComponentInChildren <Collider>() && !m_target.GetComponentInChildren <Collider2D>())
                {
                    GUI.backgroundColor = Color.yellow;
                    EditorGUILayout.HelpBox("You need to add a trigger collider in order make " + eventType + " to work.", MessageType.Info);
                    GUI.backgroundColor = Color.white;
                    if (GUILayout.Button("Add Collider"))
                    {
                        m_target.gameObject.AddComponent <BoxCollider>().isTrigger = true;
                    }
                    if (GUILayout.Button("Add Collider2D"))
                    {
                        m_target.gameObject.AddComponent <BoxCollider2D>().isTrigger = true;
                    }
                }
                break;

            case ConversationTrigger.eEventType.OnCollisionEnter:
            case ConversationTrigger.eEventType.OnCollisionExit:
            case ConversationTrigger.eEventType.OnCollisionEnter2D:
            case ConversationTrigger.eEventType.OnCollisionExit2D:
            case ConversationTrigger.eEventType.OnTriggerEnter:
            case ConversationTrigger.eEventType.OnTriggerExit:
            case ConversationTrigger.eEventType.OnTriggerEnter2D:
            case ConversationTrigger.eEventType.OnTriggerExit2D:
                EditorGUILayout.PropertyField(m_TagFilterProp);
                break;
            }
        }
Beispiel #2
0
        public override void OnInspectorGUI()
        {
            serializedObject.Update();
            if (!m_conversationControllerProp.objectReferenceValue)
            {
                GUI.backgroundColor = Color.yellow;
                EditorGUILayout.HelpBox("Set the Conversation Controller component you want to start with an event.", MessageType.Info);
                GUI.backgroundColor = Color.white;
                if (GUILayout.Button("Add Conversation Controller"))
                {
                    m_conversationControllerProp.objectReferenceValue = ConversationControllerEditor.AddConversation();
                }
            }
            EditorGUILayout.PropertyField(m_conversationControllerProp);

            if (m_target.conversationController)
            {
                List <string> conversationList      = m_target.conversationController.conversations.Select((o, idx) => idx + ". " + o.name).ToList();
                List <string> conversationPopupList = new List <string>()
                {
                    "<default>"
                };
                conversationPopupList.AddRange(conversationList);
                //GUILayout.Label("Conversation Event Triggers", EditorStyles.boldLabel);
                EditorGUIUtility.labelWidth = 140f;
                int index = 0;
                var iter  = m_activeEventsProp.GetEnumerator();
                while (iter.MoveNext())
                {
                    ConversationTrigger.eEventType eventType = (ConversationTrigger.eEventType)(iter.Current as SerializedProperty).enumValueIndex;
                    EditorGUILayout.BeginVertical(EditorStyles.helpBox);
                    GUILayout.Label(eventType.ToString(), EditorStyles.boldLabel);
                    Rect rRemoveButton = GUILayoutUtility.GetLastRect();
                    rRemoveButton.xMin = rRemoveButton.xMax - 40f;
                    if (GUI.Button(rRemoveButton, this.m_iconToolbarMinus, DialogEditorStyles.preButton))
                    {
                        RemoveEvent(index);
                    }
                    SerializedProperty eventProp = m_eventsProp.GetArrayElementAtIndex((int)eventType);
                    eventProp.intValue = -1 + EditorGUILayout.Popup("Conversation", eventProp.intValue + 1, conversationPopupList.ToArray());
                    //Display Event Parameters
                    DisplayEventParameters(eventType);
                    EditorGUILayout.EndVertical();
                    ++index;
                }
                EditorGUILayout.Space();

                if (m_activeEventsProp.arraySize < m_eventsProp.arraySize)
                {
                    if (GUILayout.Button("Add Event Trigger..."))
                    {
                        GenericMenu addEventMenu = new GenericMenu();
                        List <ConversationTrigger.eEventType> availableTypes = GetAvailableEvents();
                        for (int i = 0; i < availableTypes.Count; ++i)
                        {
                            ConversationTrigger.eEventType ev = availableTypes[i];
                            string enumDesc = GetEnumDescription(ev);
                            if (m_target.IsUsingEvent(ev))
                            {
                                addEventMenu.AddDisabledItem(new GUIContent(enumDesc + ev.ToString()));
                            }
                            else
                            {
                                addEventMenu.AddItem(new GUIContent(enumDesc + ev.ToString()), false, () => { AddEvent(ev); });
                            }
                        }
                        addEventMenu.ShowAsContext();
                    }
                }
                EditorGUILayout.PropertyField(m_onCloseEventProp);
                EditorGUIUtility.labelWidth = 0f;
            }


            //NOTE: eventProp.stringValue is not saved if this is done only when GUI.changed is true
            serializedObject.ApplyModifiedProperties();
        }
Beispiel #3
0
 private void AddEvent(ConversationTrigger.eEventType eventType)
 {
     ++m_activeEventsProp.arraySize;
     m_activeEventsProp.GetArrayElementAtIndex(m_activeEventsProp.arraySize - 1).enumValueIndex = (int)eventType;
     serializedObject.ApplyModifiedProperties();
 }