123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- #if UNITY_EDITOR
- using UnityEngine;
- using UnityEditor;
- using System.Reflection;
- //-----------------------------------------------------------------------------
- // Copyright 2012-2022 RenderHeads Ltd. All rights reserved.
- //-----------------------------------------------------------------------------
- namespace RenderHeads.Media.AVProMovieCapture.Editor
- {
- /*public static class Utils
- {
- public static T GetCopyOf<T>(this Component comp, T other) where T : Component
- {
- System.Type type = comp.GetType();
- if (type != other.GetType())
- {
- return null; // type mis-match
- }
- BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Default | BindingFlags.DeclaredOnly;
- PropertyInfo[] pinfos = type.GetProperties(flags);
- for (int i = 0; i < pinfos.Length; i++)
- {
- PropertyInfo pinfo = pinfos[i];
- if (pinfo.CanWrite)
- {
- try
- {
- pinfo.SetValue(comp, pinfo.GetValue(other, null), null);
- }
- catch { } // In case of NotImplementedException being thrown. For some reason specifying that exception didn't seem to catch it, so I didn't catch anything specific.
- }
- }
- FieldInfo[] finfos = type.GetFields(flags);
- foreach (var finfo in finfos)
- {
- finfo.SetValue(comp, finfo.GetValue(other));
- }
- return comp as T;
- }
- }*/
- internal enum BitrateUnits
- {
- BitsPerSecond,
- KBitsPerSecond,
- MBitsPerSecond,
- }
- public static class EditorUtils
- {
- public static string[] AudioCaptureSourceNames = { "None", "Unity", "Microphone", "Manual", "Wwise", "Unity Audio Mixer" };
- public static string[] CommonFrameRateNames = { "1", "10", "15", "23.98", "24 - CINEMA", "25 - PAL", "29.97 - NTSC", "30 - PC", "50 - PAL", "59.94 - NTSC", "60 - PC", "75", "90", "120" };
- public static float[] CommonFrameRateValues = { 1f, 10f, 15f, 23.976f, 24f, 25f, 29.97f, 30f, 50f, 59.94f, 60f, 75f, 90f, 120f };
- public static string[] CommonAudioSampleRateNames = { "8kHz", "22.5kHz", "44.1kHz", "48kHz", "96kHz" };
- public static int[] CommonAudioSampleRateValues = { 8000, 22050, 44100, 48000, 96000 };
- internal static string[] OutputTargetNames = new string[] { "Video File", "Image Sequence", "Named Pipe" };
- public static string[] CommonVideoBitRateNames = { "YouTube/360p30 H.264 - 1 Mbps",
- "YouTube/360p60 H.264 - 1.5 Mbps",
- "YouTube/480p30 H.264 - 2.5 Mbps",
- };
- public static float[] CommonVideoBitRateValues = { 1f, 1.5f, 2.5f };
- public static SerializedProperty AssertFindProperty(this SerializedObject so, string propertyName)
- {
- SerializedProperty result = so.FindProperty(propertyName);
- Debug.Assert(result != null, "Missing property: " + propertyName);
- return result;
- }
- public static void CentreLabel(string text, GUIStyle style = null)
- {
- GUILayout.BeginHorizontal();
- GUILayout.FlexibleSpace();
- if (style == null)
- {
- GUILayout.Label(text);
- }
- else
- {
- GUILayout.Label(text, style);
- }
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- }
- public static void BoolAsDropdown(string name, SerializedProperty prop, string trueOption, string falseOption)
- {
- string[] popupNames = { trueOption, falseOption };
- int popupIndex = 0;
- if (!prop.boolValue)
- {
- popupIndex = 1;
- }
- popupIndex = EditorGUILayout.Popup(name, popupIndex, popupNames);
- prop.boolValue = (popupIndex == 0);
- }
- public static void EnumAsDropdown(string name, SerializedProperty prop, string[] options)
- {
- prop.enumValueIndex = EditorGUILayout.Popup(name, prop.enumValueIndex, options);
- }
- public static void IntAsDropdown(string name, SerializedProperty prop, string[] options, int[] values)
- {
- int index = 0;
- for (int i = 0; i < values.Length; i++)
- {
- if (values[i] == prop.intValue)
- {
- index = i;
- break;
- }
- }
- index = EditorGUILayout.Popup(name, index, options);
- prop.intValue = values[index];
- }
- public static void FloatAsDropdown(string name, SerializedProperty prop, string[] options, float[] values, bool customAtEnd)
- {
- bool isFound = false;
- int index = 0;
- for (int i = 0; i < values.Length; i++)
- {
- if (values[i] == prop.floatValue)
- {
- isFound = true;
- index = i;
- break;
- }
- }
- if (!isFound && customAtEnd)
- {
- index = options.Length - 1;
- }
- EditorGUI.BeginChangeCheck();
- if (string.IsNullOrEmpty(name))
- {
- index = EditorGUILayout.Popup(index, options);
- }
- else
- {
- index = EditorGUILayout.Popup(name, index, options);
- }
- if (EditorGUI.EndChangeCheck())
- {
- prop.floatValue = values[index];
- }
- }
- private struct FloatPopupData
- {
- public FloatPopupData(SerializedObject obj, SerializedProperty prop, float value, Object target)
- {
- _obj = obj;
- _prop = prop;
- _value = value;
- _target = target;
- }
- public void Apply()
- {
- _prop.floatValue = _value;
- if (_obj.ApplyModifiedProperties())
- {
- EditorUtility.SetDirty(_target);
- }
- }
- private Object _target;
- private SerializedObject _obj;
- private SerializedProperty _prop;
- private float _value;
- }
- private static void FloatAsPopupCallback_Select(object obj)
- {
- ((FloatPopupData)obj).Apply();
- }
- public static void FloatAsPopup(string buttonText, string popupText, SerializedObject obj, SerializedProperty prop, string[] options, float[] values)
- {
- if (GUILayout.Button(buttonText, GUILayout.ExpandWidth(false)))
- {
- // Remove focus to clear the selection, otherwise the property field will not update
- GUI.FocusControl(null);
- GenericMenu toolsMenu = new GenericMenu();
- toolsMenu.AddDisabledItem(new GUIContent(popupText));
- toolsMenu.AddSeparator("");
- for (int i = 0; i < options.Length; i++)
- {
- bool isSelected = (values[i] == prop.floatValue);
- toolsMenu.AddItem(new GUIContent(options[i]), isSelected, FloatAsPopupCallback_Select, new FloatPopupData(obj, prop, values[i], obj.targetObject));
- }
- toolsMenu.ShowAsContext();
- }
- }
- internal static BitrateUnits BitrateUnitsDisplay = BitrateUnits.MBitsPerSecond;
- internal static void BitrateField(string name, SerializedProperty prop)
- {
- GUILayout.BeginHorizontal();
- {
- double factor = 1.0;
- switch (BitrateUnitsDisplay)
- {
- case BitrateUnits.BitsPerSecond:
- factor = 1.0;
- break;
- case BitrateUnits.KBitsPerSecond:
- factor = 1000;
- break;
- case BitrateUnits.MBitsPerSecond:
- factor = 1000000;
- break;
- }
-
- double bitrate = (uint)prop.intValue / factor;
- bitrate = EditorGUILayout.DelayedDoubleField(name, bitrate);
- prop.intValue = (int)(bitrate * factor);
- }
-
- BitrateUnitsDisplay = (BitrateUnits)EditorGUILayout.Popup((int)BitrateUnitsDisplay, new string[] { "bps", "Kbps", "Mbps" }, GUILayout.Width(64f), GUILayout.MaxWidth(64f), GUILayout.ExpandWidth(false));
- GUILayout.EndHorizontal();
- }
- public static void DrawSection(string name, ref bool isExpanded, System.Action action)
- {
- Color boxbgColor = new Color(0.8f, 0.8f, 0.8f, 0.1f);
- if (EditorGUIUtility.isProSkin)
- {
- boxbgColor = Color.black;
- }
- DrawSectionColored(name, ref isExpanded, action, boxbgColor, Color.white, Color.white);
- }
- public static void DrawSectionColored(string name, ref bool isExpanded, System.Action action, Color boxbgcolor, Color bgcolor, Color color)
- {
- GUI.color = Color.white;
- GUI.backgroundColor = Color.clear;
- //GUI.backgroundColor = bgcolor;
- if (isExpanded)
- {
- GUI.color = Color.white;
- GUI.backgroundColor = boxbgcolor;
- }
- GUILayout.BeginVertical("box");
- GUI.color = color;
- GUI.backgroundColor = bgcolor;
-
- if (GUILayout.Button(name, EditorStyles.toolbarButton))
- {
- isExpanded = !isExpanded;
- }
- //GUI.backgroundColor = Color.white;
- //GUI.color = Color.white;
- if (isExpanded)
- {
- action.Invoke();
- }
- GUI.backgroundColor = Color.white;
- GUI.color = Color.white;
- GUILayout.EndVertical();
- }
- }
- }
- #endif
|