OverrideScreenPropertiesEditor.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using UnityEditor;
  6. using UnityEngine;
  7. namespace TheraBytes.BetterUi.Editor
  8. {
  9. [CustomEditor(typeof(OverrideScreenProperties)), CanEditMultipleObjects]
  10. public class OverrideScreenPropertiesEditor : UnityEditor.Editor
  11. {
  12. SerializedProperty settingsFallback, settingsList;
  13. void OnEnable()
  14. {
  15. OverrideScreenProperties osp = target as OverrideScreenProperties;
  16. this.settingsFallback = serializedObject.FindProperty("settingsFallback");
  17. this.settingsList = serializedObject.FindProperty("customSettings");
  18. if (osp.FallbackSettings.PropertyIterator().All(o => (int)o.Mode == 0 && o.Value == 0))
  19. {
  20. InitElement(osp.FallbackSettings.ScreenConfigName, settingsFallback);
  21. }
  22. }
  23. public override void OnInspectorGUI()
  24. {
  25. ScreenConfigConnectionHelper.DrawGui("Settings", settingsList, ref settingsFallback, DrawSettings, InitElement);
  26. }
  27. private void InitElement(string configName, SerializedProperty settings)
  28. {
  29. SerializedProperty width = settings.FindPropertyRelative("OptimizedWidthOverride");
  30. SerializedProperty height = settings.FindPropertyRelative("OptimizedHeightOverride");
  31. SerializedProperty dpi = settings.FindPropertyRelative("OptimizedDpiOverride");
  32. var info = ResolutionMonitor.GetOpimizedScreenInfo(configName);
  33. SetValue(width, OverrideScreenProperties.OverrideMode.Override, info.Resolution.x);
  34. SetValue(height, OverrideScreenProperties.OverrideMode.Override, info.Resolution.y);
  35. SetValue(dpi, OverrideScreenProperties.OverrideMode.Inherit, info.Dpi);
  36. serializedObject.ApplyModifiedProperties();
  37. }
  38. private void DrawSettings(string configName, SerializedProperty settings)
  39. {
  40. SerializedProperty width = settings.FindPropertyRelative("OptimizedWidthOverride");
  41. SerializedProperty height = settings.FindPropertyRelative("OptimizedHeightOverride");
  42. SerializedProperty dpi = settings.FindPropertyRelative("OptimizedDpiOverride");
  43. EditorGUILayout.BeginVertical("box");
  44. DrawProperty("Width", width);
  45. DrawProperty("Height", height);
  46. DrawProperty("DPI", dpi);
  47. EditorGUILayout.EndVertical();
  48. }
  49. private void DrawProperty(string label, SerializedProperty property)
  50. {
  51. SerializedProperty value = property.FindPropertyRelative("value");
  52. SerializedProperty mode = property.FindPropertyRelative("mode");
  53. EditorGUILayout.BeginHorizontal();
  54. float labelWidth = EditorGUIUtility.labelWidth;
  55. EditorGUILayout.PropertyField(mode, new GUIContent(label));
  56. if(mode.intValue == (int)OverrideScreenProperties.OverrideMode.Override)
  57. {
  58. EditorGUIUtility.labelWidth = 1;
  59. EditorGUILayout.PropertyField(value, new GUIContent());
  60. EditorGUIUtility.labelWidth = labelWidth;
  61. }
  62. EditorGUILayout.EndHorizontal();
  63. }
  64. public void SetValue(SerializedProperty property, OverrideScreenProperties.OverrideMode mode, float value)
  65. {
  66. SerializedProperty modeProp = property.FindPropertyRelative("mode");
  67. SerializedProperty valueProp = property.FindPropertyRelative("value");
  68. modeProp.intValue = (int)mode;
  69. valueProp.floatValue = value;
  70. }
  71. }
  72. }