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; }
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; }
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); } } }
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); } }
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 { } }
public int GetCharacterIndex() { ChatEventObject myTarget = (ChatEventObject)target; return(myTarget.characterIndex); }
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(); } } }
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(); } } }