Added InteractionPointer focusDistance

This commit is contained in:
Pascal Serrarens 2022-01-30 15:26:22 +01:00
parent c02a9fffe5
commit a222f1e64f

View File

@ -129,6 +129,12 @@ namespace Passer {
/// The value is null when the pointer is not reaching any object.
public GameObject objectInFocus;
/// <summary>
/// Distance to the objectInFocus
/// </summary>
/// This is float.infintiy when no object is in focus
public float focusDistance;
//protected new EventSystem eventSystem;
//protected PointerEventData data;
protected InteractionModule interactionModule;
@ -332,6 +338,7 @@ namespace Passer {
focusPointObj.SetActive(false);
focusPointObj.transform.position = transform.position;
objectInFocus = null;
focusDistance = float.PositiveInfinity;
hasClicked = false;
}
}
@ -349,9 +356,11 @@ namespace Passer {
focusPosition = hit.point;
focusRotation = Quaternion.LookRotation(hit.normal);
objectInFocus = hit.transform.gameObject;
focusDistance = hit.distance;
}
else {
objectInFocus = null;
focusDistance = float.PositiveInfinity;
}
focusPointObj.transform.position = focusPosition;
@ -379,7 +388,6 @@ namespace Passer {
focusPointObj.transform.position = focusPosition; // bezierPositions[bezierPositions.Length - 1];
focusPointObj.transform.rotation = focusRotation; // Quaternion.LookRotation(normal, transform.forward);
for (int i = 0; i < bezierPositions.Length; i++)
bezierPositions[i] = focusPointObj.transform.InverseTransformPoint(bezierPositions[i]);
@ -406,21 +414,22 @@ namespace Passer {
}
intermediatePosition = Vector3.forward * distance;
Debug.DrawLine(this.transform.position, transform.TransformPoint(intermediatePosition));
//Debug.DrawLine(this.transform.position, transform.TransformPoint(intermediatePosition));
RaycastHit rayHit;
if (Physics.Raycast(transform.TransformPoint(intermediatePosition), Vector3.down, out rayHit)) {
normal = rayHit.normal;
focusObject = rayHit.transform.gameObject;
focusDistance = Vector3.Distance(transform.position, rayHit.point);
endPosition = transform.InverseTransformPoint(rayHit.point);
for (int i = 0; i <= nCurveSegments; i++)
curvePoints[i] = GetPoint(i / (float)nCurveSegments, transform);
}
else {
normal = Vector3.up;
focusObject = null;
focusDistance = float.PositiveInfinity;
}
return curvePoints;
@ -484,6 +493,7 @@ namespace Passer {
Vector3 segVelocity = transform.forward * forwardSpeed;
normal = Vector3.up;
hitObject = null;
focusDistance = float.PositiveInfinity;
for (int i = 1; i < nCurveSegments + 1; i++) {
if (hitObject != null) {
@ -501,6 +511,7 @@ namespace Passer {
if (Physics.Raycast(curvePoints[i - 1], segVelocity.normalized, out hit, resolution)) {
normal = hit.normal;
hitObject = hit.transform.gameObject;
focusDistance = Vector3.Distance(transform.position, hit.point);
// set next position to the position where we hit the physics object
curvePoints[i] = curvePoints[i - 1] + segVelocity.normalized * hit.distance;
@ -511,9 +522,11 @@ namespace Passer {
}
}
}
#endregion
#region Spherecast
/// <summary>The radius of the sphere in a SphereCast</summary>
public float radius = 0.1F;
@ -521,16 +534,19 @@ namespace Passer {
RaycastHit hit;
if (Physics.SphereCast(transform.position, radius, transform.forward, out hit, maxDistance)) {
objectInFocus = hit.transform.gameObject;
focusDistance = hit.distance;
focusPointObj.transform.position = hit.point;
focusPointObj.transform.rotation = Quaternion.LookRotation(hit.normal, transform.forward);
}
else {
objectInFocus = null;
focusDistance = float.PositiveInfinity;
focusPointObj.transform.position = transform.position + transform.forward * maxDistance;
focusPointObj.transform.rotation = Quaternion.identity;
}
}
#endregion
#endregion