示例#1
0
    public void MoveConversationEvent(int i, int offset)
    {
        ChatEventObject chatScript = targetObject.GetComponent <ChatEventObject> ();
        List <ChatEventObject.ConversationEvents> events = chatScript.conversationEvents;

        ChatEventObject.ConversationEvents tempPage = events [i - offset];
        events [i - offset] = events [i];
        events [i]          = tempPage;
    }
示例#2
0
    public void MoveEventPage(int i, int offset)
    {
        ChatEventObject chatScript = targetObject.GetComponent <ChatEventObject> ();
        List <ChatEventObject.EventPages> eventPages = chatScript.conversationEvents [currentConversation].eventPages;

        ChatEventObject.EventPages tempPage = eventPages [i - offset];
        eventPages [i - offset] = eventPages [i];
        eventPages [i]          = tempPage;
    }
示例#3
0
    public void RecreateAllEvents()
    {
        ChatEventObject chatScript = targetObject.GetComponent <ChatEventObject> ();

        for (int i = 0; i < _character.conversations.Count; i++)
        {
            ChatEventObject.ConversationEvents conversationEvent = new ChatEventObject.ConversationEvents();
            chatScript.conversationEvents.Add(conversationEvent);

            for (int p = 0; p < _character.conversations.Count; p++)
            {
                ChatEventObject.EventPages eventPage = new ChatEventObject.EventPages();
                chatScript.conversationEvents [i].eventPages.Add(eventPage);
            }
        }
    }
示例#4
0
    public void CheckEventsPage(ConversationList.Conversations conversation)
    {
        if (targetObject == null)
        {
            return;
        }

        ChatEventObject chatScript = targetObject.GetComponent <ChatEventObject> ();

        //Set ID here too
        for (int i = 0; i < conversation.pages.Count; i++)
        {
            ChatEventObject.EventPages eventPage = new ChatEventObject.EventPages();
            chatScript.conversationEvents [currentConversation].eventPages.Add(eventPage);
        }
    }
