Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Copyright (c) 2025 Kai Clavier [kaiclavier.com] Do Not Distribute
- using UnityEngine;
- #if UNITY_EDITOR
- using UnityEditor;
- #endif
- #if UNITY_EDITOR
- [CustomEditor(typeof(STMPresetController))]
- [CanEditMultipleObjects]
- public class STMPresetControllerEditor : Editor
- {
- private STMPresetController controller;
- private bool foldout = true;
- public override void OnInspectorGUI()
- {
- serializedObject.Update();
- controller = target as STMPresetController;
- EditorGUILayout.PropertyField(serializedObject.FindProperty("superTextMesh"));
- if(controller != null && controller.superTextMesh != null)
- {
- if(controller.preset == null)
- {
- EditorGUILayout.BeginHorizontal();
- EditorGUILayout.PropertyField(serializedObject.FindProperty("preset"));
- if(GUILayout.Button("NEW"))
- {
- AssetDatabase.Refresh();
- //Debug.Log(System.IO.Path.Combine(presetFolderPath, "Arial_20px" + ".asset"));
- //create a new preset
- var newPreset = ScriptableObject.CreateInstance<STMPreset>();
- //work with undo
- Undo.RegisterCreatedObjectUndo(newPreset, "Created new Preset");
- newPreset.CopySettingsFrom(controller.superTextMesh);
- //create new folderif needed
- if(!AssetDatabase.IsValidFolder(presetFolderPath))
- {
- AssetDatabase.CreateFolder(STMPath, "Presets");
- }
- var defaultName = newPreset.DescriptiveName;
- //put in asset database
- AssetDatabase.CreateAsset(newPreset, UnityEditor.AssetDatabase.GenerateUniqueAssetPath(
- System.IO.Path.Combine(presetFolderPath,
- defaultName + ".asset")));
- serializedObject.FindProperty("preset").objectReferenceValue = newPreset;
- AssetDatabase.SaveAssets();
- }
- EditorGUILayout.EndHorizontal();
- }
- else
- {
- var presetProp = serializedObject.FindProperty("preset");
- var foldoutRect = EditorGUILayout.GetControlRect();
- var foldoutContent = new GUIContent(presetProp.displayName, presetProp.tooltip);
- //EditorGUI.BeginProperty(foldoutRect, foldoutContent, presetProp);
- foldout = EditorGUI.Foldout(foldoutRect, foldout, "");
- EditorGUI.ObjectField(foldoutRect, presetProp, foldoutContent);
- //EditorGUI.EndProperty();
- if(foldout)
- {
- EditorGUI.indentLevel++;
- //EditorGUILayout.begin;
- var vertRect = EditorGUILayout.BeginVertical();
- EditorGUILayout.Space();
- EditorGUI.DrawRect(vertRect,
- new Color(0f, 0f, 0f, 0.2f));
- var presetEditor = Editor.CreateEditor(controller.preset);
- presetEditor.OnInspectorGUI();
- EditorGUILayout.Space();
- EditorGUILayout.EndVertical();
- EditorGUI.indentLevel--;
- }
- }
- EditorGUI.BeginDisabledGroup(controller.preset == null);
- if(GUILayout.Button("Copy Super Text Mesh to Preset"))
- {
- controller.CopyToPreset();
- }
- if(GUILayout.Button("Paste Preset to Super Text Mesh"))
- {
- controller.PasteFromPreset();
- }
- if(GUILayout.Button("Paste Preset to ALL"))
- {
- controller.PasteFromAllPresets();
- }
- EditorGUI.EndDisabledGroup();
- }
- serializedObject.ApplyModifiedProperties();
- }
- public static string presetFolderPath => System.IO.Path.Combine(STMPath, "Presets");
- public static string STMPath
- {
- get
- {
- string searchValue = "Clavian/SuperTextMesh";
- string returnPath = "";
- string[] allPaths = AssetDatabase.GetAllAssetPaths();
- for (int i = 0; i < allPaths.Length; i++)
- {
- if (allPaths[i].Contains(searchValue))
- {
- // This is the path we want! Let's strip out everything after the searchValue
- returnPath = allPaths[i];
- returnPath = returnPath.Remove(returnPath.IndexOf(searchValue));
- returnPath += searchValue;
- break;
- }
- }
- return returnPath;
- }
- }
- }
- #endif
- [RequireComponent(typeof(SuperTextMesh))]
- public class STMPresetController : MonoBehaviour
- {
- public SuperTextMesh superTextMesh;
- public STMPreset preset; //settings copied from here...
- private void Reset()
- {
- //grab component
- superTextMesh = GetComponent<SuperTextMesh>();
- }
- public void CopyToPreset()
- {
- preset.CopySettingsFrom(superTextMesh);
- }
- public void PasteFromPreset()
- {
- if(preset == null) return;
- preset.CopySettingsTo(superTextMesh);
- superTextMesh.Rebuild();
- }
- public void PasteFromAllPresets()
- {
- STMPresetController[] allControllers = FindObjectsOfType<STMPresetController>();
- for(int i=0, iL=allControllers.Length; i<iL; i++)
- {
- //apply to all with the same subscription.
- if(allControllers[i].preset == preset)
- {
- allControllers[i].PasteFromPreset();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment