HumanoidControl_Free/Editor/HumanoidFree/ObjectTracker_Editor.cs
Pascal Serrarens 17741d862a First commit
2022-01-12 10:50:57 +01:00

118 lines
4.2 KiB
C#

using UnityEditor;
using UnityEngine;
namespace Passer.Humanoid {
using Passer.Tracking;
[HelpURL("http://passervr.com/documentation/humanoid-control/object-tracker/")]
[CustomEditor(typeof(ObjectTracker))]
public class ObjectTracker_Editor : Editor {
public enum Side {
Left,
Right
}
protected ObjectTracker objectTracker;
#region Enable
public void OnEnable() {
objectTracker = (ObjectTracker)target;
//if (objectTracker.targetTransform == null)
// objectTracker.targetTransform = objectTracker.transform;
// HumanoidControl humanoid = objectTracker.humanoid;
// if (humanoid != null) {
//#if hOCULUS
// objectTracker.oculusTouch.tracker = humanoid.oculus;
//#endif
// }
//#if hOCULUS
// if (objectTracker.oculusTouch.target == null)
// objectTracker.oculusTouch.target = objectTracker;
//#endif
}
#endregion
#region Disable
public void OnDisable() {
if (!Application.isPlaying) {
serializedObject.Update();
SetSensor2Object();
serializedObject.ApplyModifiedProperties();
}
}
protected void SetSensor2Object() {
SensorComponent sensorComponent = objectTracker.sensorComponent;
if (sensorComponent == null)
return;
SerializedProperty sensor2ObjectRotationProp = serializedObject.FindProperty("sensor2ObjectRotation");
sensor2ObjectRotationProp.quaternionValue = Quaternion.Inverse(sensorComponent.transform.rotation) * objectTracker.transform.rotation;
SerializedProperty sensor2ObjectPositionProp = serializedObject.FindProperty("sensor2ObjectPosition");
sensor2ObjectPositionProp.vector3Value = -InverseTransformPointUnscaled(objectTracker.transform, sensorComponent.transform.position);
}
private static Vector3 InverseTransformPointUnscaled(Transform transform, Vector3 position) {
var worldToLocalMatrix = Matrix4x4.TRS(transform.position, transform.rotation, Vector3.one).inverse;
return worldToLocalMatrix.MultiplyPoint3x4(position);
}
#endregion
#region Inspector
public override void OnInspectorGUI() {
ObjectTracker objectTracker = (ObjectTracker)target;
serializedObject.Update();
SerializedProperty sensorComponentProp = serializedObject.FindProperty("sensorComponent");
sensorComponentProp.objectReferenceValue = (SensorComponent)EditorGUILayout.ObjectField("Sensor Component", sensorComponentProp.objectReferenceValue, typeof(SensorComponent), true);
Settings(objectTracker);
serializedObject.ApplyModifiedProperties();
}
#region Settings
private static bool showSettings = false;
public static void Settings(ObjectTracker objectTracker) {
showSettings = EditorGUILayout.Foldout(showSettings, "Settings", true);
if (showSettings) {
EditorGUI.indentLevel++;
objectTracker.showRealObjects = EditorGUILayout.Toggle("Show Real Objects", objectTracker.showRealObjects);
ShowTrackers(objectTracker, objectTracker.showRealObjects);
// Work in progress
//objectTracker.physics = EditorGUILayout.Toggle("Physics", objectTracker.physics);
EditorGUI.indentLevel--;
}
}
private static void ShowTrackers(ObjectTracker objectTracker, bool shown) {
objectTracker.ShowTrackers(shown);
}
#endregion
#endregion
#region Scene
//private Vector3 objectPosition;
//private Quaternion objectLocalRotation;
public void OnSceneGUI() {
ObjectTracker objectTracker = (ObjectTracker)target;
//if (!Application.isPlaying)
// objectTracker.UpdateSensorsFromTarget();
}
#endregion
}
}