using UnityEditor; using UnityEngine; namespace Flexalon.Editor { [CustomEditor(typeof(FlexalonComponent)), CanEditMultipleObjects] public class FlexalonComponentEditor : UnityEditor.Editor { public static void Create(string name, Object context) where T : MonoBehaviour { FlexalonEditor.Create(); var go = new GameObject(name); Undo.RegisterCreatedObjectUndo(go, "Create " + name); if (context is GameObject) { go.transform.SetParent((context as GameObject).transform, false); } Flexalon.AddComponent(go); Selection.activeGameObject = go; } protected void ForceUpdateButton() { if (GUILayout.Button("Force Update")) { foreach (var target in targets) { ForceUpdate(target as FlexalonComponent); } } } protected void ApplyModifiedProperties() { if (serializedObject.ApplyModifiedProperties()) { foreach (var target in targets) { Record(target as FlexalonComponent); (target as FlexalonComponent).MarkDirty(); } Flexalon.GetOrCreate().UpdateDirtyNodes(); } } protected void Record(FlexalonComponent script) { Undo.RecordObject(script, "Record Component Edit"); PrefabUtility.RecordPrefabInstancePropertyModifications(script); if (script.Node != null && script.Node.Result) { Undo.RecordObject(script.Node.Result, "Record Component Edit"); PrefabUtility.RecordPrefabInstancePropertyModifications(script.Node.Result); } Flexalon.RecordFrameChanges = true; } protected void MarkDirty(FlexalonComponent script) { script.MarkDirty(); Flexalon.GetOrCreate().UpdateDirtyNodes(); } protected void ForceUpdate(FlexalonComponent script) { Record(script); script.ForceUpdate(); } } }