118 lines
4.2 KiB
C#
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
|
|
|
|
}
|
|
} |