rabidus-test/Assets/Dreamteck/Splines/Editor/Tools/SplineTool.cs

209 lines
6.2 KiB
C#

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);
}
}
}