123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414 |
- using UnityEngine;
- using UnityEditor;
- [CanEditMultipleObjects, CustomEditor(typeof(MegaBezPatch))]
- public class MegaBezPatchEditor : Editor
- {
- [MenuItem("GameObject/Create Other/MegaShape/Bez Patch")]
- static void CreateBezPatch()
- {
- Vector3 pos = Vector3.zero;
- if ( UnityEditor.SceneView.lastActiveSceneView != null )
- pos = UnityEditor.SceneView.lastActiveSceneView.pivot;
- GameObject go = new GameObject("Bez Patch");
- MeshFilter mf = go.AddComponent<MeshFilter>();
- mf.sharedMesh = new Mesh();
- MeshRenderer mr = go.AddComponent<MeshRenderer>();
- Material[] mats = new Material[1];
- mr.sharedMaterials = mats;
- MegaBezPatch pm = go.AddComponent<MegaBezPatch>();
- pm.mesh = mf.sharedMesh;
- go.transform.position = pos;
- Selection.activeObject = go;
- pm.Rebuild();
- // Add the first warp
- }
- public override void OnInspectorGUI()
- {
- MegaBezPatch mod = (MegaBezPatch)target;
- #if !UNITY_5 && !UNITY_2017 && !UNITY_2018 && !UNITY_2019 && !UNITY_2020
- EditorGUIUtility.LookLikeControls();
- #endif
- float Width = EditorGUILayout.FloatField("Width", mod.Width);
- if ( Width != mod.Width )
- {
- mod.AdjustLattice(Width, mod.Height);
- }
- float Height = EditorGUILayout.FloatField("Height", mod.Height);
- if ( Height != mod.Height )
- {
- mod.AdjustLattice(mod.Width, Height);
- }
- mod.WidthSegs = EditorGUILayout.IntField("Width Segs", mod.WidthSegs);
- mod.HeightSegs = EditorGUILayout.IntField("Height Segs", mod.HeightSegs);
- mod.recalcBounds = EditorGUILayout.Toggle("Recalc Bounds", mod.recalcBounds);
- //mod.recalcNormals = EditorGUILayout.Toggle("Recalc Normals", mod.recalcNormals);
- mod.recalcTangents = EditorGUILayout.Toggle("Recalc Tangents", mod.recalcTangents);
- mod.GenUVs = EditorGUILayout.BeginToggleGroup("Gen UVs", mod.GenUVs);
- mod.UVOffset = EditorGUILayout.Vector2Field("UV Offset", mod.UVOffset);
- mod.UVScale = EditorGUILayout.Vector2Field("UV Scale", mod.UVScale);
- EditorGUILayout.EndToggleGroup();
- mod.showgizmos = EditorGUILayout.Toggle("Show Gizmos", mod.showgizmos);
- mod.showlabels = EditorGUILayout.Toggle("Show Labels", mod.showlabels);
- mod.latticecol = EditorGUILayout.ColorField("Lattice Color", mod.latticecol);
- mod.positionhandles = EditorGUILayout.Toggle("Position Handles", mod.positionhandles);
- mod.handlesize = EditorGUILayout.FloatField("Handle Size", mod.handlesize);
- mod.snap = EditorGUILayout.Vector2Field("Snap", mod.snap);
- mod.align = EditorGUILayout.Toggle("Align", mod.align);
- //mod.scale = EditorGUILayout.FloatField("Scale", mod.scale);
- mod.showlatticepoints = EditorGUILayout.Foldout(mod.showlatticepoints, "Lattice Points");
- mod.switchtime = EditorGUILayout.FloatField("Switch Time", mod.switchtime);
- mod.animateWarps = EditorGUILayout.Toggle("Animate Warps", mod.animateWarps);
- if ( mod.showlatticepoints )
- {
- mod.p11 = EditorGUILayout.Vector2Field("p11", mod.p11);
- mod.p12 = EditorGUILayout.Vector2Field("p12", mod.p12);
- mod.p13 = EditorGUILayout.Vector2Field("p13", mod.p13);
- mod.p14 = EditorGUILayout.Vector2Field("p14", mod.p14);
- mod.p21 = EditorGUILayout.Vector2Field("p21", mod.p21);
- mod.p22 = EditorGUILayout.Vector2Field("p22", mod.p22);
- mod.p23 = EditorGUILayout.Vector2Field("p23", mod.p23);
- mod.p24 = EditorGUILayout.Vector2Field("p24", mod.p24);
- mod.p31 = EditorGUILayout.Vector2Field("p31", mod.p31);
- mod.p32 = EditorGUILayout.Vector2Field("p32", mod.p32);
- mod.p33 = EditorGUILayout.Vector2Field("p33", mod.p33);
- mod.p34 = EditorGUILayout.Vector2Field("p34", mod.p34);
- mod.p41 = EditorGUILayout.Vector2Field("p41", mod.p41);
- mod.p42 = EditorGUILayout.Vector2Field("p42", mod.p42);
- mod.p43 = EditorGUILayout.Vector2Field("p43", mod.p43);
- mod.p44 = EditorGUILayout.Vector2Field("p44", mod.p44);
- }
- mod.destwarp = EditorGUILayout.IntField("Dest Warp", mod.destwarp);
- int currentwarp = EditorGUILayout.IntSlider("Warp", mod.currentwarp, 0, mod.warps.Count - 1);
- if ( currentwarp != mod.currentwarp )
- {
- mod.SetWarp(currentwarp);
- }
- //mod.useWarpValue = EditorGUILayout.BeginToggleGroup("Use Warp Value", mod.useWarpValue);
- //mod.warpValue = EditorGUILayout.Slider("Warp Value", mod.warpValue, 0.0f, (float)(mod.warps.Count - 1));
- //EditorGUILayout.EndToggleGroup();
- EditorGUILayout.BeginHorizontal();
- if ( GUILayout.Button("Add Warp") )
- {
- mod.AddWarp();
- }
- if ( GUILayout.Button("Reset") )
- {
- mod.Reset();
- }
- EditorGUILayout.EndHorizontal();
- for ( int i = 0; i < mod.warps.Count; i++ )
- {
- EditorGUILayout.BeginHorizontal();
- mod.warps[i].name = EditorGUILayout.TextField("", mod.warps[i].name);
- //mod.meshes[i].Enabled = EditorGUILayout.Toggle("", mod.meshes[i].Enabled, GUILayout.MaxWidth(20));
- if ( GUILayout.Button("Set", GUILayout.MaxWidth(50)) )
- {
- mod.SetWarp(i);
- EditorUtility.SetDirty(mod);
- }
- if ( GUILayout.Button("Update", GUILayout.MaxWidth(50)) )
- {
- mod.UpdateWarp(i);
- }
- if ( GUILayout.Button("Delete", GUILayout.MaxWidth(50)) )
- mod.warps.RemoveAt(i);
- EditorGUILayout.EndHorizontal();
- }
- if ( GUI.changed ) //rebuild )
- {
- mod.Rebuild();
- EditorUtility.SetDirty(target);
- }
- }
- public void OnSceneGUI()
- {
- MegaBezPatch mod = (MegaBezPatch)target;
- if ( mod.showgizmos )
- {
- Handles.matrix = mod.transform.localToWorldMatrix;
- Handles.color = mod.latticecol;
- Handles.DrawLine(mod.p11, mod.p12);
- Handles.DrawLine(mod.p12, mod.p13);
- Handles.DrawLine(mod.p13, mod.p14);
- if ( !mod.align )
- {
- Handles.DrawLine(mod.p21, mod.p22);
- Handles.DrawLine(mod.p22, mod.p23);
- Handles.DrawLine(mod.p23, mod.p24);
- Handles.DrawLine(mod.p31, mod.p32);
- Handles.DrawLine(mod.p32, mod.p33);
- Handles.DrawLine(mod.p33, mod.p34);
- }
- Handles.DrawLine(mod.p41, mod.p42);
- Handles.DrawLine(mod.p42, mod.p43);
- Handles.DrawLine(mod.p43, mod.p44);
- Handles.DrawLine(mod.p11, mod.p21);
- Handles.DrawLine(mod.p21, mod.p31);
- Handles.DrawLine(mod.p31, mod.p41);
- if ( !mod.align )
- {
- Handles.DrawLine(mod.p12, mod.p22);
- Handles.DrawLine(mod.p22, mod.p32);
- Handles.DrawLine(mod.p32, mod.p42);
- Handles.DrawLine(mod.p13, mod.p23);
- Handles.DrawLine(mod.p23, mod.p33);
- Handles.DrawLine(mod.p33, mod.p43);
- }
- Handles.DrawLine(mod.p14, mod.p24);
- Handles.DrawLine(mod.p24, mod.p34);
- Handles.DrawLine(mod.p34, mod.p44);
- Quaternion rot = Quaternion.identity;
- if ( mod.showlabels )
- {
- Handles.Label(mod.p11, "11 " + mod.p11.ToString("0.00"));
- Handles.Label(mod.p14, "14 " + mod.p14.ToString("0.00"));
- Handles.Label(mod.p41, "41 " + mod.p41.ToString("0.00"));
- Handles.Label(mod.p44, "44 " + mod.p44.ToString("0.00"));
- if ( !mod.align )
- {
- Handles.Label(mod.p12, "12 " + mod.p12.ToString("0.00"));
- Handles.Label(mod.p13, "13 " + mod.p13.ToString("0.00"));
- Handles.Label(mod.p21, "21 " + mod.p21.ToString("0.00"));
- Handles.Label(mod.p22, "22 " + mod.p22.ToString("0.00"));
- Handles.Label(mod.p23, "23 " + mod.p23.ToString("0.00"));
- Handles.Label(mod.p24, "24 " + mod.p24.ToString("0.00"));
- Handles.Label(mod.p31, "31 " + mod.p31.ToString("0.00"));
- Handles.Label(mod.p32, "32 " + mod.p32.ToString("0.00"));
- Handles.Label(mod.p33, "33 " + mod.p33.ToString("0.00"));
- Handles.Label(mod.p34, "34 " + mod.p34.ToString("0.00"));
- Handles.Label(mod.p42, "42 " + mod.p42.ToString("0.00"));
- Handles.Label(mod.p43, "43 " + mod.p43.ToString("0.00"));
- }
- }
- Vector3 p11 = mod.p11;
- Vector3 p12 = mod.p12;
- Vector3 p13 = mod.p13;
- Vector3 p14 = mod.p14;
- Vector3 p21 = mod.p21;
- Vector3 p22 = mod.p22;
- Vector3 p23 = mod.p23;
- Vector3 p24 = mod.p24;
- Vector3 p31 = mod.p31;
- Vector3 p32 = mod.p32;
- Vector3 p33 = mod.p33;
- Vector3 p34 = mod.p34;
- Vector3 p41 = mod.p41;
- Vector3 p42 = mod.p42;
- Vector3 p43 = mod.p43;
- Vector3 p44 = mod.p44;
- if ( mod.positionhandles )
- {
- mod.p11 = Handles.PositionHandle(p11, rot);
- mod.p14 = Handles.PositionHandle(p14, rot);
- mod.p41 = Handles.PositionHandle(p41, rot);
- mod.p44 = Handles.PositionHandle(p44, rot);
- if ( !mod.align )
- {
- mod.p12 = Handles.PositionHandle(p12, rot);
- mod.p13 = Handles.PositionHandle(p13, rot);
- mod.p21 = Handles.PositionHandle(p21, rot);
- mod.p22 = Handles.PositionHandle(p22, rot);
- mod.p23 = Handles.PositionHandle(p23, rot);
- mod.p24 = Handles.PositionHandle(p24, rot);
- mod.p31 = Handles.PositionHandle(p31, rot);
- mod.p32 = Handles.PositionHandle(p32, rot);
- mod.p33 = Handles.PositionHandle(p33, rot);
- mod.p34 = Handles.PositionHandle(p34, rot);
- mod.p42 = Handles.PositionHandle(p42, rot);
- mod.p43 = Handles.PositionHandle(p43, rot);
- }
- }
- else
- {
- Handles.color = Color.green;
- #if UNITY_5_6 || UNITY_2017 || UNITY_2018 || UNITY_2019 || UNITY_2020
- mod.p11 = Handles.FreeMoveHandle(p11, rot, mod.handlesize, mod.snap, Handles.SphereHandleCap);
- mod.p14 = Handles.FreeMoveHandle(p14, rot, mod.handlesize, mod.snap, Handles.SphereHandleCap);
- mod.p41 = Handles.FreeMoveHandle(p41, rot, mod.handlesize, mod.snap, Handles.SphereHandleCap);
- mod.p44 = Handles.FreeMoveHandle(p44, rot, mod.handlesize, mod.snap, Handles.SphereHandleCap);
- if ( !mod.align )
- {
- mod.p12 = Handles.FreeMoveHandle(p12, rot, mod.handlesize, mod.snap, Handles.SphereHandleCap);
- mod.p13 = Handles.FreeMoveHandle(p13, rot, mod.handlesize, mod.snap, Handles.SphereHandleCap);
- mod.p21 = Handles.FreeMoveHandle(p21, rot, mod.handlesize, mod.snap, Handles.SphereHandleCap);
- mod.p22 = Handles.FreeMoveHandle(p22, rot, mod.handlesize, mod.snap, Handles.SphereHandleCap);
- mod.p23 = Handles.FreeMoveHandle(p23, rot, mod.handlesize, mod.snap, Handles.SphereHandleCap);
- mod.p24 = Handles.FreeMoveHandle(p24, rot, mod.handlesize, mod.snap, Handles.SphereHandleCap);
- mod.p31 = Handles.FreeMoveHandle(p31, rot, mod.handlesize, mod.snap, Handles.SphereHandleCap);
- mod.p32 = Handles.FreeMoveHandle(p32, rot, mod.handlesize, mod.snap, Handles.SphereHandleCap);
- mod.p33 = Handles.FreeMoveHandle(p33, rot, mod.handlesize, mod.snap, Handles.SphereHandleCap);
- mod.p34 = Handles.FreeMoveHandle(p34, rot, mod.handlesize, mod.snap, Handles.SphereHandleCap);
- mod.p42 = Handles.FreeMoveHandle(p42, rot, mod.handlesize, mod.snap, Handles.SphereHandleCap);
- mod.p43 = Handles.FreeMoveHandle(p43, rot, mod.handlesize, mod.snap, Handles.SphereHandleCap);
- }
- #else
- mod.p11 = Handles.FreeMoveHandle(p11 * mod.scale, rot, mod.handlesize, mod.snap, Handles.SphereCap) / mod.scale;
- mod.p14 = Handles.FreeMoveHandle(p14 * mod.scale, rot, mod.handlesize, mod.snap, Handles.SphereCap) / mod.scale;
- mod.p41 = Handles.FreeMoveHandle(p41 * mod.scale, rot, mod.handlesize, mod.snap, Handles.SphereCap) / mod.scale;
- mod.p44 = Handles.FreeMoveHandle(p44 * mod.scale, rot, mod.handlesize, mod.snap, Handles.SphereCap) / mod.scale;
- if ( !mod.align )
- {
- mod.p12 = Handles.FreeMoveHandle(p12 * mod.scale, rot, mod.handlesize, mod.snap, Handles.SphereCap) / mod.scale;
- mod.p13 = Handles.FreeMoveHandle(p13 * mod.scale, rot, mod.handlesize, mod.snap, Handles.SphereCap) / mod.scale;
- mod.p21 = Handles.FreeMoveHandle(p21 * mod.scale, rot, mod.handlesize, mod.snap, Handles.SphereCap) / mod.scale;
- mod.p22 = Handles.FreeMoveHandle(p22 * mod.scale, rot, mod.handlesize, mod.snap, Handles.SphereCap) / mod.scale;
- mod.p23 = Handles.FreeMoveHandle(p23 * mod.scale, rot, mod.handlesize, mod.snap, Handles.SphereCap) / mod.scale;
- mod.p24 = Handles.FreeMoveHandle(p24 * mod.scale, rot, mod.handlesize, mod.snap, Handles.SphereCap) / mod.scale;
- mod.p31 = Handles.FreeMoveHandle(p31 * mod.scale, rot, mod.handlesize, mod.snap, Handles.SphereCap) / mod.scale;
- mod.p32 = Handles.FreeMoveHandle(p32 * mod.scale, rot, mod.handlesize, mod.snap, Handles.SphereCap) / mod.scale;
- mod.p33 = Handles.FreeMoveHandle(p33 * mod.scale, rot, mod.handlesize, mod.snap, Handles.SphereCap) / mod.scale;
- mod.p34 = Handles.FreeMoveHandle(p34 * mod.scale, rot, mod.handlesize, mod.snap, Handles.SphereCap) / mod.scale;
- mod.p42 = Handles.FreeMoveHandle(p42 * mod.scale, rot, mod.handlesize, mod.snap, Handles.SphereCap) / mod.scale;
- mod.p43 = Handles.FreeMoveHandle(p43 * mod.scale, rot, mod.handlesize, mod.snap, Handles.SphereCap) / mod.scale;
- }
- #endif
- }
- bool dirty = false;
- if ( p11 != mod.p11 ) dirty = true;
- if ( p12 != mod.p12 ) dirty = true;
- if ( p13 != mod.p13 ) dirty = true;
- if ( p14 != mod.p14 ) dirty = true;
- if ( p21 != mod.p21 ) dirty = true;
- if ( p22 != mod.p22 ) dirty = true;
- if ( p23 != mod.p23 ) dirty = true;
- if ( p24 != mod.p24 ) dirty = true;
- if ( p31 != mod.p31 ) dirty = true;
- if ( p32 != mod.p32 ) dirty = true;
- if ( p33 != mod.p33 ) dirty = true;
- if ( p34 != mod.p34 ) dirty = true;
- if ( p41 != mod.p41 ) dirty = true;
- if ( p42 != mod.p42 ) dirty = true;
- if ( p43 != mod.p43 ) dirty = true;
- if ( p44 != mod.p44 ) dirty = true;
- if ( dirty )
- EditorUtility.SetDirty(target);
- #if false
- Handles.Label(mod.p11, "11");
- mod.p11 = Handles.PositionHandle(mod.p11, rot);
- Handles.Label(mod.p12, "12");
- mod.p12 = Handles.PositionHandle(mod.p12, rot);
- Handles.Label(mod.p13, "13");
- mod.p13 = Handles.PositionHandle(mod.p13, rot);
- Handles.Label(mod.p14, "14");
- mod.p14 = Handles.PositionHandle(mod.p14, rot);
- Handles.Label(mod.p21, "21");
- mod.p21 = Handles.PositionHandle(mod.p21, rot);
- Handles.Label(mod.p22, "22");
- mod.p22 = Handles.PositionHandle(mod.p22, rot);
- Handles.Label(mod.p23, "23");
- mod.p23 = Handles.PositionHandle(mod.p23, rot);
- Handles.Label(mod.p24, "24");
- mod.p24 = Handles.PositionHandle(mod.p24, rot);
- Handles.Label(mod.p31, "31");
- mod.p31 = Handles.PositionHandle(mod.p31, rot);
- Handles.Label(mod.p32, "32");
- mod.p32 = Handles.PositionHandle(mod.p32, rot);
- Handles.Label(mod.p33, "33");
- mod.p33 = Handles.PositionHandle(mod.p33, rot);
- Handles.Label(mod.p34, "34");
- mod.p34 = Handles.PositionHandle(mod.p34, rot);
- Handles.Label(mod.p41, "41");
- mod.p41 = Handles.PositionHandle(mod.p41, rot);
- Handles.Label(mod.p42, "42");
- mod.p42 = Handles.PositionHandle(mod.p42, rot);
- Handles.Label(mod.p43, "43");
- mod.p43 = Handles.PositionHandle(mod.p43, rot);
- Handles.Label(mod.p44, "44");
- mod.p44 = Handles.PositionHandle(mod.p44, rot);
- #endif
- }
- mod.p11.z = 0.0f;
- mod.p12.z = 0.0f;
- mod.p13.z = 0.0f;
- mod.p14.z = 0.0f;
- mod.p21.z = 0.0f;
- mod.p22.z = 0.0f;
- mod.p23.z = 0.0f;
- mod.p24.z = 0.0f;
- mod.p31.z = 0.0f;
- mod.p32.z = 0.0f;
- mod.p33.z = 0.0f;
- mod.p34.z = 0.0f;
- mod.p41.z = 0.0f;
- mod.p42.z = 0.0f;
- mod.p43.z = 0.0f;
- mod.p44.z = 0.0f;
- }
- }
|