public override void OnInspectorGUI() { serializedObject.Update(); CheckAndCreateSubEditors(friendShip.friendShipCondition); EditorGUILayout.PropertyField(friendlyProperty); for (int i = 0; i < subEditors.Length; i++) { subEditors[i].OnInspectorGUI(); EditorGUILayout.Space(); } EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Add Collection", GUILayout.Width(collectionButtonWidth))) { FriendShipCondition newCollection = FriendShipConditionEditor.CreateConditionCollection(); friendShipConditionProperty.AddToObjectArray(newCollection); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space();; serializedObject.ApplyModifiedProperties(); }
protected override void DrawReaction() { serializedObject.Update(); CheckAndCreateSubEditors(interactableCallback.conditionCollectionsText); for (int i = 0; i < subEditors.Length; i++) { subEditors[i].OnInspectorGUI(); EditorGUILayout.Space(); } EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Add Collection", GUILayout.Width(collectionButtonWidth))) { ConditionCollectionText newCollection = ConditionCollectionTextEditor.CreateConditionCollection(); collectionsProperty.AddToObjectArray(newCollection); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); serializedObject.ApplyModifiedProperties(); }
// Select the Type of the Rectangle Containing InspectorGUI (Drop&Drag Area & ReactionCollectionsProperties) private void TypeSelectionGUI(Rect containingRect) { // Create a Rectangle for the Top Rect topHalf = containingRect; // Set to Half topHalf.height *= 0.5f; // Create BottomHalf Rect bottomHalf = topHalf; // set BottomHalf on Bottom bottomHalf.y += bottomHalf.height; //Display ReactionType popup on TopHalf selectedIndex = EditorGUI.Popup(topHalf, selectedIndex, reactionTypeNames); // If Button is Click, display BottomHalf if (GUI.Button(bottomHalf, "Add Selected Reaction")) { // Find Type of SelectedPopup Type reactionType = reactionTypes[selectedIndex]; // Create Appropriate Reaction Reaction newReaction = ReactionEditor.CreateReaction(reactionType); // Add Reaction to ReactionCollectionArray reactionProperty.AddToObjectArray(newReaction); } }
private void ExpandedGUI() { EditorGUILayout.Space(); EditorGUILayout.PropertyField(descriptionProperty); EditorGUILayout.Space(); float space = EditorGUIUtility.currentViewWidth / 3f; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Condition", GUILayout.Width(space)); EditorGUILayout.LabelField("Satisfied?", GUILayout.Width(space)); EditorGUILayout.LabelField("Add/Remove", GUILayout.Width(space)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginVertical(GUI.skin.box); for (int i = 0; i < subEditors.Length; i++) { subEditors[i].OnInspectorGUI(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("+", GUILayout.Width(conditionButtonWidth))) { Condition newCondition = ConditionEditor.CreateCondition(); conditionsProperty.AddToObjectArray(newCondition); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.PropertyField(reactionCollectionProperty); }
public override void OnInspectorGUI() { serializedObject.Update(); //updejt i zapis na koncu, reszta kodu leci pomiedzy CheckAndCreateSubEditors(interactable.conditionCollections); // w kazdym framie chcemy wiedziec ile editorow potrzebujemy, bo byc moze zmiana, dlatego update EditorGUILayout.PropertyField(interactionLocationProperty); //interaction location, pierwsza rzecz ktora wyswietlamy for (int i = 0; i < subEditors.Length; i++) // condition collection maja swoje edytory, ale musimy im powiedziec zeby sie tu wyswietlily { subEditors[i].OnInspectorGUI(); // te edytory sa czescia tak jak zwykly inspektor // i funkcje jak onispectorgiu trzeba wywolywac recznie EditorGUILayout.Space(); // pomiedzy chcemy miec troche miejsca } // potrzebujemy buttona do dodawania kolekcji EditorGUILayout.BeginHorizontal(); //jak begin to i end GUILayout.FlexibleSpace(); if (GUILayout.Button("Add Collection", GUILayout.Width(collectionButtonWidth))) // nasz button, add colection as a string, //no i jakies width, mamy wczesniej ustalony constant { // w srodku to co mamy zrobic jezeli jest klikniety ConditionCollection newCollection = ConditionCollectionEditor.CreateConditionCollection(); collectionsProperty.AddToObjectArray(newCollection); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); // troche miejsca EditorGUILayout.PropertyField(defaultReactionCollectionProperty); // default serializedObject.ApplyModifiedProperties(); // zapisanie zmian }
public static void AddObjectToArrayAsSubAsset <TElement>(this SerializedProperty arrayProp, Object collectionAsset, string name, TElement newElement) where TElement : ScriptableObject { AssetDatabase.AddObjectToAsset(newElement, collectionAsset); newElement.name = name; arrayProp.AddToObjectArray(newElement); }
public override void OnInspectorGUI() { serializedObject.Update(); CheckAndCreateSubEditors(interactable.conditionCollections); EditorGUILayout.PropertyField(interactionLocationProperty); for (int i = 0; i < subEditors.Length; i++) { subEditors[i].OnInspectorGUI(); EditorGUILayout.Space(); } EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Add Collection", GUILayout.Width(collectionButtonWidth))) { ConditionCollection newCollection = ConditionCollectionEditor.CreateConditionCollection(); collectionsProperty.AddToObjectArray(newCollection); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.PropertyField(defaultReactionCollectionProperty); EditorGUILayout.PropertyField(isSkipProperty); serializedObject.ApplyModifiedProperties(); }
public static void AddObjectToArrayAsSubAsset <TElement>(this SerializedProperty arrayProp, Object collectionAsset) where TElement : ScriptableObject { TElement newElement = ScriptableObject.CreateInstance <TElement>(); AssetDatabase.AddObjectToAsset(newElement, collectionAsset); newElement.name = "New Element"; arrayProp.AddToObjectArray(newElement); }
public static void AddObjectToArrayAsSubAsset <TElement>(this SerializedProperty arrayProp, Object collectionAsset, bool hideSubAsset, TElement newElement) where TElement : ScriptableObject { if (hideSubAsset) { newElement.hideFlags = HideFlags.HideInHierarchy; } AssetDatabase.AddObjectToAsset(newElement, collectionAsset); arrayProp.AddToObjectArray(newElement); }
// Expand the Inspector GUI private void ExpandedGUI() { // Create Space between Entries EditorGUILayout.Space(); // Set the Description Space EditorGUILayout.PropertyField(descriptionProperty); // Crate Space between Description and Fold-Out EditorGUILayout.Space(); // Set float for constant space of width float space = EditorGUIUtility.currentViewWidth / 3f; // Begin Horizontal box EditorGUILayout.BeginHorizontal(); // Add Label with name Condition EditorGUILayout.LabelField("Condition", GUILayout.Width(space)); // Add Label with name Statisfied? EditorGUILayout.LabelField("Statisfied?", GUILayout.Width(space)); // Add LAbel with name Add/Remove EditorGUILayout.LabelField("Add/Remove", GUILayout.Width(space)); // End Horizontal box EditorGUILayout.EndHorizontal(); // Begin Vertical box EditorGUILayout.BeginVertical(GUI.skin.box); // Go through all SubEditors for (int i = 0; i < subEditor.Length; i++) { // Call all SubEditors OnInspectorGUI Function subEditor[i].OnInspectorGUI(); } // End Horizontalbox? or Verical EditorGUILayout.EndHorizontal(); //? EditorGUILayout.EndVertical (); // Begin HorizontalBox EditorGUILayout.BeginHorizontal(); // Create a FlexableSpace for Buttons GUILayout.FlexibleSpace(); // Create Add-NewCondition Button if (GUILayout.Button("+", GUILayout.Width(conditionButtonWidth))) { // Create new Condition Condition newCondition = ConditionEditor.CreateCondition(); // Add newCondition to Array conditionsProperty.AddToObjectArray(newCondition); } // End the Horizontal box EditorGUILayout.EndHorizontal(); // Create space between foldout Name and Property EditorGUILayout.Space(); // Set Propertyfield to Property EditorGUILayout.PropertyField(reactionCollectionProperty); }
public override void OnInspectorGUI() { // Pull information from the target into the serializedObject. serializedObject.Update(); // Draw interaction handling buttons GUILayout.BeginHorizontal(); if (Application.isPlaying) { if (GUILayout.Button("INTERACT")) { _interactable.Interact(); } } if (GUILayout.Button("Focus on object!")) { EditorGUIUtility.PingObject(_interactable.gameObject.gameObject); } GUILayout.EndHorizontal(); // If necessary, create editors for the ConditionCollections. CheckAndCreateSubEditors(_interactable.ConditionCollections); // Use the default object field GUI for the interactionLocation. EditorGUILayout.PropertyField(_interactionLocationProperty); // Display all of the ConditionCollections. for (int i = 0; i < subEditors.Length; i++) { subEditors[i].OnInspectorGUI(); EditorGUILayout.Space(); } // Create a right-aligned button which when clicked, creates a new ConditionCollection in the ConditionCollections array. EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Add Collection", GUILayout.Width(COLLECTION_BUTTON_WIDTH))) { ConditionCollection newCollection = ConditionCollectionEditor.CreateConditionCollection(); _collectionsProperty.AddToObjectArray(newCollection); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); // Use the default object field GUI for the defaultReaction. EditorGUILayout.PropertyField(_defaultReactionCollectionProperty); // Push information back to the target from the serializedObject. serializedObject.ApplyModifiedProperties(); }
public static void AddObjectToArrayAsSubAsset <TElement>(this SerializedProperty arrayProp, Object collectionAsset, bool hideSubAsset, string name) where TElement : ScriptableObject { TElement newElement = ScriptableObject.CreateInstance <TElement>(); if (hideSubAsset) { newElement.hideFlags = HideFlags.HideInHierarchy; } AssetDatabase.AddObjectToAsset(newElement, collectionAsset); newElement.name = name; arrayProp.AddToObjectArray(newElement); }
public override void OnInspectorGUI() { serializedObject.Update(); // Recreate subeditors if needed, draw subeditors. RecreateSubEditors(ReactionCollection.Reactions); for (int i = 0; i < subEditors.Length; i++) { if (subEditors[i] != null) { subEditors[i].OnInspectorGUI(); } } if (ReactionCollection.Reactions.Length > 0) { EditorGUILayout.Space(); } EditorGUILayout.BeginHorizontal(); // Pop-up to select appropriate reaction for adding purposes SelectedIndex = EditorGUILayout.Popup(SelectedIndex, ReactionTypeNames); // Button to add selected reaction if (GUILayout.Button("Add Selected Reaction")) { Type reactionType = ReactionTypes[SelectedIndex]; Reaction newReaction = ReactionEditor.CreateReaction(reactionType); ReactionsProperty.AddToObjectArray(newReaction); } // Button to remove undefined/null reactions if (GUILayout.Button("Remove Null")) { // Iterate through collection until all reactions removed while (AreThereNullReactions()) { for (int j = 0; j < ReactionCollection.Reactions.Length; j++) { if (ReactionCollection.Reactions[j] == null) { ReactionsProperty.RemoveFromObjectArrayAt(j); break; } } } } serializedObject.ApplyModifiedProperties(); EditorGUILayout.EndHorizontal(); }
private void DisplayPasteButton() { GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUIStyle centredStyle = GUI.skin.button; centredStyle.alignment = TextAnchor.MiddleCenter; centredStyle.normal.textColor = GUI.skin.button.normal.textColor; // Paste copied reaction from clipboard if (GUILayout.Button("Paste copied\n reaction from clipboard", centredStyle, GUILayout.Height(40))) { try { string bufferValue = EditorGUIUtility.systemCopyBuffer; var obj = EditorUtility.InstanceIDToObject(Int32.Parse(bufferValue)) as Reaction; if (obj != null) { Reaction reactionCopy = Instantiate(obj); _reactionsProperty.AddToObjectArray(reactionCopy); _reactionsListProperty.AddToObjectArray(reactionCopy); } else { Debug.LogWarning("Can't paste object! Copied object is not derived from reaction"); } } catch (FormatException) { Debug.LogWarning("Paste object error! Wrong Instance ID format"); } } GUILayout.EndHorizontal(); }
private void ExpandedGUI() { EditorGUILayout.Space(); // Display the description for editing. EditorGUILayout.PropertyField(descriptionProperty); EditorGUILayout.Space(); // Display the Labels for the Conditions evenly split over the width of the inspector. float conditionSpace = (EditorGUIUtility.currentViewWidth / 2f) - 20f; float space = (conditionSpace / 2); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Condition", GUILayout.Width(conditionSpace)); EditorGUILayout.LabelField("Satisfied?", GUILayout.Width(space)); EditorGUILayout.LabelField("Remove", GUILayout.Width(space)); EditorGUILayout.EndHorizontal(); // Display each of the Conditions. EditorGUILayout.BeginVertical(GUI.skin.box); for (int i = 0; i < subEditors.Length; i++) { if (subEditors[i] != null) { subEditors[i].OnInspectorGUI(); } } EditorGUILayout.EndVertical(); // Display a right aligned button which when clicked adds a Condition to the array. EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button(" Add Condition ", GUILayout.ExpandWidth(false))) { Condition newCondition = ConditionEditor.CreateCondition(); conditionsProperty.AddToObjectArray(newCondition); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); // Display the reference to the ReactionCollection for editing. EditorGUILayout.PropertyField(reactionCollectionProperty); }
private void TypeSelectionGUI(Rect containingRect) { Rect topHalf = containingRect; topHalf.height *= 0.5f; Rect bottomHalf = topHalf; bottomHalf.y += bottomHalf.height; selectedIndex = EditorGUI.Popup(topHalf, selectedIndex, reactionTypeNames); if (GUI.Button(bottomHalf, "Add Selected Reaction")) { Type reactionType = reactionTypes[selectedIndex]; Reaction newReaction = ReactionEditor.CreateReaction(reactionType); reactionsProperty.AddToObjectArray(newReaction); } }
private void ExpandedGUI() { EditorGUILayout.Space(); EditorGUILayout.PropertyField(descriptionProperty); EditorGUILayout.Space(); float space = EditorGUIUtility.currentViewWidth / 3f; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Condition", GUILayout.Width(space)); EditorGUILayout.LabelField("Satisfied?", GUILayout.Width(space)); EditorGUILayout.LabelField("Add/Remove", GUILayout.Width(space)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginVertical(GUI.skin.box); for (int i = 0; i < subEditors.Length; i++) { subEditors[i].OnInspectorGUI(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("+", GUILayout.Width(conditionButtonWidth))) { Condition newCondition = ConditionEditor.CreateCondition(); conditionsProperty.AddToObjectArray(newCondition); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Dialogue", GUILayout.Width(EditorGUIUtility.labelWidth - areaWidthOffset)); dialogueProperty.stringValue = EditorGUILayout.TextArea(dialogueProperty.stringValue, GUILayout.Height(EditorGUIUtility.singleLineHeight * messageGUILines)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Name", GUILayout.Width(EditorGUIUtility.labelWidth - areaWidthOffset)); characterNameProperty.stringValue = EditorGUILayout.TextArea(characterNameProperty.stringValue, GUILayout.Height(EditorGUIUtility.singleLineHeight)); EditorGUILayout.EndHorizontal(); EditorGUILayout.PropertyField(characterImageProperty); }
private void TypeSelectionGUI(Rect containingRect) { Rect topHalf = containingRect; topHalf.height *= 0.5f; Rect bottomHalf = topHalf; bottomHalf.y += bottomHalf.height; selectedIndex = EditorGUI.Popup(topHalf, selectedIndex, commandTypeNames); if (GUI.Button(bottomHalf, "Add Selected Command")) { Type commandType = commandTypes[selectedIndex]; GameEventCommand newCommand = GameEventCommandEditor.CreateCommand(commandType); commandsProperty.AddToObjectArray(newCommand); } }
public override void OnInspectorGUI() { serializedObject.Update(); CheckAndCreateSubEditors(interactable.conditionCollections); EditorGUILayout.PropertyField(interactionLocationProperty); for (int i = 0; i < subEditors.Length; i++) { subEditors[i].OnInspectorGUI(); EditorGUILayout.Space(); } EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Add Collection", GUILayout.Width(collectionButtonWidth))) { ConditionCollection newCollection = ConditionCollectionEditor.CreateConditionCollection(); collectionsProperty.AddToObjectArray(newCollection); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.PropertyField(defaultReactionCollectionProperty); SerializedProperty tps = serializedObject.FindProperty("actionate"); SerializedProperty tp = serializedObject.FindProperty("conditions"); EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(tps, true); EditorGUILayout.PropertyField(tp, true); if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); } EditorGUIUtility.LookLikeControls(); EditorGUILayout.Space(); serializedObject.ApplyModifiedProperties(); }
private void TypeSelectionGUI(Rect containingRect) { //podzial na gorna i dolna polowe, gora - selector, dol - button. wszystko robilbym w tym stylu, gdyby nie fakt, ze to ostatnia notacja ktorej sie nauczylem :d Rect topHalf = containingRect; topHalf.height *= 0.5f; Rect bottomHalf = topHalf; bottomHalf.y += bottomHalf.height; selectedIndex = EditorGUI.Popup(topHalf, selectedIndex, reactionTypeNames); if (GUI.Button(bottomHalf, "Add Selected Reaction")) { Type reactionType = reactionTypes[selectedIndex]; Reaction newReaction = ReactionEditor.CreateReaction(reactionType); reactionsProperty.AddToObjectArray(newReaction); } }
// Called when Inspector is Open (Every Frame) public override void OnInspectorGUI() { // Update the SerializedObjects Propertiess serializedObject.Update(); // Create Editors for ConditionCollection CheckAndCreateSubEditors(interactable.conditionCollections); // Display InteractionLocation property EditorGUILayout.PropertyField(interactionLocationProperty); // go through all ConditionCollection Editors // for (int i = 0; i < subEditors.Length; i++) { // Display the ConditionCollection // subEditors[i].OnInspectorGUI (); // Create Space between Elements EditorGUILayout.Space(); // } // Begin HorizontalBox for ConditionCollection EditorGUILayout.BeginHorizontal(); // Create a FlexibleSpace GUILayout.FlexibleSpace(); // Create Button to Add ConditionCollection to all ConditionCollections if (GUILayout.Button("Add Collection", GUILayout.Width(collectionButtonWidth))) { // Create a new Collection ConditionCollection newCollection = ConditionCollectionEditor.CreateConditionCollection(); // Add the newCollection to Collection Array collectionProperty.AddToObjectArray(newCollection); } // End Horizontal Box for ConditionCollection EditorGUILayout.EndHorizontal(); // Create Space between Elements EditorGUILayout.Space(); // Display default Reaction property EditorGUILayout.PropertyField(defaultReactionProperty); // Apply the Modified Properties to the SerializedObject serializedObject.ApplyModifiedProperties(); }
private void TypeSelectionGUI(Rect containingRect) { // Create Rects for the top and bottom half. Rect topHalf = containingRect; topHalf.height *= 0.5f; Rect bottomHalf = topHalf; bottomHalf.y += bottomHalf.height; // Display a popup in the top half showing all the reaction types. selectedIndex = EditorGUI.Popup(topHalf, selectedIndex, reactionTypeNames); // Display a button in the bottom half that if clicked... if (GUI.Button(bottomHalf, "Add Selected Reaction")) { // ... finds the type selected by the popup, creates an appropriate reaction and adds it to the array. Type reactionType = reactionTypes[selectedIndex]; Reaction newReaction = ReactionEditor.CreateReaction(reactionType); reactionsProperty.AddToObjectArray(newReaction); } }
public override void OnInspectorGUI() { serializedObject.Update(); GUILayout.Space(5); EditorGUILayout.PropertyField(m_idProperty); GUILayout.Space(5); DisplayBinderLink(); EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Add New Data Binder Link", GUILayout.Width(200), GUILayout.Height(30))) { DataBinderLink newBinderLink = CreateBinderLink(); m_binderLinksProperty.AddToObjectArray(newBinderLink); } EditorGUILayout.EndHorizontal(); GUILayout.Space(5); serializedObject.ApplyModifiedProperties(); }
public void AddChild(IQuest item, IQuest parent) { serializedObject.ApplyModifiedProperties(); serializedObject.Update(); if (parent == null) { Debug.LogError("Adding null parent"); return; } SerializedProperty children = serializedObject.FindProperty(PROP_CHILDREN); SerializedObject itemSerializedObject = new SerializedObject(item); itemSerializedObject.FindProperty(PROP_PARENT).objectReferenceValue = parent; itemSerializedObject.ApplyModifiedProperties(); itemSerializedObject.Update(); children.AddToObjectArray <IQuest>(item); serializedObject.ApplyModifiedProperties(); serializedObject.Update(); }
public override void OnInspectorGUI() { // Pull information from the target into the serializedObject. serializedObject.Update(); // If necessary, create editors for the ConditionCollections. CheckAndCreateSubEditors(interactable.conditionCollections); EditorGUILayout.PropertyField(interactionTextProperty); // Use the default object field GUI for the interactionLocation. EditorGUILayout.PropertyField(interactionLocationProperty); // Display all of the ConditionCollections. for (int i = 0; i < subEditors.Length; i++) { subEditors[i].OnInspectorGUI(); EditorGUILayout.Space(); } // Create a right-aligned button which when clicked, creates a new ConditionCollection in the ConditionCollections array. EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Add Collection", GUILayout.Width(collectionButtonWidth))) { ConditionCollection newCollection = ConditionCollectionEditor.CreateConditionCollection(); collectionsProperty.AddToObjectArray(newCollection); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); // Use the default object field GUI for the defaultReaction. EditorGUILayout.PropertyField(defaultReactionCollectionProperty); // Push information back to the target from the serializedObject. serializedObject.ApplyModifiedProperties(); }
public override void OnInspectorGUI() { // Pull information from the target into the serializedObject. serializedObject.Update(); EditorTools.createHorizontalSeparator(); EditorTools.createTitleBox("Interactable Reactions", true); EditorGUILayout.Space(); // If necessary, create editors for the ConditionCollections. CheckAndCreateSubEditors(interactable.conditionCollections); EditorGUILayout.BeginVertical(GUI.skin.box); GUILayout.BeginHorizontal(EditorStyles.inspectorDefaultMargins); isExpanded[0] = EditorGUILayout.Foldout(isExpanded[0], new GUIContent("Conditioned Reactions"), true, EditorStyles.foldout); EditorGUILayout.EndHorizontal(); if (isExpanded[0]) { GUILayout.BeginHorizontal(EditorStyles.inspectorDefaultMargins); // Create a right-aligned button which when clicked, creates a new ConditionCollection in the ConditionCollections array. if (GUILayout.Button("Add Condition Collection", GUILayout.ExpandWidth(false))) { ConditionCollection newCollection = ConditionCollectionEditor.CreateConditionCollection(); collectionsProperty.AddToObjectArray(newCollection); } EditorGUILayout.EndHorizontal(); // Display all of the ConditionCollections. for (int i = 0; i < subEditors.Length; i++) { subEditors[i].OnInspectorGUI(); EditorGUILayout.Separator(); } } EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); EditorGUILayout.BeginVertical(GUI.skin.box); GUILayout.BeginHorizontal(EditorStyles.inspectorDefaultMargins); isExpanded[1] = EditorGUILayout.Foldout(isExpanded[1], new GUIContent("Default Reactions"), true, EditorStyles.foldout); EditorGUILayout.EndHorizontal(); //EditorGUILayout.PropertyField(defaultReactionCollectionProperty.FindPropertyRelative("Array.size")); if (isExpanded[1]) { //Show options for defaultReaction only when there was more than one DefaultReactionCollection if (defaultReactionCollectionProperty.arraySize > 1) { EditorGUILayout.BeginHorizontal(EditorStyles.inspectorDefaultMargins); EditorGUILayout.PropertyField(randomDefaultReactionProperty); //If the random DefaultReaction is disabled, show the texfield for the defaultReactionCollection index if (!randomDefaultReactionProperty.boolValue) { EditorGUILayout.PropertyField(defaultReactionIndexProperty); } EditorGUILayout.EndHorizontal(); } //Buttons to add or remove default ReactionCollection EditorGUILayout.BeginHorizontal(EditorStyles.inspectorDefaultMargins); if (GUILayout.Button("+", GUILayout.Width(collectionButtonWidth))) { defaultReactionCollectionProperty.arraySize++; } if (GUILayout.Button("-", GUILayout.Width(collectionButtonWidth)) && defaultReactionCollectionProperty.arraySize > 0) { defaultReactionCollectionProperty.arraySize--; } EditorGUILayout.EndHorizontal(); //Fields for the array of ReactionCollections for (int i = 0; i < defaultReactionCollectionProperty.arraySize; i++) { EditorGUILayout.BeginHorizontal(EditorStyles.inspectorDefaultMargins); EditorGUILayout.BeginVertical(GUI.skin.box); EditorGUILayout.PropertyField(defaultReactionCollectionProperty.GetArrayElementAtIndex(i), new GUIContent("Default Reaction " + i)); EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); } } EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); EditorTools.createHorizontalSeparator(); EditorTools.createTitleBox("Interactable Events", true); EditorGUILayout.Space(); EditorGUILayout.PropertyField(serializedObject.FindProperty("onInteractionStart"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("onInteractionEnd"), true); EditorGUILayout.Separator(); EditorTools.createHorizontalSeparator(); GUI.enabled = Application.isPlaying; if (GUILayout.Button("Interact")) { interactable.Interact(); } // Push information back to the target from the serializedObject. serializedObject.ApplyModifiedProperties(); }
public override void OnInspectorGUI() { serializedObject.Update(); CheckAndCreateSubEditors(gameEvent.commands.ToArray()); EditorGUILayout.PropertyField(serializedObject.FindProperty("trigger")); serializedObject.ApplyModifiedProperties(); serializedObject.Update(); /* EditorGUILayout.BeginHorizontal(); * EditorGUILayout.LabelField("Trigger Type"); * gameEvent.trigger = (TriggerType)EditorGUILayout.EnumPopup(gameEvent.trigger); * EditorGUILayout.EndHorizontal();*/ EditorGUILayout.BeginVertical(GUI.skin.box); for (int i = 0; i < conditionsProperty.arraySize; i++) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(); //serializedObject SerializedProperty prop1 = serializedObject.FindProperty("conditions").GetArrayElementAtIndex(i); SerializedObject propChild1 = new SerializedObject(prop1.objectReferenceValue); SerializedProperty propChildValue1 = propChild1.FindProperty("conditionKey"); EditorGUILayout.PropertyField(propChildValue1); propChild1.ApplyModifiedProperties(); SerializedProperty prop2 = serializedObject.FindProperty("conditions").GetArrayElementAtIndex(i); SerializedObject propChild2 = new SerializedObject(prop2.objectReferenceValue); SerializedProperty propChildValue2 = propChild2.FindProperty("conditionValue"); EditorGUILayout.PropertyField(propChildValue2); propChild2.ApplyModifiedProperties(); SerializedProperty prop3 = serializedObject.FindProperty("conditions").GetArrayElementAtIndex(i); SerializedObject propChild3 = new SerializedObject(prop3.objectReferenceValue); SerializedProperty propChildValue3 = propChild3.FindProperty("conditionComparer"); EditorGUILayout.PropertyField(propChildValue3); propChild3.ApplyModifiedProperties(); SerializedProperty prop4 = serializedObject.FindProperty("conditions").GetArrayElementAtIndex(i); SerializedObject propChild4 = new SerializedObject(prop4.objectReferenceValue); SerializedProperty propChildValue4 = propChild4.FindProperty("structCast"); EditorGUILayout.PropertyField(propChildValue4); propChild4.ApplyModifiedProperties(); EditorGUILayout.EndVertical(); if (GUILayout.Button("X", GUILayout.MaxHeight(50))) { conditionsProperty.RemoveFromObjectArrayAt(i); } EditorGUILayout.EndHorizontal(); } if (GUILayout.Button("Add New Condition")) { GameEventCondition newCondition = GameEventCondition.CreateInstance <GameEventCondition>(); conditionsProperty.AddToObjectArray(newCondition); } EditorGUILayout.EndVertical(); for (int i = 0; i < subEditors.Length; i++) { string[] commandNames = new string[gameEvent.commands.Count + 1]; int[] commandIDs = new int[gameEvent.commands.Count + 1]; for (int k = 0; k < gameEvent.commands.Count; k++) { if (k < i) { commandNames[k] = "Command ID: " + k; commandIDs[k] = k; } else if (k > i) { commandNames[k - 1] = "Command ID: " + k; commandIDs[k - 1] = k; } } commandNames[gameEvent.commands.Count] = "End Event"; commandIDs[gameEvent.commands.Count] = -1; //Debug.Log(subEditors[i]); subEditors[i].ProcessCurrentEventCommands(commandNames, commandIDs); serializedObject.Update(); //////////////////////// EditorGUILayout.BeginVertical(GUI.skin.box); EditorGUI.indentLevel++; EditorGUILayout.BeginHorizontal(); subEditors[i].showCommand = EditorGUILayout.Foldout(subEditors[i].showCommand, "#" + i.ToString() + ": " + subEditors[i].GetFoldoutLabel()); if (GUILayout.Button("↑", GUILayout.Width(30))) { if (i > 0) { SwapCommandIndexPositions(i, i - 1); } } if (GUILayout.Button("↓", GUILayout.Width(30))) { if (i < subEditors.Length - 1) { SwapCommandIndexPositions(i, i + 1); } } if (GUILayout.Button("X", GUILayout.Width(30))) { commandsProperty.RemoveFromObjectArrayAt(i); } EditorGUILayout.EndHorizontal(); if (subEditors[i].showCommand) { subEditors[i].OnInspectorGUI(); } EditorGUI.indentLevel--; EditorGUILayout.EndVertical(); ///////////////////// serializedObject.ApplyModifiedProperties(); } if (gameEvent.commands.ToArray().Length > 0) { EditorGUILayout.Space(); EditorGUILayout.Space(); } Rect fullWidthRect = GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none, GUILayout.Height(dropAreaHeight + verticalSpacing)); Rect leftAreaRect = fullWidthRect; leftAreaRect.y += verticalSpacing * 0.5f; leftAreaRect.width *= 0.5f; leftAreaRect.width -= controlSpacing * 0.5f; leftAreaRect.height = dropAreaHeight; Rect rightAreaRect = leftAreaRect; rightAreaRect.x += rightAreaRect.width + controlSpacing; TypeSelectionGUI(leftAreaRect); serializedObject.ApplyModifiedProperties(); }