104 lines
No EOL
3.5 KiB
C#
Executable file
104 lines
No EOL
3.5 KiB
C#
Executable file
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text.RegularExpressions;
|
|
using ABI.CCK.Components;
|
|
using ABI.CCK.Scripts.Editor;
|
|
using UnityEditor;
|
|
using UnityEditorInternal;
|
|
using UnityEngine;
|
|
|
|
namespace ABI.CCK.Scripts.Editor
|
|
{
|
|
[CustomEditor(typeof(ABI.CCK.Components.CVRDistanceLod), true)]
|
|
public class CVRDistanceLodEditor : UnityEditor.Editor
|
|
{
|
|
private CVRDistanceLod _lod;
|
|
|
|
private ReorderableList reorderableList;
|
|
|
|
private CVRDistanceLodGroup entity;
|
|
|
|
private void InitializeList()
|
|
{
|
|
reorderableList = new ReorderableList(_lod.Groups, typeof(CVRDistanceLodGroup),
|
|
false, true, true, true);
|
|
reorderableList.drawHeaderCallback = OnDrawHeader;
|
|
reorderableList.drawElementCallback = OnDrawElement;
|
|
reorderableList.elementHeightCallback = OnHeightElement;
|
|
reorderableList.onAddCallback = OnAdd;
|
|
reorderableList.onChangedCallback = OnChanged;
|
|
}
|
|
|
|
private void OnChanged(ReorderableList list)
|
|
{
|
|
//EditorUtility.SetDirty(target);
|
|
}
|
|
|
|
private void OnAdd(ReorderableList list)
|
|
{
|
|
_lod.Groups.Add(new CVRDistanceLodGroup());
|
|
Repaint();
|
|
}
|
|
|
|
private float OnHeightElement(int index)
|
|
{
|
|
return EditorGUIUtility.singleLineHeight * 3 * 1.25f;
|
|
}
|
|
|
|
private void OnDrawElement(Rect rect, int index, bool isactive, bool isfocused)
|
|
{
|
|
if (index > _lod.Groups.Count) return;
|
|
entity = _lod.Groups[index];
|
|
|
|
rect.y += 2;
|
|
rect.x += 12;
|
|
rect.width -= 12;
|
|
Rect _rect = new Rect(rect.x, rect.y, 100, EditorGUIUtility.singleLineHeight);
|
|
|
|
EditorGUI.LabelField(_rect, "Game Object");
|
|
|
|
_rect.x += 100;
|
|
_rect.width = rect.width - 100;
|
|
|
|
entity.GameObject = (GameObject) EditorGUI.ObjectField(_rect, entity.GameObject, typeof(GameObject), true);
|
|
|
|
rect.y += EditorGUIUtility.singleLineHeight * 1.25f;
|
|
_rect = new Rect(rect.x, rect.y, 100, EditorGUIUtility.singleLineHeight);
|
|
|
|
EditorGUI.LabelField(_rect, "Min Distance");
|
|
|
|
_rect.x += 100;
|
|
_rect.width = rect.width - 100;
|
|
|
|
entity.MinDistance = EditorGUI.FloatField(_rect, entity.MinDistance);
|
|
|
|
rect.y += EditorGUIUtility.singleLineHeight * 1.25f;
|
|
_rect = new Rect(rect.x, rect.y, 100, EditorGUIUtility.singleLineHeight);
|
|
|
|
EditorGUI.LabelField(_rect, "Max Distance");
|
|
|
|
_rect.x += 100;
|
|
_rect.width = rect.width - 100;
|
|
|
|
entity.MaxDistance = EditorGUI.FloatField(_rect, entity.MaxDistance);
|
|
}
|
|
|
|
private void OnDrawHeader(Rect rect)
|
|
{
|
|
Rect _rect = new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight);
|
|
GUI.Label(_rect, "Groups");
|
|
EditorGUIExtensions.UtilityMenu(_rect, reorderableList);
|
|
}
|
|
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
if (_lod == null) _lod = (CVRDistanceLod) target;
|
|
|
|
_lod.distance3D = EditorGUILayout.Toggle("3D Distance", _lod.distance3D);
|
|
|
|
if (reorderableList == null) InitializeList();
|
|
reorderableList.DoLayoutList();
|
|
}
|
|
}
|
|
} |