1
This commit is contained in:
208
Assets/Dreamteck/Splines/Editor/Tools/SplineTool.cs
Normal file
208
Assets/Dreamteck/Splines/Editor/Tools/SplineTool.cs
Normal file
@@ -0,0 +1,208 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
|
||||
namespace Dreamteck.Splines
|
||||
{
|
||||
public class SplineTool
|
||||
{
|
||||
protected List<SplineComputer> splines = new List<SplineComputer>();
|
||||
protected bool promptSave = false;
|
||||
protected EditorWindow windowInstance = null;
|
||||
|
||||
public virtual string GetName()
|
||||
{
|
||||
return "Tool";
|
||||
}
|
||||
|
||||
public virtual void Open(EditorWindow window)
|
||||
{
|
||||
windowInstance = window;
|
||||
GetSplines();
|
||||
}
|
||||
|
||||
public virtual void Close()
|
||||
{
|
||||
if(promptSave) ClosingDialog();
|
||||
}
|
||||
|
||||
private void ClosingDialog()
|
||||
{
|
||||
if (EditorUtility.DisplayDialog("Unsaved Changes", ClosingDialogText(), "Yes", "No")) Save();
|
||||
else Cancel();
|
||||
}
|
||||
|
||||
protected virtual string ClosingDialogText()
|
||||
{
|
||||
return "There are unsaved changes. Do you wish to save them?";
|
||||
}
|
||||
|
||||
protected virtual void Save()
|
||||
{
|
||||
promptSave = false;
|
||||
}
|
||||
|
||||
protected virtual void Cancel()
|
||||
{
|
||||
promptSave = false;
|
||||
}
|
||||
|
||||
protected virtual string GetPrefix()
|
||||
{
|
||||
return "SplineTool";
|
||||
}
|
||||
|
||||
public virtual void Draw(Rect rect)
|
||||
{
|
||||
//EditorGUILayout.LabelField("Spline User", EditorStyles.boldLabel);
|
||||
|
||||
EditorGUILayout.LabelField("Selected Splines", EditorStyles.boldLabel);
|
||||
for (int i = 0; i < splines.Count; i++)
|
||||
{
|
||||
SplineComputer lastComputer = splines[i];
|
||||
splines[i] = (SplineComputer)EditorGUILayout.ObjectField(splines[i], typeof(SplineComputer), true);
|
||||
if (splines[i] == null)
|
||||
{
|
||||
splines.RemoveAt(i);
|
||||
i--;
|
||||
OnSplineRemoved(lastComputer);
|
||||
continue;
|
||||
}
|
||||
if (lastComputer != splines[i])
|
||||
{
|
||||
for (int j = 0; j < splines.Count; j++)
|
||||
{
|
||||
if (j == i) continue;
|
||||
if (splines[j] == splines[i])
|
||||
{
|
||||
splines[i] = lastComputer;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
SplineComputer newComp = null;
|
||||
newComp = (SplineComputer)EditorGUILayout.ObjectField(newComp, typeof(SplineComputer), true);
|
||||
if(newComp != null)
|
||||
{
|
||||
for (int i = 0; i < splines.Count; i++)
|
||||
{
|
||||
if (splines[i] == newComp)
|
||||
{
|
||||
newComp = null;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (newComp != null)
|
||||
{
|
||||
splines.Add(newComp);
|
||||
OnSplineAdded(newComp);
|
||||
}
|
||||
}
|
||||
EditorGUILayout.Space();
|
||||
}
|
||||
|
||||
protected virtual void OnSplineAdded(SplineComputer spline)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
protected virtual void OnSplineRemoved(SplineComputer spline)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
protected void ClipUI(SplineUser user)
|
||||
{
|
||||
float fclipFrom = (float)user.clipFrom, fclipTo = (float)user.clipTo;
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.MinMaxSlider(new GUIContent("Clip range:"), ref fclipFrom, ref fclipTo, 0f, 1f);
|
||||
EditorGUILayout.BeginHorizontal(GUILayout.MaxWidth(30));
|
||||
user.clipFrom = EditorGUILayout.FloatField(fclipFrom);
|
||||
user.clipTo = EditorGUILayout.FloatField(fclipTo);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
protected void ClipUI(ref double from, ref double to)
|
||||
{
|
||||
float fclipFrom = (float)from, fclipTo = (float)to;
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.MinMaxSlider(new GUIContent("Clip range:"), ref fclipFrom, ref fclipTo, 0f, 1f);
|
||||
EditorGUILayout.BeginHorizontal(GUILayout.MaxWidth(30));
|
||||
from = EditorGUILayout.FloatField(fclipFrom);
|
||||
to = EditorGUILayout.FloatField(fclipTo);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
protected void SaveCancelUI()
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
if (GUILayout.Button("Save")) Save();
|
||||
if (GUILayout.Button("Cancel")) Cancel();
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
protected virtual void Rebuild()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
protected void Repaint()
|
||||
{
|
||||
windowInstance.Repaint();
|
||||
}
|
||||
|
||||
protected void GetSplines()
|
||||
{
|
||||
splines.Clear();
|
||||
for (int i = 0; i < Selection.gameObjects.Length; i++)
|
||||
{
|
||||
splines.Add(Selection.gameObjects[i].GetComponent<SplineComputer>());
|
||||
}
|
||||
}
|
||||
|
||||
protected float LoadFloat(string name, float d)
|
||||
{
|
||||
return EditorPrefs.GetFloat(GetPrefix() + "_" + name, d);
|
||||
}
|
||||
|
||||
protected string LoadString(string name, string d)
|
||||
{
|
||||
return EditorPrefs.GetString(GetPrefix() + "_" + name, d);
|
||||
}
|
||||
|
||||
protected bool LoadBool(string name, bool d)
|
||||
{
|
||||
return EditorPrefs.GetBool(GetPrefix() + "_" + name, d);
|
||||
}
|
||||
|
||||
protected int LoadInt(string name, int d)
|
||||
{
|
||||
return EditorPrefs.GetInt(GetPrefix() + "_" + name, d);
|
||||
}
|
||||
|
||||
protected void SaveFloat(string name, float value)
|
||||
{
|
||||
EditorPrefs.SetFloat(GetPrefix() + "_" + name, value);
|
||||
}
|
||||
|
||||
protected void SaveString(string name, string value)
|
||||
{
|
||||
EditorPrefs.SetString(GetPrefix() + "_" + name, value);
|
||||
}
|
||||
|
||||
protected void SaveBool(string name, bool value)
|
||||
{
|
||||
EditorPrefs.SetBool(GetPrefix() + "_" + name, value);
|
||||
}
|
||||
|
||||
protected void SaveInt(string name, int value)
|
||||
{
|
||||
EditorPrefs.SetInt(GetPrefix() + "_" + name, value);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user