using UnityEditor; using UnityEditorInternal; using UnityEngine; using System.Collections; using System.Collections.Generic; using Rotorz.ReorderableList; namespace Fungus { [CustomEditor (typeof(ChooseOption))] public class ChooseOptionEditor : CommandEditor { static public bool showTagHelp; protected SerializedProperty chooseTextProp; protected SerializedProperty characterProp; protected SerializedProperty chooseDialogProp; protected SerializedProperty portraitProp; protected SerializedProperty voiceOverClipProp; protected SerializedProperty timeoutDurationProp; protected virtual void OnEnable() { chooseTextProp = serializedObject.FindProperty("chooseText"); characterProp = serializedObject.FindProperty("character"); portraitProp = serializedObject.FindProperty("portrait"); chooseDialogProp = serializedObject.FindProperty("chooseDialog"); voiceOverClipProp = serializedObject.FindProperty("voiceOverClip"); timeoutDurationProp = serializedObject.FindProperty("timeoutDuration"); } public override void DrawCommandGUI() { serializedObject.Update(); ChooseOption t = target as ChooseOption; CommandEditor.ObjectField(characterProp, new GUIContent("Character", "Character to display in dialog"), new GUIContent(""), Character.activeCharacters); CommandEditor.ObjectField(chooseDialogProp, new GUIContent("Choose Dialog", "Choose Dialog object to use to display the multiple player choices"), new GUIContent(""), ChooseDialog.activeDialogs); bool showPortraits = false; // Only show portrait selection if... if (t.character != null && // Character is selected t.character.portraits != null && // Character has a portraits field t.character.portraits.Count > 0 ) // Selected Character has at least 1 portrait { ChooseDialog cd = t.chooseDialog; if (t.chooseDialog == null) // If default box selected { cd = t.character.chooseDialogBox; // Try to get character's default choose dialog box if (t.chooseDialog == null) // If no default specified, Try to get any ChooseDialog in the scene { cd = GameObject.FindObjectOfType(); } } if (cd != null && cd.characterImage != null) // Check that selected choose dialog has a character image { showPortraits = true; } } if (showPortraits) { CommandEditor.ObjectField(portraitProp, new GUIContent("Portrait", "Portrait representing speaking character"), new GUIContent(""), t.character.portraits); } else { t.portrait = null; } EditorGUILayout.PropertyField(chooseTextProp); EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button(new GUIContent("Tag Help", "Show help info for tags"), new GUIStyle(EditorStyles.miniButton))) { showTagHelp = !showTagHelp; } EditorGUILayout.EndHorizontal(); if (showTagHelp) { SayEditor.DrawTagHelpLabel(); } EditorGUILayout.Separator(); EditorGUILayout.PropertyField(voiceOverClipProp, new GUIContent("Voice Over Clip", "Voice over audio to play when the choose text is displayed")); EditorGUILayout.PropertyField(timeoutDurationProp, new GUIContent("Timeout Duration", "Time limit for player to make a choice. Set to 0 for no limit.")); if (showPortraits && t.portrait != null) { Texture2D characterTexture = t.portrait.texture; float aspect = (float)characterTexture.width / (float)characterTexture.height; Rect previewRect = GUILayoutUtility.GetAspectRect(aspect, GUILayout.Width(100), GUILayout.ExpandWidth(true)); CharacterEditor characterEditor = Editor.CreateEditor(t.character) as CharacterEditor; characterEditor.DrawPreview(previewRect, characterTexture); DestroyImmediate(characterEditor); } serializedObject.ApplyModifiedProperties(); } } }