示例#5
0
    public void Draw()
    {
        if (MainEditor.singletonInstance == null)
        {
            //GUILayout.Box ("Editting required the RPG Story editor to be opened");
            //return;
        }

        if (Application.isPlaying)
        {
            return;
        }

        ChatEventObject myTarget = (ChatEventObject)target;

        myTarget.assetType = (AssetType)EditorGUILayout.EnumPopup("Asset Type", myTarget.assetType);


        //MainEditor.singletonInstance.GetCharacterStrings ();
        string[] characterStrings = MainEditor.GetCharacterStrings(conversationList.characters, true, myTarget.assetType);

        if (myTarget.assetType == AssetType.story)
        {
            characterStrings = MainEditor.GetChaptersStrings(conversationList.stories [0].chapters, true);
        }

        myTarget.lastCharIndex = myTarget.characterIndex;

        myTarget.characterIndex++;
        myTarget.characterIndex = EditorGUILayout.Popup("", myTarget.characterIndex, characterStrings, GUILayout.Width(200));
        myTarget.characterIndex--;

        //Debug.Log (myTarget.characterIndex);

        if (myTarget.lastCharIndex != myTarget.characterIndex)
        {
            //Make sure your conversation is different now.
            Debug.Log("Character changed");

            myTarget.conversationEvents = new List <ChatEventObject.ConversationEvents> ();


            //You should instead have a library of characters

            ChatEventObject[] allEventCharacters = GameObject.FindObjectsOfType <ChatEventObject> ();

            List <ChatEventObject> listOfSameCharacters = new List <ChatEventObject> ();

            for (int i = 0; i < allEventCharacters.Length; i++)
            {
                if (allEventCharacters [i].characterIndex == myTarget.characterIndex)
                {
                    listOfSameCharacters.Add(allEventCharacters [i]);
                }
            }

            if (myTarget.characterIndex != -1)
            {
                if (myTarget.assetType == AssetType.story)
                {
                    myTarget.name = myTarget.characterIndex.ToString() + conversationList.stories [0].chapters [myTarget.characterIndex].name;
                }

                if (myTarget.assetType == AssetType.character)
                {
                    myTarget.name = conversationList.characters [myTarget.characterIndex].name;
                }

                //Debug.Log (listOfSameCharacters.Count + " " + conversationList.characters [myTarget.characterIndex].name + " in scene");
            }
            else
            {
                myTarget.name = "none";
            }

            //This is the second more later one
            if (listOfSameCharacters.Count >= 2)
            {
                for (int i = 0; i < listOfSameCharacters.Count; i++)
                {
                    if (listOfSameCharacters [i] != myTarget)
                    {
                        myTarget.conversationEvents = listOfSameCharacters [i].conversationEvents;
                        break;
                    }
                }
            }
        }


        //Check if character has changed and has updated (Copy the other ones)

        if (myTarget != null)
        {
            if (Selection.activeGameObject != myTarget.gameObject)
            {
                return;
            }
        }

        try {
            this.serializedObject.Update();

            #region CONVERSATION EVENTS
            List <ConversationList.Conversations> conversations = conversationList.characters [myTarget.characterIndex].conversations;

            //EditorGUILayout.PropertyField (this.serializedObject.FindProperty ("eventPages").GetArrayElementAtIndex (p), true);


            int count = this.serializedObject.FindProperty("conversationEvents").arraySize;

            //this.serializedObject.FindProperty ("conversationEvents").DeleteArrayElementAtIndex (0);



            if (conversations.Count > count)
            {
                ChatEventObject.ConversationEvents conversationEvent = new ChatEventObject.ConversationEvents();
                conversationEvent.name = "Conversation Events ";
                myTarget.conversationEvents.Add(conversationEvent);
            }

            if (count > conversations.Count)
            {
                myTarget.conversationEvents.RemoveAt(0);
            }

            for (int i = 0; i < count; i++)
            {
                SerializedProperty pageProp = this.serializedObject.FindProperty("conversationEvents").GetArrayElementAtIndex(i);
                SerializedProperty it       = pageProp.Copy();

                //EditorGUILayout.PropertyField (pageProp);

                #region PAGE EVENTS
                List <ConversationList.Pages> pages = conversationList.characters [myTarget.characterIndex].conversations [i].pages;


                while (myTarget.conversationEvents [i].eventPages.Count > pages.Count)
                {
                    myTarget.conversationEvents [i].eventPages.RemoveAt(myTarget.conversationEvents [i].eventPages.Count - 1);
                }


                while (it.Next(true))                    // or NextVisible, also, the bool argument specifies whether to enter on children or not
                //Debug.Log (it.name);
                {
                    if (it.name == "eventPages")
                    {
                        break;
                    }
                }

                //Draw page stuff here

                for (int p = 0; p < pages.Count; p++)
                {
                    if (myTarget.conversationEvents [i].eventPages.Count < pages.Count)
                    {
                        ChatEventObject.EventPages eventPage = new ChatEventObject.EventPages();
                        eventPage.name = "Page Events " + p;
                        //myTarget.conversationEvents [i].eventPages.Add (eventPage);
                    }

                    myTarget.conversationEvents [i].eventPages [p].name = "Event Page " + p.ToString();

                    /*
                     * GUILayout.Box ("Inspector Info");
                     * if (it.arraySize - 1 >= p)
                     *      EditorGUILayout.PropertyField (it.GetArrayElementAtIndex (p), true);
                     */
                }

                if (myTarget.eventPages.Count > pages.Count)
                {
                    myTarget.eventPages.Clear();
                }

                #endregion
            }
            #endregion

            //EditorGUILayout.PropertyField (this.serializedObject.FindProperty ("conversationEvents"), true);

            //Type type = obj.GetType ();
            //PropertyInfo[] properties = type.GetProperties ();

            EditorGUILayout.PropertyField(this.serializedObject.FindProperty("conversationEvents"), true);

            myTarget.onPageProp  = this.serializedObject.FindProperty("conversationEvents");
            myTarget.onStartProp = this.serializedObject.FindProperty("onStartEvents");
            myTarget.onEndProp   = this.serializedObject.FindProperty("onEndEvents");

            myTarget.onStartObject = this.serializedObject;
            this.serializedObject.ApplyModifiedProperties();
        } catch {
        }
    }
示例#6
0
    public int GetCharacterIndex()
    {
        ChatEventObject myTarget = (ChatEventObject)target;

        return(myTarget.characterIndex);
    }
