You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.9 KiB
C#
103 lines
3.9 KiB
C#
using System;
|
|
using System.Collections;
|
|
using Fusion.Editor;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace Fusion.Addons.SimpleKCC.Editor
|
|
{
|
|
[InitializeOnLoad]
|
|
[CustomEditor(typeof(KCC), true)]
|
|
public class KCCEditor : UnityEditor.Editor
|
|
{
|
|
private const string SETTINGS_PROPERTY_NAME = "_settings";
|
|
|
|
private const string INTERPOLATION_DATA_SOURCE_PROPERTY_NAME = "_interpolationDataSource";
|
|
|
|
private static string[] _excludedProperties = new string[2] { "_settings", "_interpolationDataSource" };
|
|
|
|
private static bool _resetTools = false;
|
|
|
|
[InitializeOnLoadMethod]
|
|
private static void Initialize()
|
|
{
|
|
Selection.selectionChanged = (Action)Delegate.Remove(Selection.selectionChanged, new Action(OnSelectionChanged));
|
|
Selection.selectionChanged = (Action)Delegate.Combine(Selection.selectionChanged, new Action(OnSelectionChanged));
|
|
static void OnSelectionChanged()
|
|
{
|
|
if (_resetTools)
|
|
{
|
|
_resetTools = false;
|
|
Tools.hidden = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void OnSceneGUI()
|
|
{
|
|
_resetTools = true;
|
|
if (!Application.isPlaying)
|
|
{
|
|
return;
|
|
}
|
|
|
|
KCC kCC = base.target as KCC;
|
|
if (kCC.Object == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
// if (Tools.current == Tool.Move)
|
|
// {
|
|
// Tools.hidden = true;
|
|
// Vector3 position = kCC.Transform.position;
|
|
// Vector3 targetPosition = Handles.PositionHandle(position, kCC.Transform.rotation);
|
|
// if (!targetPosition.Equals(position))
|
|
// {
|
|
// kCC.FixedData.TargetPosition = targetPosition;
|
|
// kCC.RenderData.TargetPosition = targetPosition;
|
|
// kCC.SynchronizeTransform(synchronizePosition: true, synchronizeRotation: false, allowAntiJitter: false);
|
|
// }
|
|
// }
|
|
// else if (Tools.current == Tool.Rotate)
|
|
// {
|
|
// Tools.hidden = true;
|
|
// Quaternion rotation = kCC.Transform.rotation;
|
|
// Quaternion quaternion = Handles.RotationHandle(rotation, kCC.Transform.position);
|
|
// if (!quaternion.Equals(rotation))
|
|
// {
|
|
// Vector3 eulerAngles = (Quaternion.Inverse(rotation) * quaternion).eulerAngles;
|
|
// if (eulerAngles.y != 0f)
|
|
// {
|
|
// kCC.Data.AddLookRotation(0f, eulerAngles.y);
|
|
// float lookYaw = kCC.Data.LookYaw;
|
|
// kCC.FixedData.LookYaw = lookYaw;
|
|
// kCC.RenderData.LookYaw = lookYaw;
|
|
// kCC.SynchronizeTransform(synchronizePosition: false, synchronizeRotation: true, allowAntiJitter: false);
|
|
// }
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// Tools.hidden = false;
|
|
// }
|
|
}
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
FusionEditorGUI.InjectScriptHeaderDrawer(base.serializedObject);
|
|
UnityEditor.Editor.DrawPropertiesExcluding(base.serializedObject, _excludedProperties);
|
|
IEnumerator enumerator = base.serializedObject.FindProperty("_settings").GetEnumerator();
|
|
while (enumerator.MoveNext())
|
|
{
|
|
if (enumerator.Current is SerializedProperty serializedProperty && serializedProperty.propertyPath.IndexOf('.') == serializedProperty.propertyPath.LastIndexOf('.'))
|
|
{
|
|
EditorGUILayout.PropertyField(serializedProperty);
|
|
}
|
|
}
|
|
|
|
base.serializedObject.ApplyModifiedProperties();
|
|
}
|
|
}
|
|
}
|