public static void Insert() { GameObject selected = Selection.activeObject as GameObject; MeshDeformer deformer = selected.GetComponentInParent <MeshDeformer>(); Undo.RecordObject(deformer, "Battlehub.MeshDeformer.Prepend"); Scaffold[] scaffolds = deformer.GetComponentsInChildren <Scaffold>(); foreach (Scaffold scaffold in scaffolds) { Undo.RecordObject(scaffold, "Battlehub.MeshDeformer.Prepend"); } SplineControlPoint ctrlPoint = selected.GetComponent <ControlPoint>(); Undo.RegisterCreatedObjectUndo(deformer.Insert((ctrlPoint.Index + 2) / 3), "Battlehub.MeshDeformer.Insert"); EditorUtility.SetDirty(deformer); Selection.activeGameObject = deformer.GetComponentsInChildren <ControlPoint>(true).ElementAt(ctrlPoint.Index + 3).gameObject; }
public override void Insert() { if (SplineRuntimeEditor.Instance != null) { MeshDeformer deformer = SplineRuntimeEditor.Instance.SelectedSpline as MeshDeformer; if (deformer != null) { GameObject selection = RuntimeSelection.activeGameObject; if (selection != null) { ControlPoint ctrlPoint = selection.GetComponent <ControlPoint>(); if (ctrlPoint != null) { deformer.Insert((ctrlPoint.Index + 2) / 3); } } } else { base.Insert(); } } }
public override void Insert() { RunAction <SplineBase>((spline, go) => { MeshDeformer deformer = spline as MeshDeformer; if (deformer != null) { GameObject selection = RuntimeSelection.activeGameObject; if (selection != null) { ControlPoint ctrlPoint = selection.GetComponent <ControlPoint>(); if (ctrlPoint != null) { deformer.Insert((ctrlPoint.Index + 2) / 3); } } } else { base.Insert(); } }); }
protected override void OnInspectorGUIOverride() { if (m_meshDeformer == null) { m_meshDeformer = GetTarget() as MeshDeformer; } if (m_meshDeformer == null) { return; } if (targets.Length == 1) { int curveIndex = (SelectedIndex - 1) / 3; GUILayout.BeginHorizontal(); { if (curveIndex == 0) { if (GUILayout.Button("Prepend")) { Undo.RecordObject(m_meshDeformer, "Battlehub.MeshDeformer.Prepend"); RecordScaffolds(m_meshDeformer, "Battlehub.MeshDeformer.Prepend"); Undo.RegisterCreatedObjectUndo(m_meshDeformer.Prepend(), "Battlehub.MeshDeformer.Prepend"); EditorUtility.SetDirty(m_meshDeformer); Selection.activeGameObject = m_meshDeformer.GetComponentsInChildren <ControlPoint>(true).First().gameObject; } } if (GUILayout.Button("Insert")) { Undo.RecordObject(m_meshDeformer, "Battlehub.MeshDeformer.Insert"); RecordScaffolds(m_meshDeformer, "Battlehub.MeshDeformer.Insert"); Undo.RegisterCreatedObjectUndo(m_meshDeformer.Insert((SelectedIndex + 2) / 3), "Battlehub.MeshDeformer.Insert"); EditorUtility.SetDirty(m_meshDeformer); Selection.activeGameObject = m_meshDeformer.GetComponentsInChildren <ControlPoint>(true).ElementAt(SelectedIndex + 3).gameObject; } if (curveIndex == m_meshDeformer.CurveCount - 1) { if (GUILayout.Button("Append")) { Undo.RecordObject(m_meshDeformer, "Battlehub.MeshDeformer.Append"); Undo.RegisterCreatedObjectUndo(m_meshDeformer.Append(), "Battlehub.MeshDeformer.Append"); EditorUtility.SetDirty(m_meshDeformer); Selection.activeGameObject = m_meshDeformer.GetComponentsInChildren <ControlPoint>(true).Last().gameObject; } } } GUILayout.EndHorizontal(); if (GUILayout.Button("Straighten")) { Undo.RecordObject(m_meshDeformer, "Battlehub.MeshDeformer.Straighten"); RecordScaffolds(m_meshDeformer, "Battlehub.MeshDeformer.Straighten"); EditorUtility.SetDirty(m_meshDeformer); m_meshDeformer.Straighten(SelectedIndex); } if (SelectedIndex >= 0 && curveIndex < m_meshDeformer.CurveCount) { if (GUILayout.Button("Remove")) { Remove(); } } } }
protected override void OnInspectorGUIOverride() { if (m_meshDeformer == null) { m_meshDeformer = (MeshDeformer)GetTarget(); } if (m_meshDeformer == null) { return; } Scaffold scaffold = (Scaffold)target; ScaffoldWrapper scaffoldWrapper = null; int scaffoldIndex = -1; for (int i = 0; i < m_meshDeformer.Scaffolds.Length; ++i) { if (scaffold == m_meshDeformer.Scaffolds[i].Obj) { scaffoldIndex = i; scaffoldWrapper = m_meshDeformer.Scaffolds[i]; break; } } if (scaffoldWrapper != null) { EditorGUI.BeginChangeCheck(); Mesh altMesh = (Mesh)EditorGUILayout.ObjectField("Alt Mesh", scaffold.AltMesh, typeof(Mesh), false); if (EditorGUI.EndChangeCheck()) { EditorUtility.SetDirty(scaffold); scaffold.AltMesh = altMesh; m_meshDeformer.WrapAndDeform(scaffoldWrapper, altMesh); } if (GUILayout.Button("Reload Mesh")) { EditorUtility.SetDirty(scaffold); scaffold.AltMesh = altMesh; m_meshDeformer.WrapAndDeform(scaffoldWrapper, altMesh); } if (GUILayout.Button("Invert Mesh")) { Mesh invertedMesh = ScaleMesh(scaffold.transform, new Vector3(-1, 1, 1), scaffold.SourceMesh); scaffold.AltMesh = invertedMesh; m_meshDeformer.WrapAndDeform(scaffoldWrapper, invertedMesh); } EditorGUI.BeginChangeCheck(); bool isRigid = EditorGUILayout.Toggle("Is Rigid", scaffoldWrapper.IsRigid); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(m_meshDeformer, UNDO_CHANGEMODE); RecordScaffolds(m_meshDeformer, "Battlehub.MeshDeformer.Prepend"); EditorUtility.SetDirty(m_meshDeformer); for (int i = 0; i < scaffoldWrapper.CurveIndices.Length; ++i) { int curveIndex = scaffoldWrapper.CurveIndices[i]; m_meshDeformer.SetIsRigid(curveIndex * 3, isRigid); } } } if (scaffold.gameObject != m_meshDeformer.gameObject) { GUILayout.BeginHorizontal(); { if (scaffoldIndex == 0) { if (GUILayout.Button("Prepend")) { Undo.RecordObject(m_meshDeformer, "Battlehub.MeshDeformer.Prepend"); RecordScaffolds(m_meshDeformer, "Battlehub.MeshDeformer.Prepend"); Undo.RegisterCreatedObjectUndo(m_meshDeformer.Prepend(), "Battlehub.MeshDeformer.Prepend"); EditorUtility.SetDirty(m_meshDeformer); Selection.activeGameObject = m_meshDeformer.GetComponentsInChildren <ControlPoint>(true).First().gameObject; } } if (scaffoldWrapper != null) { if (GUILayout.Button("Insert")) { int curveIndex = scaffoldWrapper.CurveIndices.Min(); Undo.RecordObject(m_meshDeformer, "Battlehub.MeshDeformer.Insert"); Undo.RegisterCreatedObjectUndo(m_meshDeformer.Insert(curveIndex), "Battlehub.MeshDeformer.Insert"); EditorUtility.SetDirty(m_meshDeformer); Selection.activeGameObject = m_meshDeformer.GetComponentsInChildren <ControlPoint>(true).ElementAt(curveIndex + 3).gameObject; } } if (scaffoldIndex == m_meshDeformer.Scaffolds.Length - 1) { if (GUILayout.Button("Append")) { Undo.RecordObject(m_meshDeformer, "Battlehub.MeshDeformer.Append"); Undo.RegisterCreatedObjectUndo(m_meshDeformer.Append(), "Battlehub.MeshDeformer.Append"); EditorUtility.SetDirty(m_meshDeformer); Selection.activeGameObject = m_meshDeformer.GetComponentsInChildren <ControlPoint>(true).Last().gameObject; } } } GUILayout.EndHorizontal(); } if (scaffoldWrapper != null) { if (GUILayout.Button("Straighten")) { Undo.RecordObject(m_meshDeformer, "Battlehub.MeshDeformer.Straighten"); RecordScaffolds(m_meshDeformer, "Battlehub.MeshDeformer.Straighten"); EditorUtility.SetDirty(m_meshDeformer); m_meshDeformer.Straighten(scaffoldWrapper.CurveIndices.Min() * 3 + 1); } } }