示例#7
0
    public void DisplayEvents(int i)
    {
        if (Application.isPlaying)
        {
            return;
        }

        DisplayEventTips();

        if (eventTargetType == EventTargetTypes.target)
        {
            if (targetObject != null)
            {
                CheckEventsPage(_character.conversations [currentConversation]);
            }

            GUILayout.BeginHorizontal();
            GUILayout.Label("Target Object");
            targetObject = EditorGUILayout.ObjectField(targetObject, typeof(GameObject), true) as GameObject;
            GUILayout.EndHorizontal();

            //Find it
            ChatEventObject[] allEventCharacters = GameObject.FindObjectsOfType <ChatEventObject> ();

            /*
             * List<GameObject> targets = new List<GameObject> ();
             *
             * foreach (ChatEventObject g in allEventCharacters) {
             *      if (g.characterIndex == characterIndex)
             *              targets.Add (g.gameObject);
             * }
             *
             *
             * if (targets.Count != 0)
             *      targetObject = targets [0];
             * else
             *      targetObject = null;
             */
            FindTarget();

            if (targetObject == null || !targetObject.activeInHierarchy)
            {
                return;
            }


            Selection.activeObject    = targetObject.transform;
            Selection.activeTransform = targetObject.transform;

            ChatEventObject chatScript = targetObject.GetComponent <ChatEventObject> ();

            if (chatScript == null)
            {
                GUILayout.Box("Please add the'ChatEvent' component");
                return;
            }

            chatScript.enabled = true;

            //Update the inspector to get it?

            if (chatScript.onPageProp == null)
            {
                Redraw();
                return;
            }

            if (chatScript.conversationEvents [currentConversation].eventPages != null)
            {
                if (chatScript.conversationEvents [currentConversation].eventPages.Count < _character.conversations [currentConversation].pages.Count)
                {
                    //Redraw
                    Debug.Log("Had to redraw");
                    Redraw();
                    return;
                }
            }
            else
            {
                Debug.Log("No even page");
            }

            try {
                chatScript.onStartObject.Update();

                pageProp = chatScript.onPageProp;

                it = pageProp.Copy();

                while (it.Next(true))
                {
                    if (it.name == "eventPages")
                    {
                        break;
                    }
                }

                if (it.arraySize - 1 >= i)
                {
                    EditorGUILayout.PropertyField(it.GetArrayElementAtIndex(i), true);
                }

                chatScript.onStartObject.ApplyModifiedProperties();
            } catch {
                Redraw();
            }
        }
    }
