示例#1
0
 public void StartConversation(GameObject sender, ConversationList.Characters character, ConversationList.Conversations conversation)
 {
     Reset();
     currentCharacter    = character;
     currentConversation = conversation;
     StartCoroutine(_ActiveConversation(sender, character, conversation));
 }
示例#2
0
    public void AddPage(ConversationList.Conversations conversation)
    {
        ConversationList.Pages newPage = new ConversationList.Pages();
        newPage.name = inputPageName;
        conversation.pages.Add(newPage);

        //Get target

        CheckEventsPage(conversation);
    }
示例#3
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);
        }
    }
示例#4
0
    public void AddConversation()
    {
        if (_character == null)
        {
            return;
        }

        ConversationList.Conversations convo = new ConversationList.Conversations();
        _character.conversations.Add(convo);
        convo.name = _character.conversations.Count.ToString() + ": " + inputConversationName;

        //Make template page
        //AddPage (convo);


        Deselect();
    }
示例#5
0
    IEnumerator _ActiveConversation(GameObject sender, ConversationList.Characters character, ConversationList.Conversations conversation)
    {
        while (pageIndex < currentConversation.pages.Count)
        {
            textBox.text = "";

            yield return(null);
        }

        CloseConversation();
    }
示例#6
0
    public void DisplayPageList(ConversationList.Conversations conversation)
    {
        GUILayout.BeginVertical();

        GUILayout.Space(20);
        GUILayout.Box("Pages", GUI.skin.GetStyle("title"));

        for (int i = 0; i < conversation.pages.Count; i++)
        {
            GUILayout.BeginHorizontal();

            if (GUILayout.Button("X", GUILayout.Width(smallButtonSize)))
            {
                conversation.pages.RemoveAt(i);
                Deselect();
                return;
            }

            if (GUILayout.Button("" + i + ": " + conversation.pages [i].name))
            {
                conversation.pages [i].isActive = !conversation.pages [i].isActive;
            }

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

                ConversationList.Pages temp = conversation.pages [i + 1];
                conversation.pages [i + 1] = conversation.pages [i];
                conversation.pages [i]     = temp;

                MoveEventPage(i, -1);

                Deselect();
            }

            if (GUILayout.Button("^", GUILayout.Width(smallButtonSize)))
            {
                if (i == 0)
                {
                    return;
                }
                ConversationList.Pages temp = conversation.pages [i - 1];
                conversation.pages [i - 1] = conversation.pages [i];
                conversation.pages [i]     = temp;

                MoveEventPage(i, 1);


                Deselect();
            }

            GUILayout.EndHorizontal();

            //LOGIC
            if (conversation.pages [i].isActive)
            {
                GUILayout.BeginVertical(EditorStyles.helpBox);
                DisplayEvents(i);
                GUILayout.EndVertical();

                //Show pages
                GUILayout.BeginHorizontal();
                GUILayout.Space(20);
                GUI.skin = defaultSkin;

                //List of images

                GUILayout.BeginVertical();
                string[] moodStrings = GetMoodStringsFromCharacter();

                conversation.pages [i].moodIndex = EditorGUILayout.Popup("", conversation.pages [i].moodIndex, moodStrings, GUILayout.Width(texture2DSize));

                if (conversation.pages [i].moodIndex == moodStrings.Length - 1)
                {
                    conversation.pages [i].image       = (Texture2D)EditorGUILayout.ObjectField("", conversation.pages [i].customImage, typeof(Texture2D), false, GUILayout.Width(texture2DSize), GUILayout.Height(texture2DSize));
                    conversation.pages [i].customImage = conversation.pages [i].image;
                }
                else
                {
                    conversation.pages [i].image = (Texture2D)EditorGUILayout.ObjectField("", _character.characterImages [conversation.pages [i].moodIndex].image, typeof(Texture2D), false, GUILayout.Width(texture2DSize), GUILayout.Height(texture2DSize));
                }


                //conversation.pages [i].image = (Texture2D)EditorGUILayout.ObjectField ("", conversation.pages [i].image, typeof(Texture2D), GUILayout.Width (texture2DSize), GUILayout.Height (texture2DSize));
                GUILayout.EndVertical();



                GUI.skin = editorSkin;
                DisplayLineList(conversation.pages [i]);
                GUILayout.EndHorizontal();
            }
        }

        //END


        GUILayout.BeginHorizontal(EditorStyles.helpBox);

        GUILayout.Label("Name: ");
        inputPageName = GUILayout.TextField(inputPageName);

        if (GUILayout.Button("Add Page", GUILayout.Width(mediumButtonSize)))
        {
            AddPage(conversation);
        }

        GUILayout.EndHorizontal();

        GUILayout.Space(20);

        GUILayout.EndVertical();
    }
示例#7
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();
            }
        }
    }