Pascal Serrarens 17741d862a First commit
2022-01-12 10:50:57 +01:00

108 lines
4.9 KiB
C#

using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace Passer.Humanoid {
public class LegSensor : HumanoidSensor {
protected FootTarget footTarget {
get { return (FootTarget)target; }
}
protected new Humanoid.Tracking.LegSensor sensor;
#region Start
public virtual void Init(FootTarget footTarget) {
target = footTarget;
}
public override void Start(HumanoidControl _humanoid, Transform targetTransform) {
base.Start(_humanoid, targetTransform);
target = targetTransform.GetComponent<FootTarget>();
}
#if UNITY_EDITOR
public void InitController(SerializedProperty sensorProp, FootTarget footTarget) {
if (sensorProp == null)
return;
Init(footTarget);
SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform");
sensorTransformProp.objectReferenceValue = sensorTransform;
SerializedProperty targetProp = sensorProp.FindPropertyRelative("target");
targetProp.objectReferenceValue = target;
if (!tracker.enabled || !enabled)
return;
CheckSensorTransform();
sensorTransformProp.objectReferenceValue = sensorTransform;
ShowSensor(footTarget.humanoid.showRealObjects && footTarget.showRealObjects);
SerializedProperty sensor2TargetPositionProp = sensorProp.FindPropertyRelative("sensor2TargetPosition");
sensor2TargetPositionProp.vector3Value = sensor2TargetPosition;
SerializedProperty sensor2TargetRotationProp = sensorProp.FindPropertyRelative("sensor2TargetRotation");
sensor2TargetRotationProp.quaternionValue = sensor2TargetRotation;
}
public void RemoveController(SerializedProperty sensorProp) {
if (sensorProp == null)
return;
SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform");
sensorTransformProp.objectReferenceValue = null;
}
#endif
protected virtual void CreateSensorTransform(string resourceName, Vector3 sensor2TargetPosition, Quaternion sensor2TargetRotation) {
CreateSensorTransform(footTarget.foot.target.transform, resourceName, sensor2TargetPosition, sensor2TargetRotation);
}
#endregion
protected virtual void UpdateUpperLeg(Humanoid.Tracking.LegSensor legSensor) {
if (footTarget.upperLeg.target.transform != null) {
if (legSensor.upperLeg.confidence.position > 0)
footTarget.upperLeg.target.transform.position = HumanoidTarget.ToVector3(legSensor.upperLeg.position);
//else
// footTarget.upperLeg.target.transform.position = footTarget.shoulder.target.transform.position + footTarget.shoulder.target.transform.rotation * footTarget.outward * footTarget.shoulder.bone.length;
if (legSensor.upperLeg.confidence.rotation > 0)
footTarget.upperLeg.target.transform.rotation = HumanoidTarget.ToQuaternion(legSensor.upperLeg.rotation);
footTarget.upperLeg.target.confidence = legSensor.upperLeg.confidence;
}
}
protected virtual void UpdateLowerLeg(Humanoid.Tracking.LegSensor legSensor) {
if (footTarget.lowerLeg.target.transform == null)
return;
if (legSensor.lowerLeg.confidence.position > 0)
footTarget.lowerLeg.target.transform.position = HumanoidTarget.ToVector3(legSensor.lowerLeg.position);
else
footTarget.lowerLeg.target.transform.position = footTarget.upperLeg.target.transform.position + footTarget.upperLeg.target.transform.rotation * Vector3.down * footTarget.upperLeg.bone.length;
if (legSensor.lowerLeg.confidence.rotation > 0)
footTarget.lowerLeg.target.transform.rotation = HumanoidTarget.ToQuaternion(legSensor.lowerLeg.rotation);
footTarget.lowerLeg.target.confidence = legSensor.lowerLeg.confidence;
}
protected virtual void UpdateFoot(Humanoid.Tracking.LegSensor legSensor) {
if (footTarget.foot.target.transform != null) {
if (legSensor.foot.confidence.position > 0)
footTarget.foot.target.transform.position = HumanoidTarget.ToVector3(legSensor.foot.position);
else
footTarget.foot.target.transform.position = footTarget.lowerLeg.target.transform.position + footTarget.lowerLeg.target.transform.rotation * Vector3.down * footTarget.lowerLeg.bone.length;
if (legSensor.foot.confidence.rotation > 0)
footTarget.foot.target.transform.rotation = HumanoidTarget.ToQuaternion(legSensor.foot.rotation);
footTarget.foot.target.confidence = legSensor.foot.confidence;
}
}
}
}