示例#8
0
    public void DisplayConversationList()
    {
        if (_character == null)
        {
            return;
        }

        if (_character.conversations == null)
        {
            return;
        }

        _character.playType = (PlayType)EditorGUILayout.EnumPopup("Play Type", _character.playType);

        for (int i = 0; i < _character.conversations.Count; i++)
        {
            currentConversation = i;

            #region CONVERSATION TITLE LINE
            GUILayout.BeginHorizontal();              //ALL COVEDRED

            if (GUILayout.Button("X", GUILayout.Width(smallButtonSize)))
            {
                _character.conversations.RemoveAt(i);
                Deselect();
                GUILayout.EndHorizontal();
                return;
            }

            if (GUILayout.Button(_character.conversations [i].name))
            {
                _character.conversations [i].isActive = !_character.conversations [i].isActive;
            }

            if (GUILayout.Button("v", GUILayout.Width(smallButtonSize)))
            {
                if (i == _character.conversations.Count - 1)
                {
                    GUILayout.EndHorizontal();
                    return;
                }

                ConversationList.Conversations temp = _character.conversations [i + 1];
                _character.conversations [i + 1] = _character.conversations [i];
                _character.conversations [i]     = temp;

                MoveConversationEvent(i, -1);

                Deselect();
            }

            if (GUILayout.Button("^", GUILayout.Width(smallButtonSize)))
            {
                if (i == 0)
                {
                    GUILayout.EndHorizontal();
                    return;
                }
                ConversationList.Conversations temp = _character.conversations [i - 1];
                _character.conversations [i - 1] = _character.conversations [i];
                _character.conversations [i]     = temp;

                MoveConversationEvent(i, 1);

                Deselect();
            }

            GUILayout.EndHorizontal();

            #endregion

            //LOGIC
            if (_character.conversations [i].isActive)
            {
                _character.conversations [i].name = EditorGUILayout.TextField(_character.conversations [i].name);



                if (_character.playType == PlayType.byEvent)
                {
                    string[] characterStrings = GetCharacterStrings(conversationList.chapters, false, AssetType.story);
                    _character.conversations [i].playOnIndex = EditorGUILayout.Popup("Play On Chapter", _character.conversations [i].playOnIndex, characterStrings, GUILayout.Width(500));
                }


                GUILayout.Space(20);

                #region Add Button
                if (eventTargetType != EventTargetTypes.target)
                {
                    if (targetObject == null)
                    {
                        GUILayout.Box("Events");

                        GUILayout.BeginHorizontal();

                        GUILayout.Label("A scene character is required to use events");
                        GUILayout.FlexibleSpace();


                        if (GUILayout.Button("Add", GUILayout.Width(mediumButtonSize)))
                        {
                            GameObject newTarget = new GameObject();
                            newTarget.name = _character.name;
                            newTarget.AddComponent <ChatEventObject> ();
                            newTarget.GetComponent <ChatEventObject> ().characterIndex = characterIndex;



                            ChatEventObject chatScript = newTarget.GetComponent <ChatEventObject> ();
                            chatScript.assetType = assetType;



                            targetObject    = newTarget;
                            eventTargetType = EventTargetTypes.target;
                        }


                        GUILayout.EndHorizontal();
                    }
                }
                #endregion

                DisplayEventTips();

                #region Display Conversation Events
                if (eventTargetType == EventTargetTypes.target)
                {
                    if (Selection.activeGameObject != targetObject)
                    {
                        return;
                    }

                    if (targetObject != null)
                    {
                        if (_character.conversations.Count > targetObject.GetComponent <ChatEventObject> ().conversationEvents.Count)
                        {
                            Debug.Log("Recreating");
                        }
                        else
                        {
                            CheckEventsPage(_character.conversations [currentConversation]);
                        }
                    }

                    GUILayout.BeginHorizontal();
                    GUILayout.Label("Target Object");
                    targetObject = EditorGUILayout.ObjectField(targetObject, typeof(GameObject), true) as GameObject;
                    GUILayout.EndHorizontal();


                    if (targetObject == null)
                    {
                        FindTarget();
                    }

                    Selection.activeObject    = targetObject.transform;
                    Selection.activeTransform = targetObject.transform;

                    ChatEventObject chatScript = targetObject.GetComponent <ChatEventObject> ();

                    if (chatScript == null)
                    {
                        GUILayout.Box("Please add the'ChatEvent' component");
                        return;
                    }

                    if (chatScript.onPageProp == null)
                    {
                        Redraw();
                        return;
                    }

                    if (chatScript.conversationEvents != null)
                    {
                        if (chatScript.conversationEvents.Count < _character.conversations.Count)
                        {
                            Debug.Log("Had to redraw");
                            Redraw();
                            return;
                        }
                    }
                    else
                    {
                        Debug.Log("No event page");
                    }

                    try {
                        SerializedObject sObject = GetSereializedObject();
                        if (currentConversation > sObject.FindProperty("conversationEvents").arraySize)
                        {
                            Debug.Log("waiting");
                            Redraw();
                            return;
                        }
                        SerializedProperty sProp = sObject.FindProperty("conversationEvents").GetArrayElementAtIndex(currentConversation);

                        sObject.Update();
                        //pageProp = chatScript.onPageProp.GetArrayElementAtIndex (currentConversation);

                        it = sProp.Copy();
                        //Debug.Log ("begin searchign for conversation events page");
                        while (it.Next(true))
                        {
                            if (it.name == "conversationEventPage")
                            {
                                break;
                            }
                        }
                        //Debug.Log ("finished searchign for conversation events page");
                        chatScript.onStartObject = sObject;
                        chatScript.onStartObject.Update();
                        chatScript.onPageProp = sProp;

                        GUI.skin = defaultSkin;

                        EditorGUILayout.PropertyField(it, true);

                        GUI.skin = editorSkin;

                        sObject.ApplyModifiedProperties();
                        chatScript.onStartObject.ApplyModifiedProperties();
                    } catch {
                        //Basically happens when you are not highlighting the object
                        Redraw();
                    }
                }
                #endregion

                if (targetObject != null)
                {
                    //if (_character.conversations.Count > targetObject.GetComponent<ChatEventObject> ().conversationEvents.Count)
                    //RecreateAllEvents ();
                }

                //Show pages
                //Very awkward here
                GUILayout.BeginHorizontal();
                GUILayout.Space(20);

                DisplayPageList(_character.conversations [i]);
                GUILayout.EndHorizontal();
            }
        }
    }