KaiClavier

STMPresetController.cs

Jul 22nd, 2025
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.61 KB | None | 0 0
  1. //Copyright (c) 2025 Kai Clavier [kaiclavier.com] Do Not Distribute
  2. using UnityEngine;
  3. #if UNITY_EDITOR
  4. using UnityEditor;
  5. #endif
  6.  
  7. #if UNITY_EDITOR
  8. [CustomEditor(typeof(STMPresetController))]
  9. [CanEditMultipleObjects]
  10. public class STMPresetControllerEditor : Editor
  11. {
  12. private STMPresetController controller;
  13. private bool foldout = true;
  14. public override void OnInspectorGUI()
  15. {
  16. serializedObject.Update();
  17. controller = target as STMPresetController;
  18.  
  19. EditorGUILayout.PropertyField(serializedObject.FindProperty("superTextMesh"));
  20. if(controller != null && controller.superTextMesh != null)
  21. {
  22.  
  23. if(controller.preset == null)
  24. {
  25. EditorGUILayout.BeginHorizontal();
  26. EditorGUILayout.PropertyField(serializedObject.FindProperty("preset"));
  27. if(GUILayout.Button("NEW"))
  28. {
  29. AssetDatabase.Refresh();
  30. //Debug.Log(System.IO.Path.Combine(presetFolderPath, "Arial_20px" + ".asset"));
  31. //create a new preset
  32. var newPreset = ScriptableObject.CreateInstance<STMPreset>();
  33. //work with undo
  34. Undo.RegisterCreatedObjectUndo(newPreset, "Created new Preset");
  35. newPreset.CopySettingsFrom(controller.superTextMesh);
  36. //create new folderif needed
  37. if(!AssetDatabase.IsValidFolder(presetFolderPath))
  38. {
  39. AssetDatabase.CreateFolder(STMPath, "Presets");
  40. }
  41. var defaultName = newPreset.DescriptiveName;
  42. //put in asset database
  43. AssetDatabase.CreateAsset(newPreset, UnityEditor.AssetDatabase.GenerateUniqueAssetPath(
  44. System.IO.Path.Combine(presetFolderPath,
  45. defaultName + ".asset")));
  46. serializedObject.FindProperty("preset").objectReferenceValue = newPreset;
  47.  
  48.  
  49. AssetDatabase.SaveAssets();
  50. }
  51.  
  52. EditorGUILayout.EndHorizontal();
  53. }
  54. else
  55. {
  56. var presetProp = serializedObject.FindProperty("preset");
  57. var foldoutRect = EditorGUILayout.GetControlRect();
  58. var foldoutContent = new GUIContent(presetProp.displayName, presetProp.tooltip);
  59.  
  60. //EditorGUI.BeginProperty(foldoutRect, foldoutContent, presetProp);
  61. foldout = EditorGUI.Foldout(foldoutRect, foldout, "");
  62. EditorGUI.ObjectField(foldoutRect, presetProp, foldoutContent);
  63. //EditorGUI.EndProperty();
  64. if(foldout)
  65. {
  66. EditorGUI.indentLevel++;
  67. //EditorGUILayout.begin;
  68. var vertRect = EditorGUILayout.BeginVertical();
  69. EditorGUILayout.Space();
  70.  
  71. EditorGUI.DrawRect(vertRect,
  72. new Color(0f, 0f, 0f, 0.2f));
  73.  
  74. var presetEditor = Editor.CreateEditor(controller.preset);
  75. presetEditor.OnInspectorGUI();
  76.  
  77. EditorGUILayout.Space();
  78. EditorGUILayout.EndVertical();
  79. EditorGUI.indentLevel--;
  80. }
  81.  
  82. }
  83.  
  84. EditorGUI.BeginDisabledGroup(controller.preset == null);
  85. if(GUILayout.Button("Copy Super Text Mesh to Preset"))
  86. {
  87. controller.CopyToPreset();
  88. }
  89.  
  90. if(GUILayout.Button("Paste Preset to Super Text Mesh"))
  91. {
  92. controller.PasteFromPreset();
  93. }
  94.  
  95. if(GUILayout.Button("Paste Preset to ALL"))
  96. {
  97. controller.PasteFromAllPresets();
  98. }
  99.  
  100. EditorGUI.EndDisabledGroup();
  101. }
  102. serializedObject.ApplyModifiedProperties();
  103. }
  104.  
  105. public static string presetFolderPath => System.IO.Path.Combine(STMPath, "Presets");
  106. public static string STMPath
  107. {
  108. get
  109. {
  110. string searchValue = "Clavian/SuperTextMesh";
  111. string returnPath = "";
  112. string[] allPaths = AssetDatabase.GetAllAssetPaths();
  113. for (int i = 0; i < allPaths.Length; i++)
  114. {
  115. if (allPaths[i].Contains(searchValue))
  116. {
  117. // This is the path we want! Let's strip out everything after the searchValue
  118. returnPath = allPaths[i];
  119. returnPath = returnPath.Remove(returnPath.IndexOf(searchValue));
  120. returnPath += searchValue;
  121. break;
  122. }
  123. }
  124.  
  125. return returnPath;
  126. }
  127. }
  128. }
  129. #endif
  130. [RequireComponent(typeof(SuperTextMesh))]
  131. public class STMPresetController : MonoBehaviour
  132. {
  133. public SuperTextMesh superTextMesh;
  134. public STMPreset preset; //settings copied from here...
  135.  
  136. private void Reset()
  137. {
  138. //grab component
  139. superTextMesh = GetComponent<SuperTextMesh>();
  140. }
  141.  
  142. public void CopyToPreset()
  143. {
  144. preset.CopySettingsFrom(superTextMesh);
  145. }
  146.  
  147. public void PasteFromPreset()
  148. {
  149. if(preset == null) return;
  150.  
  151. preset.CopySettingsTo(superTextMesh);
  152.  
  153. superTextMesh.Rebuild();
  154. }
  155.  
  156. public void PasteFromAllPresets()
  157. {
  158. STMPresetController[] allControllers = FindObjectsOfType<STMPresetController>();
  159. for(int i=0, iL=allControllers.Length; i<iL; i++)
  160. {
  161. //apply to all with the same subscription.
  162. if(allControllers[i].preset == preset)
  163. {
  164. allControllers[i].PasteFromPreset();
  165. }
  166. }
  167. }
  168. }
  169.  
Advertisement
Add Comment
Please, Sign In to add comment